X-Git-Url: https://git.llucax.com/z.facultad/75.06/jacu.git/blobdiff_plain/7fe99d86e55a363a603d271e7952e4ba93246cc9..bd0062922151710408edae80d0f67db20114c6c9:/src/vfile/vfile.c diff --git a/src/vfile/vfile.c b/src/vfile/vfile.c index 589d4aa..469ef76 100644 --- a/src/vfile/vfile.c +++ b/src/vfile/vfile.c @@ -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; +} +