]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
Se agrega una bolsa de funciones (common) con emufs_common_get_file_size().
authorLeandro Lucarella <llucax@gmail.com>
Sun, 18 Apr 2004 16:52:01 +0000 (16:52 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Sun, 18 Apr 2004 16:52:01 +0000 (16:52 +0000)
emufs/Makefile
emufs/common.c [new file with mode: 0644]
emufs/common.h [new file with mode: 0644]
emufs/did.c
emufs/emufs.c
emufs/emufs.h
emufs/fsc.c
emufs/idx.c
emufs/tipo1.c
emufs/tipo2.c
emufs/tipo3.c

index 7f9be14c8e52ccb8418d6d9e68798288b6b0969f..a92896fdc51b121dcfe13fbd7dca058a47e825f1 100644 (file)
@@ -1,7 +1,7 @@
 CFLAGS=-Wall -g -ansi -pedantic -DDEBUG 
 LDFLAGS=-lm
 
 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
 
 
 all: libemufs.a tipo1_main tipo2_main tipo3_main
 
diff --git a/emufs/common.c b/emufs/common.c
new file mode 100644 (file)
index 0000000..f2dfc93
--- /dev/null
@@ -0,0 +1,58 @@
+/* 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;
+}
+
diff --git a/emufs/common.h b/emufs/common.h
new file mode 100644 (file)
index 0000000..4711ec5
--- /dev/null
@@ -0,0 +1,44 @@
+/* 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);
+
index 556f07b5dfea80c7b816bba8e245741502c5e878..3470585a6dcbcad41f0721ce9467f04db25069dd 100644 (file)
@@ -38,8 +38,8 @@
 
 #include "did.h"
 #include "error.h"
 
 #include "did.h"
 #include "error.h"
+#include "common.h"
 #include <unistd.h>
 #include <unistd.h>
-#include <sys/types.h>
 #include <string.h>
 
 int emufs_did_crear(EMUFS* efs)
 #include <string.h>
 
 int emufs_did_crear(EMUFS* efs)
index 35c9cb3349c57a4f0c69aacf11ea4e44a21ce4b6..9000fd652ec09c28f42680f9ebd377bf5adeda61 100644 (file)
@@ -39,6 +39,7 @@
  */
 
 #include "emufs.h"
  */
 
 #include "emufs.h"
+#include "common.h"
 #include "tipo1.h"
 #include "tipo2.h"
 #include "tipo3.h"
 #include "tipo1.h"
 #include "tipo2.h"
 #include "tipo3.h"
index 04b72f2ea7149f37c831ffc52b7a62e81550d151..db369634523d5c309cd37bccee42eb573d38520e 100644 (file)
 #include <stdio.h>
 #include <limits.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. */
 /** Tipo de archivo. */
 typedef enum {
        T1, /**< Archivo de bloque parametrizado y registro variable. */
index 75202826c0a11debd6a27a30063750bd3bd8724b..2d2932b332a3595546c8fbd70381731e0281b242 100644 (file)
@@ -37,8 +37,8 @@
 
 #include "fsc.h"
 #include "error.h"
 
 #include "fsc.h"
 #include "error.h"
+#include "common.h"
 #include <unistd.h>
 #include <unistd.h>
-#include <sys/types.h>
 #include <string.h>
 
 /* Crea un archivo de Gaps o Espacio Libre en Bloque */
 #include <string.h>
 
 /* Crea un archivo de Gaps o Espacio Libre en Bloque */
index bd20b63070233247ae9b77d76d28986d87a6a93b..fcaa7fcf4f64508254aba12aa287c02d1fa7ac5f 100644 (file)
@@ -38,6 +38,7 @@
 #include "idx.h"
 #include "did.h"
 #include "error.h"
 #include "idx.h"
 #include "did.h"
 #include "error.h"
+#include "common.h"
 #include <stdlib.h>
 #include <strings.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <strings.h>
 #include <unistd.h>
index fbebc53fdcedcdca12bb19aa44a3526dae78d3da..f672c1961c0dacc10dd675e5d9c99e35553a0275 100644 (file)
@@ -39,9 +39,9 @@
 #include "idx.h"
 #include "fsc.h"
 #include "did.h"
 #include "idx.h"
 #include "fsc.h"
 #include "did.h"
+#include "common.h"
 #include "error.h"
 #include <unistd.h>
 #include "error.h"
 #include <unistd.h>
-#include <sys/types.h>
 #include <stdio.h>
 #include <math.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <math.h>
 #include <stdlib.h>
@@ -75,9 +75,6 @@ static void* emufs_tipo1_leer_bloque(EMUFS*, EMUFS_BLOCK_ID, int*);
 static EMUFS_BLOCK_ID emufs_tipo1_grabar_bloque_fsc(EMUFS*, void*,
                EMUFS_BLOCK_ID, EMUFS_FREE, int*);
 
 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)
 /*------------------ Funciones públicas ----------------------*/
 
 int emufs_tipo1_inicializar(EMUFS* efs)
@@ -484,10 +481,15 @@ EMUFS_Estadisticas emufs_tipo1_leer_estadisticas(EMUFS* efs)
        EMUFS_Estadisticas stats;
        memset(&stats, 0, sizeof(EMUFS_Estadisticas));
 
        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 */
        }
 
        /* obtengo cantidad de bloques */
@@ -585,10 +587,20 @@ EMUFS_BLOCK_ID emufs_tipo1_grabar_bloque_fsc(EMUFS *efs, void *block,
 {
        FILE* file;
        char name_f[255];
 {
        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 */
        /* 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;
                / efs->tam_bloque;
+       if (*err) {
+               PERR("Error al obtener tamaño del archivo.");
+               return EMUFS_NOT_FOUND;
+       }
 
        /* abre archivo */
        strcpy(name_f,efs->nombre);
 
        /* abre archivo */
        strcpy(name_f,efs->nombre);
@@ -695,24 +707,6 @@ void emufs_tipo1_escribir_reg_chunk_en_memoria(char* dst,
        memcpy(dst, reg, reg_size);
 }
 
        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;
 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;
index 0d3261ce9ccba6ecea80d4730fb1883a74fe6efb..40ff8d2b2403a66c4a0c61f630806319e986ecb7 100644 (file)
@@ -42,8 +42,8 @@
 #include "fsc.h"
 #include "did.h"
 #include "error.h"
 #include "fsc.h"
 #include "did.h"
 #include "error.h"
+#include "common.h"
 #include <unistd.h>
 #include <unistd.h>
-#include <sys/types.h>
 #include <stdio.h>
 #include <string.h>
 
 #include <stdio.h>
 #include <string.h>
 
index 946186c2543c5bb8049398a78c74e35454e6f2aa..999bb6d74b82919dabaec4c59e64791020598505 100644 (file)
@@ -37,8 +37,8 @@
 
 #include "tipo3.h"
 #include "error.h"
 
 #include "tipo3.h"
 #include "error.h"
+#include "common.h"
 #include <unistd.h>
 #include <unistd.h>
-#include <sys/types.h>
 #include <stdio.h>
 #include <string.h>
 
 #include <stdio.h>
 #include <string.h>