-#
#----------------------------------------------------------------------------
# jacu
#----------------------------------------------------------------------------
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)
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
#include <malloc.h>
#include <string.h>
-char* strdup(const char* s)
+char* str_dup(const char* s)
{
char* copy;
if (!s) return 0;
#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_ */
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;
}
free(vfp);
return 0;
}
- /* todo ok. */
- vfp->room = vfp->volsize;
- vfp->lastvol = 0;
- return vfp;
+ return vfp; /* todo ok. */
}
int vfclose(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);
}
/* 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;
}
*
*/
+#ifndef _JACU_VFILE_H_
+#define _JACU_VFILE_H_
+
#include <stdio.h>
/** \file
*/
/** 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"
/** 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_ */
+
VFILE* vf;
if (argc < 3)
{
- fprintf(stderr, "Faltan argumentos! Uso: %s <destino> <tamaño en KB)\n",
+ fprintf(stderr, "Faltan argumentos! Uso: %s <destino> <tamaño bytes>)\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;