]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/tipo1.c
hago un pequeño fix para que ande un poco mejor cuando bloque < reg
[z.facultad/75.06/emufs.git] / emufs / tipo1.c
index 78a3806991816ac9efb2262deffe79db6498b5d7..76ded8bccd94a61b68df89b035a8e53565c8a505 100644 (file)
@@ -184,9 +184,7 @@ void* emufs_tipo1_leer_registro(EMUFS* efs, EMUFS_REG_ID reg_id,
        return registro;
 }
 
-/* @todo TODO hacer que soporte registros de más de un bloque */
-void* emufs_tipo1_leer_registro_raw(EMUFS *efs, EMUFS_REG_ID id,
-               EMUFS_REG_SIZE *size, int *pos)
+void* emufs_tipo1_leer_registro_raw(EMUFS *efs, EMUFS_REG_ID id, EMUFS_REG_SIZE *size, int *pos)
 {
        char *chunk_ptr;
        char* block; /* bloque leido (en donde está el registro a leer) */
@@ -228,7 +226,7 @@ void* emufs_tipo1_leer_registro_raw(EMUFS *efs, EMUFS_REG_ID id,
 
                        cant_bloques = curr_reg_header.size / block_space + 1;
                        *size = cant_bloques*efs->tam_bloque;
-                       registro = chunk_ptr = (char*) malloc(*size - (cant_bloques-1)*sizeof(EMUFS_TIPO1_REG_HEADER));
+                       registro = chunk_ptr = (char*) malloc(*size - (cant_bloques-1)*sizeof(EMUFS_TIPO1_REG_HEADER) + (cant_bloques-1)*2);
                        if (registro == NULL) {
                                /* TODO Manejo de errores */
                                free(block);
@@ -245,8 +243,10 @@ void* emufs_tipo1_leer_registro_raw(EMUFS *efs, EMUFS_REG_ID id,
                                err = 0;
                                block = (char*)emufs_tipo1_leer_bloque(efs, block_id+i, &err);
                                /* Solo grabo el header del primer pedazo! */
-                               memcpy(registro, block+sizeof(EMUFS_TIPO1_REG_HEADER), efs->tam_bloque);
-                               chunk_ptr += efs->tam_bloque;
+                               memcpy(chunk_ptr, "<>", 2);
+                               chunk_ptr += 2;
+                               memcpy(chunk_ptr, block+sizeof(EMUFS_TIPO1_REG_HEADER), efs->tam_bloque-sizeof(EMUFS_TIPO1_REG_HEADER));
+                               chunk_ptr += efs->tam_bloque-sizeof(EMUFS_TIPO1_REG_HEADER);
                                free(block);
                        }
                        /* Todo listo! */