]> git.llucax.com Git - z.facultad/75.06/jacu.git/commitdiff
Se agrega vfsize() para obtener el tamaño de un archivo multivolumen.
authorLeandro Lucarella <llucax@gmail.com>
Sun, 27 Jun 2004 00:46:43 +0000 (00:46 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Sun, 27 Jun 2004 00:46:43 +0000 (00:46 +0000)
src/vfile/vfile.c
src/vfile/vfile.h

index 589d4aa1212bf1af2ca3fedd95c9f527561164df..469ef768240fab65c6bbc0cb02a7c4befe39d002 100644 (file)
@@ -215,3 +215,54 @@ int vfvol_open_next(VFILE* vfp)
        return 0;
 }
 
+long vfsize(const char* path)
+{
+       VFILE* vfp = vfopen(path, "r", 0);
+       long size;
+       if (!vfp) return -1; /* error */
+       if (fseek(vfp->fp, 0l, SEEK_END) == -1)
+       {
+               vfclose(vfp);
+               return -1; /* error */
+       }
+       else
+       {
+               size = ftell(vfp->fp);
+               if (size == -1)
+               {
+                       vfclose(vfp);
+                       return -1; /* error */
+               }
+       }
+       while (!vfp->lastvol) /* mientras no sea el último volumen */
+       {
+               if (vfvol_open_next(vfp))
+               {
+                       vfclose(vfp);
+                       return -1; /* error */
+               }
+               if (fseek(vfp->fp, 0l, SEEK_END) == -1)
+               {
+                       vfclose(vfp);
+                       return -1; /* error */
+               }
+               else
+               {
+                       long curr_size = ftell(vfp->fp);
+                       if (curr_size == -1)
+                       {
+                               vfclose(vfp);
+                               return -1; /* error */
+                       }
+                       size += curr_size;
+               }
+               if (vfvol_close(vfp))
+               {
+                       vfclose(vfp);
+                       return -1; /* error */
+               }
+       }
+       vfclose(vfp);
+       return size;
+}
+
index 7b036049f64a056a838fb54268840bec260255c9..ad4f0c1c5e0f298e3c82d3a3435c62e39054915f 100644 (file)
@@ -103,5 +103,8 @@ size_t vfwrite(const void *ptr, size_t size, size_t nmemb, VFILE* vfp);
 /** Indica si es el fin del archivo multivolumen. */
 int vfeof(VFILE* vfp);
 
+/** Obtiene el tamaño de un archivo virtual multivolumen. */
+long vfsize(const char* path);
+
 #endif /* _JACU_VFILE_H_ */