CFLAGS=-Wall -g -ansi -pedantic -DDEBUG
LDFLAGS=-lm
-EMUFS_COMMON=emufs.o tipo1.o tipo2.o tipo3.o idx.o did.o fsc.o
+EMUFS_COMMON=emufs.o tipo1.o tipo2.o tipo3.o idx.o did.o fsc.o common.o
all: libemufs.a tipo1_main tipo2_main tipo3_main
--- /dev/null
+/* vim: set noexpandtab tabstop=4 shiftwidth=4 wrap:
+ *----------------------------------------------------------------------------
+ * emufs
+ *----------------------------------------------------------------------------
+ * This file is part of emufs.
+ *
+ * emufs is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * emufs is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with emufs; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *----------------------------------------------------------------------------
+ * Creado: dom abr 18 13:28:44 ART 2004
+ * Autores: Leandro Lucarella <llucare@fi.uba.ar>
+ *----------------------------------------------------------------------------
+ *
+ * $Id$
+ *
+ */
+
+/** \file
+ *
+ * Funciones para uso común de los tipos de archivo de EMUFS.
+ *
+ */
+
+#include "common.h"
+#include "error.h"
+#include <stdio.h>
+
+long emufs_common_get_file_size(const char* filename, int* err)
+{
+ FILE* file;
+ long file_size;
+
+ if (!(file = fopen(filename, "ab"))) {
+ PERR("Error al abrir archivo");
+ *err = EMUFS_ERROR_CANT_OPEN_FILE;
+ return 0;
+ }
+ file_size = ftell(file);
+ fclose(file);
+ if (file_size < 0) {
+ PERR("Error al obtener posición del archivo");
+ *err = EMUFS_ERROR_TELL_FILE;
+ return 0;
+ }
+ return file_size;
+}
+
--- /dev/null
+/* vim: set noexpandtab tabstop=4 shiftwidth=4 wrap:
+ *----------------------------------------------------------------------------
+ * emufs
+ *----------------------------------------------------------------------------
+ * This file is part of emufs.
+ *
+ * emufs is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * emufs is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with emufs; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ *----------------------------------------------------------------------------
+ * Creado: dom abr 18 13:28:44 ART 2004
+ * Autores: Leandro Lucarella <llucare@fi.uba.ar>
+ *----------------------------------------------------------------------------
+ *
+ * $Id$
+ *
+ */
+
+/** \file
+ *
+ * Funciones para uso común de los tipos de archivo de EMUFS.
+ *
+ */
+
+#ifdef DEBUG
+ /** Imprime un mensaje de debug por pantalla. */
+ #define PERR(msg) fprintf(stderr, "%s:%d> %s.\n",__FILE__, __LINE__, msg);
+#else
+ #define PERR(msg) ;
+#endif /* DEBUG */
+
+/** Obtiene el tamaño del archivo de nombre \c filename. */
+long emufs_common_get_file_size(const char* filename, int* err);
+
#include "did.h"
#include "error.h"
+#include "common.h"
#include <unistd.h>
-#include <sys/types.h>
#include <string.h>
int emufs_did_crear(EMUFS* efs)
*/
#include "emufs.h"
+#include "common.h"
#include "tipo1.h"
#include "tipo2.h"
#include "tipo3.h"
#include <stdio.h>
#include <limits.h>
-#ifdef DEBUG
- /** Imprime un mensaje de debug por pantalla. */
- #define PERR(msg) fprintf(stderr, "%s:%d> %s.\n",__FILE__, __LINE__, msg);
-#else
- #define PERR(msg) ;
-#endif /* DEBUG */
-
/** Tipo de archivo. */
typedef enum {
T1, /**< Archivo de bloque parametrizado y registro variable. */
#include "fsc.h"
#include "error.h"
+#include "common.h"
#include <unistd.h>
-#include <sys/types.h>
#include <string.h>
/* Crea un archivo de Gaps o Espacio Libre en Bloque */
#include "idx.h"
#include "did.h"
#include "error.h"
+#include "common.h"
#include <stdlib.h>
#include <strings.h>
#include <unistd.h>
#include "idx.h"
#include "fsc.h"
#include "did.h"
+#include "common.h"
#include "error.h"
#include <unistd.h>
-#include <sys/types.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
static EMUFS_BLOCK_ID emufs_tipo1_grabar_bloque_fsc(EMUFS*, void*,
EMUFS_BLOCK_ID, EMUFS_FREE, int*);
-/** Obtiene el tamaño del archivo. */
-static long emufs_tipo1_get_file_size(EMUFS*, int*);
-
/*------------------ Funciones públicas ----------------------*/
int emufs_tipo1_inicializar(EMUFS* efs)
EMUFS_Estadisticas stats;
memset(&stats, 0, sizeof(EMUFS_Estadisticas));
- stats.tam_archivo_bytes = emufs_tipo1_get_file_size(efs, &err);
- if (err) {
- PERR("no se pudo obtener el tamaño del archivo");
- return stats;
+ { /* obtengo tamaño del archivo en bytes */
+ char name_f[255];
+ strcpy(name_f, efs->nombre);
+ strcat(name_f, ".dat");
+ stats.tam_archivo_bytes = emufs_common_get_file_size(name_f, &err);
+ if (err) {
+ PERR("no se pudo obtener el tamaño del archivo");
+ return stats;
+ }
}
/* obtengo cantidad de bloques */
{
FILE* file;
char name_f[255];
+ EMUFS_BLOCK_SIZE num_blocks;
+
+ /* obtengo nombre del archivo */
+ strcpy(name_f, efs->nombre);
+ strcat(name_f,".dat");
+
/* obtengo cantidad de bloques */
- EMUFS_BLOCK_SIZE num_blocks =
- (emufs_tipo1_get_file_size(efs, err) - emufs_tipo1_header_size())
+ num_blocks =
+ (emufs_common_get_file_size(name_f, err) - emufs_tipo1_header_size())
/ efs->tam_bloque;
+ if (*err) {
+ PERR("Error al obtener tamaño del archivo.");
+ return EMUFS_NOT_FOUND;
+ }
/* abre archivo */
strcpy(name_f,efs->nombre);
memcpy(dst, reg, reg_size);
}
-long emufs_tipo1_get_file_size(EMUFS* efs, int* err)
-{
- long file_size;
- FILE* file;
- char name_f[255];
-
- strcpy(name_f, efs->nombre);
- strcat(name_f, ".dat");
- if ((file = fopen(name_f, "ab")) == NULL) {
- PERR("Error al abrir archivo");
- *err = EMUFS_ERROR_CANT_OPEN_FILE;
- return 0;
- }
- file_size = ftell(file);
- fclose(file);
- return file_size;
-}
-
void emufs_tipo1_leer_bloque_raw(EMUFS *efs, EMUFS_BLOCK_ID id, char **actual, char **anterior, char **siguiente, EMUFS_BLOCK_SIZE *size1, EMUFS_BLOCK_SIZE *size2, EMUFS_BLOCK_SIZE *size3)
{
int err = 0;
#include "fsc.h"
#include "did.h"
#include "error.h"
+#include "common.h"
#include <unistd.h>
-#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include "tipo3.h"
#include "error.h"
+#include "common.h"
#include <unistd.h>
-#include <sys/types.h>
#include <stdio.h>
#include <string.h>