]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/tipo1.c
Puto bug que no podia encontrar hace 3 dias, FIXED!!!!!
[z.facultad/75.06/emufs.git] / emufs / tipo1.c
index 419306c02e8596cfcf040ac7a2bdf8c04df8d1e8..ffca1914cf923b2dc8b48a639a317039866fc43a 100644 (file)
@@ -462,10 +462,7 @@ int emufs_tipo1_borrar_registro(EMUFS* efs, CLAVE k, INDICE_DATO dato1)
                                /* si es necesario desplazar */
                                if (offset < offset_reg_end) {
                                        /* muevo la porción de bloque a izquierda */
                                /* si es necesario desplazar */
                                if (offset < offset_reg_end) {
                                        /* muevo la porción de bloque a izquierda */
-                                       /* XXX Este memcpy() puede copiar regiones de memoria que
-                                        * se superponen, si copia de principio a fin y byte a byte
-                                        * no debería haber problema */
-                                       memcpy(block + offset, block + offset_reg_end,
+                                       memmove(block + offset, block + offset_reg_end,
                                                efs->tam_bloque - offset_reg_end);
                                        /* rellena el espacio libre con ceros para la GUI */
                                        memset(block + efs->tam_bloque - offset_reg_end - orig_fs + offset,
                                                efs->tam_bloque - offset_reg_end);
                                        /* rellena el espacio libre con ceros para la GUI */
                                        memset(block + efs->tam_bloque - offset_reg_end - orig_fs + offset,
@@ -633,7 +630,7 @@ EMUFS_BLOCK_ID emufs_tipo1_grabar_bloque_fsc(EMUFS *efs, void *block,
                PERR("Error al obtener tamaño del archivo.");
                return EMUFS_NOT_FOUND;
        }
                PERR("Error al obtener tamaño del archivo.");
                return EMUFS_NOT_FOUND;
        }
-
+       
        /* abre archivo */
        strcpy(name_f,efs->nombre);
        strcat(name_f,".dat");
        /* abre archivo */
        strcpy(name_f,efs->nombre);
        strcat(name_f,".dat");
@@ -756,7 +753,7 @@ int emufs_tipo1_insertar_ordenado(EMUFS *emu, void *ptr, EMUFS_REG_SIZE size, in
        EMUFS_REG_SIZE tam_reg, move_size;
        INDEX_DAT query;
        EMUFS_FREE fs;
        EMUFS_REG_SIZE tam_reg, move_size;
        INDEX_DAT query;
        EMUFS_FREE fs;
-       char *bloque, *aux, *new_bloque;
+       char *bloque = 0, *aux, *new_bloque = 0;
        int cant_reg, i, result, dif;
        
        /*le asigno un posible numero de bloque para el caso en que no encuentre donde meterlo*/
        int cant_reg, i, result, dif;
        
        /*le asigno un posible numero de bloque para el caso en que no encuentre donde meterlo*/
@@ -857,6 +854,7 @@ int emufs_tipo1_insertar_ordenado(EMUFS *emu, void *ptr, EMUFS_REG_SIZE size, in
                        memcpy(bloque+emu->tam_bloque-sizeof(int), &i, sizeof(int));
                        PERR("PASE");
                        /*grabo el bloque original*/
                        memcpy(bloque+emu->tam_bloque-sizeof(int), &i, sizeof(int));
                        PERR("PASE");
                        /*grabo el bloque original*/
+                       printf("voya a grabar en bloque: %d\n", num_bloque);
                        emufs_tipo1_grabar_bloque_fsc(emu, bloque, num_bloque, EMUFS_NOT_FOUND, err);
                        PERR("GRABE EL BLOQUE 1 de 2");
                        /*actualizo el footer del nuevo bloque*/
                        emufs_tipo1_grabar_bloque_fsc(emu, bloque, num_bloque, EMUFS_NOT_FOUND, err);
                        PERR("GRABE EL BLOQUE 1 de 2");
                        /*actualizo el footer del nuevo bloque*/
@@ -867,6 +865,12 @@ int emufs_tipo1_insertar_ordenado(EMUFS *emu, void *ptr, EMUFS_REG_SIZE size, in
                        query.num_bloque = emufs_create_new_block(emu);
                        /*inserto el nuevo registro en el nuevo bloque y obtengo la clave del menor*/
                        clave = grabar_ordenado_en_bloque(emu,ptr,size,new_bloque,query.num_bloque, emu->tam_bloque-move_size,err);
                        query.num_bloque = emufs_create_new_block(emu);
                        /*inserto el nuevo registro en el nuevo bloque y obtengo la clave del menor*/
                        clave = grabar_ordenado_en_bloque(emu,ptr,size,new_bloque,query.num_bloque, emu->tam_bloque-move_size,err);
+                       if(*err != 0){
+                               PERR("NO SE PUDO GRABAR ORDENADO");
+                               free(new_bloque);
+                               free(bloque);
+                               return -1;
+                       }
                        /*actualizo el arbol con la nueva clave*/
                        emufs_b_plus_insertar(emu->indices, &query);
                        free(new_bloque);
                        /*actualizo el arbol con la nueva clave*/
                        emufs_b_plus_insertar(emu->indices, &query);
                        free(new_bloque);
@@ -874,6 +878,8 @@ int emufs_tipo1_insertar_ordenado(EMUFS *emu, void *ptr, EMUFS_REG_SIZE size, in
                        return 0;
                }
        }
                        return 0;
                }
        }
+       if (new_bloque) free(new_bloque);
+       if (bloque) free(bloque);
        return 0;
 }
 
        return 0;
 }