diff options
Diffstat (limited to 'Build/source/libs/zziplib/zziplib-0.13.58/zzip/stat.c')
-rw-r--r-- | Build/source/libs/zziplib/zziplib-0.13.58/zzip/stat.c | 74 |
1 files changed, 42 insertions, 32 deletions
diff --git a/Build/source/libs/zziplib/zziplib-0.13.58/zzip/stat.c b/Build/source/libs/zziplib/zziplib-0.13.58/zzip/stat.c index 95bcf0c4051..1c9428357b1 100644 --- a/Build/source/libs/zziplib/zziplib-0.13.58/zzip/stat.c +++ b/Build/source/libs/zziplib/zziplib-0.13.58/zzip/stat.c @@ -1,3 +1,4 @@ + /* * Author: * Guido Draheim <guidod@gmx.de> @@ -17,12 +18,9 @@ * of */ -#include <zzip/lib.h> /* exported...*/ +#include <zzip/lib.h> /* exported... */ #include <zzip/file.h> #include <string.h> -#ifdef ZZIP_HAVE_STRINGS_H -#include <strings.h> -#endif #include <sys/stat.h> #define ZZIP_USE_INTERNAL @@ -33,46 +31,53 @@ * opening that file first. Mostly used to obtain the uncompressed * size of a file inside a zip-archive. see => zzip_dir_open. */ -int -zzip_dir_stat(ZZIP_DIR * dir, zzip_char_t* name, ZZIP_STAT * zs, int flags) +int +zzip_dir_stat(ZZIP_DIR * dir, zzip_char_t * name, ZZIP_STAT * zs, int flags) { - struct zzip_dir_hdr * hdr = dir->hdr0; - int (*cmp)(zzip_char_t*, zzip_char_t*); + struct zzip_dir_hdr *hdr = dir->hdr0; + int (*cmp) (zzip_char_t *, zzip_char_t *); cmp = (flags & ZZIP_CASEINSENSITIVE) ? strcasecmp : strcmp; + if (! hdr) + { + dir->errcode = ZZIP_ENOENT; + return -1; + } + if (flags & ZZIP_IGNOREPATH) { - char* n = strrchr(name, '/'); - if (n) name = n + 1; + char *n = strrchr(name, '/'); + if (n) + name = n + 1; } - if (hdr) while (1) { - register char* hdr_name = hdr->d_name; + register char *hdr_name = hdr->d_name; if (flags & ZZIP_IGNOREPATH) { - register char* n = strrchr(hdr_name, '/'); - if (n) hdr_name = n + 1; + register char *n = strrchr(hdr_name, '/'); + if (n) + hdr_name = n + 1; } - if (! cmp(hdr_name, name)) + if (! cmp(hdr_name, name)) break; - if (! hdr->d_reclen) - { + if (! hdr->d_reclen) + { dir->errcode = ZZIP_ENOENT; return -1; - } + } - hdr = (struct zzip_dir_hdr *) ((char *)hdr + hdr->d_reclen); + hdr = (struct zzip_dir_hdr *) ((char *) hdr + hdr->d_reclen); } zs->d_compr = hdr->d_compr; zs->d_csize = hdr->d_csize; zs->st_size = hdr->d_usize; - zs->d_name = hdr->d_name; + zs->d_name = hdr->d_name; return 0; } @@ -83,13 +88,15 @@ zzip_dir_stat(ZZIP_DIR * dir, zzip_char_t* name, ZZIP_STAT * zs, int flags) * The st_size stat-member contains the uncompressed size. The optional * d_name is never set here. */ -int zzip_file_stat (ZZIP_FILE* file, ZZIP_STAT* zs) +int +zzip_file_stat(ZZIP_FILE * file, ZZIP_STAT * zs) { - if (! file) return -1; + if (! file) + return -1; zs->d_compr = file->method; zs->d_csize = file->csize; zs->st_size = file->usize; - zs->d_name = 0; + zs->d_name = 0; return 0; } @@ -100,18 +107,21 @@ int zzip_file_stat (ZZIP_FILE* file, ZZIP_STAT* zs) * The optional d_name is never set here. For a real file, we do set the * d_csize := st_size and d_compr := 0 for meaningful defaults. */ -int zzip_fstat (ZZIP_FILE* file, ZZIP_STAT* zs) +int +zzip_fstat(ZZIP_FILE * file, ZZIP_STAT * zs) { if (ZZIP_file_real(file)) { - struct stat st; - if (fstat (file->fd, &st) < 0) return -1; - zs->st_size = st.st_size; - zs->d_csize = st.st_size; - zs->d_compr = 0; - return 0; - }else{ - return zzip_file_stat (file, zs); + struct stat st; + if (fstat(file->fd, &st) < 0) + return -1; + zs->st_size = st.st_size; + zs->d_csize = st.st_size; + zs->d_compr = 0; + return 0; + } else + { + return zzip_file_stat(file, zs); } } |