+/* Asigna los punteros a las funciones apropiadas para el Tipo2 */
+int emufs_tipo2_inicializar(EMUFS* efs)
+{
+ efs->grabar_registro = emufs_tipo2_grabar_registro;
+ efs->borrar_registro = emufs_tipo2_borrar_registro;
+ efs->leer_registro = emufs_tipo2_leer_registro;
+
+ return 0;
+}
+
+/**********************************************************************/
+/* void *emufs_tipo2_leer_registro(EMUFS* efs, EMUFS_REG_ID reg_id, */
+/* EMUFS_REG_SIZE* reg_size, int *err) */
+/* Objetivo: Lee un registro de un archivo del Tipo 2. */
+/* Parametros: EMUFS *efs // Struct con handlers + info del openfile. */
+/* EMUFS_REG_ID reg_id // Id del registro a cargar */
+/* EMUFS_REG_SIZE *reg_size // Size del reg en cuestion */
+/* int *err // Indicador de errores */
+/**********************************************************************/
+void *emufs_tipo2_leer_registro(EMUFS* efs, EMUFS_REG_ID reg_id,
+ EMUFS_REG_SIZE* reg_size, int *err)
+{
+ FILE* f_data;
+ char *registro; /* registro a leer */
+ char name_f[255];
+ EMUFS_OFFSET reg_offset; /* offset donde se encuentra el registro */
+
+ strcpy(name_f,efs->nombre);
+ strcat(name_f,".dat");
+
+ /* Obtenemos la posicion del registro en el .dat */
+ reg_offset = emufs_idx_buscar_registro(efs, reg_id);
+ if (reg_offset == EMUFS_NOT_FOUND) {
+ /* TODO Manejo de errores */
+ PERR("Registro no encontrado");
+ *err = EMUFS_NOT_FOUND;
+ return NULL;
+ }
+
+ /* Levantamos el registro */
+ if ((f_data = fopen(name_f, "rb")) == NULL) {
+ PERR("No se puede abrir archivo");
+ *err = 4; /* EMUFS_ERROR_CANT_OPEN_FILE */
+ return NULL; /* FIXME ERROR */
+ }
+ fseek(f_data,reg_offset+sizeof(EMUFS_REG_ID),0);
+ fread(reg_size,sizeof(EMUFS_REG_SIZE),1,f_data);
+ registro = (char*)malloc(*reg_size);
+ fread(registro,*reg_size,1,f_data);
+ fclose(f_data);
+
+ return registro;
+}
+