int readfetfile_ret(FET **ofet, char *file) { int ret; FILE *fp; FET *fet; char c,buf[MAXFETLENGTH]; size_t len = 0; if ((fp = fopen(file,"rb")) == (FILE *)NULL){ fprintf(stderr, "ERROR : readfetfile_ret : fopen : %s\n", file); return(-2); } if((ret = allocfet_ret(&fet, MAXFETS))){ fclose(fp); return(ret); } while (fscanf(fp,"%s",buf) != EOF){ while(((c = getc(fp)) == ' ') || (c == '\t')); ungetc(c, fp); if (fet->num >= fet->alloc){ if((ret = reallocfet_ret(&fet, fet->alloc + MAXFETS))){ fclose(fp); freefet(fet); return(ret); } } len = strlen(buf) + 1; fet->names[fet->num] = malloc(len); if(fet->names[fet->num] == (char *)NULL){ fprintf(stderr, "ERROR : readfetfile_ret : malloc : fet->names[]\n"); fclose(fp); freefet(fet); return(-3); } strncpy(fet->names[fet->num], buf, len); fgets(buf,MAXFETLENGTH-1,fp); buf[strlen(buf)-1] = '\0'; len = strlen(buf) + 1; fet->values[fet->num] = malloc(len); if(fet->values[fet->num] == (char *)NULL){ fprintf(stderr, "ERROR : readfetfile_ret : malloc : fet->values[]\n"); fclose(fp); freefet(fet); return(-4); } strncpy(fet->values[fet->num], buf, len); (fet->num)++; } fclose(fp); *ofet = fet; return(0); }
int updatefet_ret(char *feature, char *value, FET *fet) { int ret, item; int increased, incr; for (item = 0; (item < fet->num) && (strcmp(fet->names[item],feature) != 0); item++); if (item < fet->num){ if(fet->values[item] != (char *)NULL){ free(fet->values[item]); fet->values[item] = (char *)NULL; } if(value != (char *)NULL){ fet->values[item] = (char *)strdup(value); if(fet->values[item] == (char *)NULL){ fprintf(stderr, "ERROR : updatefet_ret : strdup : fet->values[]\n"); return(-2); } } } else{ if(fet->num >= fet->alloc){ incr = fet->alloc / 10; /* add 10% or 10 which- */ increased = fet->alloc + max(10, incr); /* ever is larger */ if((ret = reallocfet_ret(&fet, increased))) return(ret); } fet->names[fet->num] = (char *)strdup(feature); if(fet->names[fet->num] == (char *)NULL){ fprintf(stderr, "ERROR : updatefet_ret : strdup : fet->names[]\n"); return(-3); } if(value != (char *)NULL){ fet->values[fet->num] = (char *)strdup(value); if(fet->values[fet->num] == (char *)NULL){ fprintf(stderr, "ERROR : updatefet_ret : strdup : fet->values[]\n"); return(-4); } } (fet->num)++; } return(0); }