#include "idx.h"
#include <stdlib.h>
#include <strings.h>
+#include <unistd.h>
FILE* emufs_idx_abrir(EMUFS* efs, const char* mode)
{
printf("ACTUAL = %ld\n", actual/sizeof(EMUFS_IDX));
fseek(f_idx, 0, SEEK_END); /* me voy al final */
final = ftell(f_idx); /* veo cuando ocupa el archivo */
- printf("tamanio del archivo de bloques y registros = %d\n", final/sizeof(EMUFS_IDX));
+ printf("tamanio del archivo de bloques y registros = %ld\n", final/sizeof(EMUFS_IDX));
fseek(f_idx, actual, SEEK_SET); /* vuelvo al lugar desde donde quiero justificar */
cant = (final-actual)/sizeof(EMUFS_IDX);
- printf("cant = %d\n", cant);
+ printf("cant = %ld\n", cant);
for(i=0; i<cant-1; i++) {
/* Calculo donde empieza el proximo elemento a mover */
final = actual+sizeof(EMUFS_IDX); printf("final = %ld actual = %ld\n", final/sizeof(EMUFS_IDX), actual/sizeof(EMUFS_IDX));
}
fseek (f_idx,0,SEEK_END);
tam = ftell(f_idx);
- printf("tamanio del archivo de bloques y registros = %d\n", tam/sizeof(EMUFS_IDX) - 1);
+ printf("tamanio del archivo de bloques y registros = %ld\n", tam/sizeof(EMUFS_IDX) - 1);
fclose(f_idx);
truncate(name_f_idx, tam - sizeof(EMUFS_IDX));
return 0;
{
char* block; /* bloque leido (en donde está el registro a leer) */
EMUFS_BLOCK_ID block_id; /* id del bloque en donde esta el registro a leer */
- EMUFS_BLOCK_SIZE offset; /* offset del bloque leido */
- EMUFS_REG_SIZE curr_reg_size; /* tamaño del registro leido secuencialmente */
- EMUFS_REG_ID curr_reg_id; /* id del registro leido secuencialmente */
+ EMUFS_BLOCK_SIZE offset; /* offset del bloque leído */
+ EMUFS_BLOCK_SIZE block_size; /* tamaño del bloque leído */
+ EMUFS_REG_SIZE curr_reg_size; /* tamaño del registro leído secuencialmente */
+ EMUFS_REG_ID curr_reg_id; /* id del registro leído secuencialmente */
block_id = emufs_idx_buscar_registro(efs, reg_id);
block = (char*) malloc(efs->tam_bloque);
}
/* Desplazo el offset */
offset += curr_reg_size;
- } while (offset < efs->tam_bloque);
+ } while (offset < block_size);
free(block);
return 0;
{
FILE* file;
char name_f[255];
+ long cant;
strcpy(name_f,efs->nombre);
strcat(name_f,".dat");
SEEK_SET);
/* FIXME: verificar que no se pase de fin de archivo*/
fseek(file, block_id * efs->tam_bloque, SEEK_CUR);
- if (fread(block, efs->tam_bloque, 1, file) != 1) {
- fclose(file);
- return -1;
- }
-
+ cant = fread(block, sizeof(char), efs->tam_bloque, file);
fclose(file);
- return 0;
+ return cant;
}
EMUFS_REG_ID emufs_tipo1_grabar_registro(EMUFS* emu, void* ptr,
printf("Faltan argumentos! %s [nombre]\n", argv[0]);
return 1;
}
- efs = emufs_abrir(argv[1]);
+
+ /*
+ efs = emufs_crear(argv[1], T1, 1024, 0);
if (!efs) {
printf("No se pudo crear el EMUFS.\n");
return 1;
}
- if (efs->leer_registro(efs, 1, registro1, 4) == -1) {
+ if (emufs_idx_agregar(efs, 0, 0)) {
+ printf("No se pudo agregar índice.\n");
+ return 1;
+ }
+ if (emufs_idx_agregar(efs, 0, 1)) {
+ printf("No se pudo agregar índice.\n");
+ return 1;
+ }
+ return 0;
+ */
+
+ efs = emufs_abrir(argv[1]);
+ if (!efs) {
+ printf("No se pudo abrir el EMUFS.\n");
+ return 1;
+ }
+
+ if (efs->leer_registro(efs, 0, registro1, 4) == -1) {
printf("No se pudo leer el registro 1.\n");
return ;
}
registro1[4] = '\0';
printf("Registro 1: %s\n", registro1);
+
+ /*
if (efs->leer_registro(efs, 1, registro2, 5) == -1) {
printf("No se pudo leer el registro 2.\n");
return 1;
}
registro2[5] = '\0';
printf("Registro 2: %s\n", registro2);
+ */
+
emufs_destruir(efs);
return 0;
}