Exemplo n.º 1
0
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);
}
Exemplo n.º 2
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);
}