al final apenas abri el archivo, por mas que el archivo este vacio.
Tambien habia un fseek(SEEK_END) donde el offset no era negativo
#define EXT_TIPO3_DATA ".dat"
#define EXT_TIPO3_DISP ".fsc"
#define EXT_TIPO3_IDS ".idc"
#define EXT_TIPO3_DATA ".dat"
#define EXT_TIPO3_DISP ".fsc"
#define EXT_TIPO3_IDS ".idc"
+#define EXT_TIPO3_EXTRA ".ids"
char *str_dup(const char *s)
{
char *str_dup(const char *s)
{
strcat(name, EXT_TIPO3_IDS);
fp = fopen(name, "w");
fclose(fp);
strcat(name, EXT_TIPO3_IDS);
fp = fopen(name, "w");
fclose(fp);
+
+ strcpy(name, filename);
+ strcat(name, EXT_TIPO3_EXTRA);
+ fp = fopen(name, "w");
+ fclose(fp);
break;
default:
free(tmp);
break;
default:
free(tmp);
strcat(name_f_reg_exist,".ids");
if ( (f_reg_exist = fopen(name_f_reg_exist,"r")) == NULL) return -1; /*ERROR*/
strcat(name_f_reg_exist,".ids");
if ( (f_reg_exist = fopen(name_f_reg_exist,"r")) == NULL) return -1; /*ERROR*/
- if ( !feof(f_reg_exist) ){
+ fseek(f_reg_exist, 0, SEEK_END);
+
+ if (ftell(f_reg_exist) > 0){
/* si el archivo no esta vacio es porque hay un nro disponible*/
/* si el archivo no esta vacio es porque hay un nro disponible*/
- fseek(f_reg_exist,sizeof(id),SEEK_END);
+ fseek(f_reg_exist, -sizeof(id),SEEK_END);
fread(&id,sizeof(id),1,f_reg_exist);
/* FIXME: tengo que truncar el archivo*/
/* FIXME: tengo que truncar el archivo*/
fread(&id,sizeof(id),1,f_reg_exist);
/* FIXME: tengo que truncar el archivo*/
/* FIXME: tengo que truncar el archivo*/
/* FIXME: tengo que truncar el archivo*/
}else{
/*si no, hay que buscar el mayor de los numeros*/
/* FIXME: tengo que truncar el archivo*/
}else{
/*si no, hay que buscar el mayor de los numeros*/
if ( (f_block_reg = fopen(name_f_block_reg,"r")) == NULL) return -1; /*ERROR*/
while ( !feof(f_block_reg) ){
if ( (f_block_reg = fopen(name_f_block_reg,"r")) == NULL) return -1; /*ERROR*/
while ( !feof(f_block_reg) ){
- fread(®,sizeof(reg),1,f_block_reg);
+ /* Me aseguro de leer la cantidad de bytes correcta */
+ if (fread(®,sizeof(reg),1,f_block_reg) != sizeof(reg)) continue;
if ( reg.id_reg >= max )
max = reg.id_reg;
}
if ( reg.id_reg >= max )
max = reg.id_reg;
}