]> git.llucax.com Git - z.facultad/75.06/jacu.git/blobdiff - src/jacu.c
Hack feo para que no se cuelgue en el fopen de fsize() con archivos multivolumen...
[z.facultad/75.06/jacu.git] / src / jacu.c
index ce801b4dd88c23296d3d21d774382e043d7f4fd7..b435e7b50789b295d9b2a2ebf7eed88e7caa31f1 100644 (file)
@@ -10,7 +10,7 @@
 #include <stdio.h>
 #include <unistd.h>
 
-long get_file_size(const char* filename);
+long fsize(const char* filename);
 
 typedef struct _flags_ {
        int cflag;
@@ -22,7 +22,7 @@ typedef struct _flags_ {
        int mflag;
 } t_Flags;
 
-int comprimir(char *src, char *dst, Uint32 pagesize, Uint32 volumensize, t_Flags *flags, char *staticmodel);
+int comprimir(char *src, char *dst, Uint32 pagesize, Uint32 volumesize, t_Flags *flags, char *staticmodel);
 int descomprimir(char *src, char *dst);
 
 int main(int argc, char* argv[])
@@ -114,12 +114,14 @@ int main(int argc, char* argv[])
        return 0;
 }
 
-long get_file_size(const char* filename)
+long fsize(const char* filename)
 {
        FILE* file;
        long  file_size;
 
+       //printf("%s!!!\n", filename);
        if (!(file = fopen(filename, "ab"))) return -1;
+       //printf("Abrio!\n");
        file_size = ftell(file);
        fclose(file);
        return file_size;
@@ -161,13 +163,9 @@ int comprimir(char *src, char *dst, Uint32 pagesize, Uint32 volumesize, t_Flags
        total = 0;
        while (!feof(fp)) {
                i = 0;
-               while ((!feof(fp)) && (i < pagesize)) {
-                       data[i++] = fgetc(fp);
-                       total++;
-               }
+               i = bs_readblock(fp, data, pagesize);
+               total += i;
 
-               /* Saco un EOF que lee de mas */
-               if (i<pagesize) i--;
 
                /* Aplico BS guardando su resultado + el K en salida */
                bs_solve(data, salida, bs, &k, i);
@@ -203,7 +201,7 @@ int comprimir(char *src, char *dst, Uint32 pagesize, Uint32 volumesize, t_Flags
        }
 
        /* Limpiando */
-       fclose(fp);             
+       if (fclose(fp)) fprintf(stderr, "Error al cerrar archivo de entrada!\n");
        bs_destroy(bs);
 
        /* Comprimo con Huffman */              
@@ -214,7 +212,9 @@ int comprimir(char *src, char *dst, Uint32 pagesize, Uint32 volumesize, t_Flags
        free(shuff);
 
        /* Muestro bpb */
-       printf("%s: %.04f bits/byte.\n", dst, get_file_size(dst)*8.0f/get_file_size(src));
+       //printf("%s: %ld bytes.\n", src, fsize(src));
+       //printf("%s: %ld bytes.\n", dst, vfsize(dst));
+       printf("%s: %.04f bits/byte.\n", dst, 1.0/fsize(src)*vfsize(dst)*8.0f);
        return 0;
 }
 
@@ -313,3 +313,4 @@ int descomprimir(char *src, char *dst)
        free(shuff);
        return 0;
 }
+