]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* BUGFIX : Arreglo en get_id un par de cosas para que ande. Entre ellas que feof...
authorRicardo Markiewicz <gazer.arg@gmail.com>
Mon, 5 Apr 2004 03:33:11 +0000 (03:33 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Mon, 5 Apr 2004 03:33:11 +0000 (03:33 +0000)
 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

tipo3/emufs.c
tipo3/param_cte.c

index a06ad13015063c9a2c0318a624e447e6f6d46760..9883f70ca9cfbba1f2412be04d7e583237651010 100644 (file)
@@ -7,6 +7,7 @@
 #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)
 {
@@ -66,6 +67,11 @@ EMUFS *emufs_crear(const char *filename, char tipo, unsigned int tam_bloque, uns
                        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);
index e0786fe13b2733272959d7e9c52899415c1f442d..3189a97086393aaaa2e3482086c27d4724e66898 100644 (file)
@@ -263,9 +263,11 @@ int get_id(EMUFS *emu)
        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*/
@@ -275,9 +277,11 @@ int get_id(EMUFS *emu)
                /* 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*/
+               id = -1;
                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(&reg,sizeof(reg),1,f_block_reg);
+                       /* Me aseguro de leer la cantidad de bytes correcta */
+                       if (fread(&reg,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;
                }