From: Nicolás Dimov Date: Sat, 29 May 2004 02:36:52 +0000 (+0000) Subject: altos avances del debug X-Git-Tag: svn_import_r684~130 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/11d6454ce311ba4d1271201649362d4300de2bee?ds=inline altos avances del debug --- diff --git a/emufs/emufs.c b/emufs/emufs.c index fc4165d..4b78a7d 100644 --- a/emufs/emufs.c +++ b/emufs/emufs.c @@ -518,7 +518,7 @@ EMUFS_BLOCK_ID emufs_create_new_block(EMUFS *emu) } fclose(fp); free(dummy); - return num; + return num-1; } /*devuelve un numero de bloque siguiente al ultimo*/ diff --git a/emufs/tipo1.c b/emufs/tipo1.c index 1bc3d2b..8b66be8 100644 --- a/emufs/tipo1.c +++ b/emufs/tipo1.c @@ -836,45 +836,55 @@ int emufs_tipo1_insertar_ordenado(EMUFS *emu, void *ptr, EMUFS_REG_SIZE size, in new_bloque = (char*)malloc(emu->tam_bloque); move_size=0; aux = bloque; - for(i=0; itam_bloque-move_size/*-sizeof(int)*/); + memcpy(new_bloque, aux, emu->tam_bloque-move_size-sizeof(int)); /*borro lo que sobra en el bloque original, guardando el footer*/ memset(aux, 0, emu->tam_bloque - move_size - sizeof(int)); - /*actualizo la cant de registros del bloque original (footer)*/ - i++; /* 0 a n hay n+1 */ - memcpy(bloque+emu->tam_bloque-sizeof(int), &i, sizeof(int)); - /*actualizo el footer del nuevo bloque*/ - dif = cant_reg - i; /*por las dudas*/ - memcpy(new_bloque+emu->tam_bloque-sizeof(int), &dif, sizeof(int)); menor_clave_bloque_nuevo = emufs_indice_generar_clave(emu->indices, new_bloque+sizeof(EMUFS_TIPO1_REG_HEADER)); /* TENGO QUE VER EN CUAL DE LOS DOS BLOQUES METO EL REGISTRO NUEVO */ + printf("I = %d\n", i ) ; if ( emufs_indice_es_menor(emu->indices, menor_clave_bloque_nuevo, clave) ){ + /* GRABO EN EL BLOQUE NUEVO */ + /*actualizo la cant de registros del bloque original (footer)*/ + memcpy(bloque+emu->tam_bloque-sizeof(int), &i, sizeof(int)); + /*actualizo el footer del nuevo bloque*/ + dif = cant_reg - i; /*por las dudas*/ + printf("DIF = %d\n", dif); + memcpy(new_bloque+emu->tam_bloque-sizeof(int), &dif, sizeof(int)); /*genero un nuevo espacio para un bloque en el archivo y lo cargo en queryla clave ya estaba en query desde antes*/ + num_bloque = query.num_bloque; query.num_bloque = emufs_create_new_block(emu); - printf("numero de bloque nuevo: %d\n", query.num_bloque); /*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); /*actualizo el arbol con la nueva clave*/ query.clave = clave; emufs_b_plus_insertar(emu->indices, &query); /*grabo el bloque original*/ - printf("numero de bloque viejo: %d\n", num_bloque); emufs_tipo1_grabar_bloque_fsc(emu, bloque, num_bloque, EMUFS_NOT_FOUND, err); } else { - /*grabo el bloque nuevo*/ + PERR("GRABO EN BLOQUE VIEJO"); + /* GRABO EN EL BLOQUE VIEJO */ + /*actualizo la cant de registros del bloque original (footer)*/ + memcpy(bloque+emu->tam_bloque-sizeof(int), &i, sizeof(int)); + /*actualizo el footer del nuevo bloque*/ + dif = cant_reg - i; /*por las dudas*/ + /*meto el footer en el reg */ + memcpy(new_bloque+emu->tam_bloque-sizeof(int), &dif, sizeof(int)); + /*guardo el num de bloque original */ + num_bloque = query.num_bloque; + /* pido un bloque nuevo para guardar */ query.num_bloque = emufs_create_new_block(emu); - printf("numero de bloque nuevo: %d\n", query.num_bloque); - emufs_tipo1_grabar_bloque_fsc(emu, new_bloque, emufs_create_new_block(emu), EMUFS_NOT_FOUND, err); - printf("numero de bloque viejo %d\n", num_bloque); - grabar_ordenado_en_bloque(emu,ptr,size,bloque,query.num_bloque, fs-move_size,err); - + /*grabo el bloque nuevo*/ + emufs_tipo1_grabar_bloque_fsc(emu, new_bloque, query.num_bloque, EMUFS_NOT_FOUND, err); + /*grabo el registro en el bloque original*/ + printf("espacio libre = %d\n", fs+move_size); + grabar_ordenado_en_bloque(emu,ptr,size,bloque,num_bloque, fs+move_size,err); } if(*err != 0){ PERR("NO SE PUDO GRABAR ORDENADO"); diff --git a/emufs/tipo1_bplus_main.c b/emufs/tipo1_bplus_main.c index 771b1a2..535e19c 100644 --- a/emufs/tipo1_bplus_main.c +++ b/emufs/tipo1_bplus_main.c @@ -41,10 +41,11 @@ int main (int argc,char* argv[]) EMUFS_REG_SIZE len; int err=0; + texto = "PARTE COSNSTANTE, clave ="; emu = emufs_crear("test",T1,512,0); emufs_agregar_indice(emu,"claveidx",IND_PRIMARIO,IND_B_PLUS,IDX_INT,strlen(texto),tam_nodo); - texto = "PARTE COSNSTANTE, clave ="; + /*REGISTRO 1*/ clave.i_clave = 77; texto2="termina el texto re bonito CLAVE = 77"; @@ -65,7 +66,7 @@ int main (int argc,char* argv[]) PERR("REGISTRO 2 GRABADO"); free(r); -/*REGISTRO 3 +/*REGISTRO 3 */ texto2="Este es el fin del registro tres, puse tres en numero para que sea mas largo el texto CLAVE = 95"; clave.i_clave = 95; r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2)); @@ -75,7 +76,7 @@ int main (int argc,char* argv[]) PERR("REGISTRO 3 GRABADO"); free(r); -/*REGISTRO 4 +/*REGISTRO 4 */ texto2="REGISTRO CUATRO CLAVE = 99"; clave.i_clave = 99; r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2)); @@ -85,7 +86,7 @@ int main (int argc,char* argv[]) PERR("REGISTRO 4 GRABADO"); free(r); -/*REGISTRO 5 +/*REGISTRO 5 */ texto2="el quinto registro tiene un largo promedio como para entrar en el bloque CLAVE = 102"; clave.i_clave = 102; r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2)); @@ -96,8 +97,8 @@ int main (int argc,char* argv[]) free(r); /*REGISTRO 6*/ -/* texto2="El registro 6 no entra CLAVE = 106"; - clave.i_clave = 106; + texto2="El registro 6 no entra CLAVE = 93"; + clave.i_clave = 93; r = cargar_registro(texto, strlen(texto), clave, texto2, strlen(texto2)); imprimir_reg(r, strlen(texto), strlen(texto)+strlen(texto2)+sizeof(CLAVE)); len = strlen(texto)+strlen(texto2)+sizeof(CLAVE); @@ -105,7 +106,7 @@ int main (int argc,char* argv[]) PERR("REGISTRO 6 GRABADO"); free(r); emufs_destruir(emu); -*/ + return 0; }