]> git.llucax.com Git - z.facultad/75.06/jacu.git/blobdiff - src/jacu.c
Controlo que exista el file, por ahora solo devuelvo -1 y la aplicacion no hace nada...
[z.facultad/75.06/jacu.git] / src / jacu.c
index bc95e0a4a5dd9ec4e94eda1cab8c745326f5e606..8b6dcd7d84b948a1e063f35b2351c4b55f44a7f4 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,7 +114,7 @@ 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;
@@ -147,7 +147,7 @@ int comprimir(char *src, char *dst, Uint32 pagesize, Uint32 volumesize, t_Flags
        bs = bs_create(pagesize);
 
        /* Abrimos el archivo a comprimir y encodeamos bloques */
-       fp = fopen(src, "rb");
+       if ((fp = fopen(src, "rb")) == NULL) return 1;
 
        /* Guardamos el pagesize como header (huffencoded) */
        shuff_scanfreq_chunk(shuff,(char*)&pagesize,sizeof(Uint32));
@@ -161,13 +161,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,8 +199,10 @@ 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);
+       free(data);
+       free(salida);
 
        /* Comprimo con Huffman */              
        shuff_encode_file(shuff);
@@ -214,7 +212,7 @@ int comprimir(char *src, char *dst, Uint32 pagesize, Uint32 volumesize, t_Flags
        free(shuff);
 
        /* Muestro bpb */
-       printf("%s: %.04f bit/byte.\n", dst, get_file_size(dst)*8.0f/get_file_size(src));
+       printf("%s: %.04f bits/byte.\n", dst, vfsize(dst)*8.0f/fsize(src));
        return 0;
 }