From 6ceb9e978d795143bdf7679855a932540eef18b2 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Thu, 17 Jun 2004 23:47:31 +0000 Subject: [PATCH 1/1] Parece andar todo bien. --- src/vfile/Makefile | 40 ++++++++++++++++++++++++++++++++++++---- src/vfile/common.c | 2 +- src/vfile/common.h | 8 ++++---- src/vfile/vfile.c | 18 ++++++++++-------- src/vfile/vfile.h | 7 ++++++- src/vfile/vol.c | 4 ++-- 6 files changed, 59 insertions(+), 20 deletions(-) diff --git a/src/vfile/Makefile b/src/vfile/Makefile index d080686..e56db46 100644 --- a/src/vfile/Makefile +++ b/src/vfile/Makefile @@ -1,4 +1,3 @@ -# #---------------------------------------------------------------------------- # jacu #---------------------------------------------------------------------------- @@ -27,8 +26,10 @@ TARGETS=vol unvol COMMON=common.o vfile.o +SRCS = common.c vfile.c vol.c unvol.c -CFLAGS=-ggdb -Wall -DDEBUG +CFLAGS=-O3 -Wall -DNDEBUG +#CFLAGS=-ggdb -Wall -DDEBUG all: $(TARGETS) @@ -36,9 +37,40 @@ vol: $(COMMON) vol.o unvol: $(COMMON) unvol.o -clean: +depend: + makedepend -- $(CFLAGS) -- $(SRCS) +clean: @$(RM) -f *.o $(TARGETS) -.PHONY: all clean +.PHONY: all clean depend + +# DO NOT DELETE +common.o: common.h /usr/include/malloc.h /usr/include/string.h +common.o: /usr/include/features.h /usr/include/sys/cdefs.h +common.o: /usr/include/gnu/stubs.h +vfile.o: common.h vfile.h /usr/include/stdio.h /usr/include/features.h +vfile.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h +vfile.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h +vfile.o: /usr/include/bits/typesizes.h /usr/include/libio.h +vfile.o: /usr/include/_G_config.h /usr/include/wchar.h +vfile.o: /usr/include/bits/wchar.h /usr/include/gconv.h +vfile.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +vfile.o: /usr/include/malloc.h /usr/include/string.h +vol.o: vfile.h /usr/include/stdio.h /usr/include/features.h +vol.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h +vol.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h +vol.o: /usr/include/bits/typesizes.h /usr/include/libio.h +vol.o: /usr/include/_G_config.h /usr/include/wchar.h +vol.o: /usr/include/bits/wchar.h /usr/include/gconv.h +vol.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +vol.o: /usr/include/malloc.h /usr/include/string.h /usr/include/stdlib.h +unvol.o: vfile.h /usr/include/stdio.h /usr/include/features.h +unvol.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h +unvol.o: /usr/include/bits/types.h /usr/include/bits/wordsize.h +unvol.o: /usr/include/bits/typesizes.h /usr/include/libio.h +unvol.o: /usr/include/_G_config.h /usr/include/wchar.h +unvol.o: /usr/include/bits/wchar.h /usr/include/gconv.h +unvol.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +unvol.o: /usr/include/malloc.h /usr/include/string.h diff --git a/src/vfile/common.c b/src/vfile/common.c index ed2933d..6695fe9 100644 --- a/src/vfile/common.c +++ b/src/vfile/common.c @@ -36,7 +36,7 @@ #include #include -char* strdup(const char* s) +char* str_dup(const char* s) { char* copy; if (!s) return 0; diff --git a/src/vfile/common.h b/src/vfile/common.h index a2c53d5..2431b1c 100644 --- a/src/vfile/common.h +++ b/src/vfile/common.h @@ -36,14 +36,14 @@ #define _JACU_COMMON_H_ #ifdef DEBUG - /** Imprime un mensaje de debug por pantalla. */ - #define PERR(msg) fprintf(stderr, "%s:%d> %s.\n",__FILE__, __LINE__, msg); +/** Imprime un mensaje de debug por pantalla. */ +# define PERR(msg) fprintf(stderr, "%s:%d> %s.\n",__FILE__, __LINE__, msg); #else - #define PERR(msg) ; +# define PERR(msg) ; #endif /* DEBUG */ /** Duplica un string. */ -char* strdup(const char* s); +char* str_dup(const char* s); #endif /* _JACU_COMMON_H_ */ diff --git a/src/vfile/vfile.c b/src/vfile/vfile.c index c8bde5d..1ca5607 100644 --- a/src/vfile/vfile.c +++ b/src/vfile/vfile.c @@ -69,9 +69,9 @@ VFILE* vfopen(const char* path, const char* mode, long volsize) free(vfp); return 0; } - if (!(vfp->name = strdup(path))) /* no hay más memoria */ + if (!(vfp->name = str_dup(path))) /* no hay más memoria */ { - PERR("vfopen: no se pudo hacer strdup!"); + PERR("vfopen: no se pudo hacer str_dup!"); free(vfp); return 0; } @@ -84,10 +84,7 @@ VFILE* vfopen(const char* path, const char* mode, long volsize) free(vfp); return 0; } - /* todo ok. */ - vfp->room = vfp->volsize; - vfp->lastvol = 0; - return vfp; + return vfp; /* todo ok. */ } int vfclose(VFILE* vfp) @@ -119,10 +116,11 @@ int vfputc(int c, VFILE* vfp) { /* Si no es multivolumen o hay lugar, agrego y salgo. */ if (!vfp->volsize || vfp->room--) return fputc(c, vfp->fp); + PERR("vfputc: Necesito otro volumen!\n"); /* Si no hay lugar, abro otro volumen. */ if (vfvol_close(vfp)) return EOF; /* error al cerrar. */ if (vfvol_open_next(vfp)) return EOF; /* error al abrir. */ - vfp->room = vfp->volsize; + vfp->room--; /* resto de nuevo el espacio porque al abrirlo lo resetea. */ return fputc(c, vfp->fp); } @@ -178,7 +176,11 @@ int vfvol_open_next(VFILE* vfp) /* Si es para lectura, me fijo si es el últio a leer. */ if (vfp->mode == VFREAD) vfp->lastvol = fgetc(vfp->fp); /* Si es para escritura, guardo header dummy (supongo que es el último). */ - if (vfp->mode == VFWRITE) return !fputc(1, vfp->fp); + if (vfp->mode == VFWRITE) + { + vfp->room = vfp->volsize; + return !fputc(1, vfp->fp); + } return 0; } diff --git a/src/vfile/vfile.h b/src/vfile/vfile.h index 17f1c4b..e09ec23 100644 --- a/src/vfile/vfile.h +++ b/src/vfile/vfile.h @@ -26,6 +26,9 @@ * */ +#ifndef _JACU_VFILE_H_ +#define _JACU_VFILE_H_ + #include /** \file @@ -39,7 +42,7 @@ */ /** Mínimo tamaño de un volumen. */ -#define VFMINVOLSIZE 512 +#define VFMINVOLSIZE 4 /** Esquema del nombre a utilizar en los volumenes. */ #define VFNAMETEMPLATE "%s-%d" @@ -97,3 +100,5 @@ size_t vfread(void* ptr, size_t size, size_t nmemb, VFILE* vfp); /** Escribe un conjunto de bytes en un archivo virtual multivolumen. */ size_t vfwrite(const void *ptr, size_t size, size_t nmemb, VFILE* vfp); +#endif /* _JACU_VFILE_H_ */ + diff --git a/src/vfile/vol.c b/src/vfile/vol.c index f86ba2b..b66b272 100644 --- a/src/vfile/vol.c +++ b/src/vfile/vol.c @@ -44,13 +44,13 @@ int main(int argc, char* argv[]) VFILE* vf; if (argc < 3) { - fprintf(stderr, "Faltan argumentos! Uso: %s )\n", argv[0]); fprintf(stderr, "La entrada de datos a guardar en volumenes se " "obtiene de la entrada estándar.\n"); return 1; } - if (!(vf = vfopen(argv[1], "w", atoi(argv[2]) * (1 << 10) /* en KB */))) + if (!(vf = vfopen(argv[1], "w", atoi(argv[2]) /* * (1 << 10) en KB */))) { fprintf(stderr, "No se pudo abrir el archivo virtual '%s'!\n", argv[1]); return 2; -- 2.43.0