diff options
Diffstat (limited to 'Build/source/libs/zziplib/zziplib-0.13.58/zzip/dir.c')
-rw-r--r-- | Build/source/libs/zziplib/zziplib-0.13.58/zzip/dir.c | 182 |
1 files changed, 101 insertions, 81 deletions
diff --git a/Build/source/libs/zziplib/zziplib-0.13.58/zzip/dir.c b/Build/source/libs/zziplib/zziplib-0.13.58/zzip/dir.c index a84a130486a..a5105fa78e9 100644 --- a/Build/source/libs/zziplib/zziplib-0.13.58/zzip/dir.c +++ b/Build/source/libs/zziplib/zziplib-0.13.58/zzip/dir.c @@ -1,3 +1,4 @@ + /* * Author: * Guido Draheim <guidod@gmx.de> @@ -10,9 +11,9 @@ * of the Mozilla Public License 1.1 */ -#include <zzip/lib.h> /* exported... */ +#include <zzip/lib.h> /* exported... */ #include <zzip/file.h> -#include <stddef.h> /*offsetof*/ +#include <stddef.h> /*offsetof */ #include <stdlib.h> #include <string.h> #include <errno.h> @@ -31,11 +32,12 @@ #endif #ifdef ZZIP_HAVE_SYS_STAT_H + /* MSVC does have IFbitmask but not the corresponding IStests */ -# if !defined S_ISDIR && defined S_IFDIR +# if ! defined S_ISDIR && defined S_IFDIR # define S_ISDIR(_X_) ((_X_) & S_IFDIR) # endif -# if !defined S_ISREG && defined S_IFREG +# if ! defined S_ISREG && defined S_IFREG # define S_ISREG(_X_) ((_X_) & S_IFREG) # endif #endif @@ -46,12 +48,13 @@ * => zzip_opendir has a flag saying realdir or zipfile. As for a zipfile, * the filenames will include the filesubpath, so take care. */ -void +void zzip_rewinddir(ZZIP_DIR * dir) { - if (! dir) return; + if (! dir) + return; - if (USE_DIRENT && dir->realdir) + if (USE_DIRENT && dir->realdir) { _zzip_rewinddir(dir->realdir); return; @@ -67,12 +70,14 @@ zzip_rewinddir(ZZIP_DIR * dir) #define real_readdir(_X_) 1 #else static int -real_readdir(ZZIP_DIR* dir) +real_readdir(ZZIP_DIR * dir) { struct stat st = { 0 }; char filename[PATH_MAX]; - struct dirent* dirent = _zzip_readdir(dir->realdir); - if (! dirent) return 0; + struct dirent *dirent = _zzip_readdir(dir->realdir); + + if (! dirent) + return 0; dir->dirent.d_name = dirent->d_name; strcpy(filename, dir->realname); @@ -89,16 +94,16 @@ real_readdir(ZZIP_DIR* dir) if (! S_ISREG(st.st_mode)) { dir->dirent.d_compr = st.st_mode; - dir->dirent.d_compr |= 0x80000000; - /* makes it effectively negative, - * but can still be fed to S_ISXXX(x) */ - }else + dir->dirent.d_compr |= 0x80000000; + /* makes it effectively negative, + * but can still be fed to S_ISXXX(x) */ + } else { - dir->dirent.d_compr = 0; /* stored */ + dir->dirent.d_compr = 0; /* stored */ } - }else + } else { - dir->dirent.d_compr = 0; /* stored */ + dir->dirent.d_compr = 0; /* stored */ } return 1; @@ -114,28 +119,32 @@ real_readdir(ZZIP_DIR* dir) * a ZZIP_DIRENT are d_name (the file name), d_compr (compression), d_csize * (compressed size), st_size (uncompressed size). */ -ZZIP_DIRENT* +ZZIP_DIRENT * zzip_readdir(ZZIP_DIR * dir) { - if (! dir) { errno=EBADF; return 0; } + if (! dir) + { errno=EBADF; return 0; } if (USE_DIRENT && dir->realdir) { if (! real_readdir(dir)) return 0; - }else + } else { - if (! dir->hdr) return 0; + if (! dir->hdr) + return 0; - dir->dirent.d_name = dir->hdr->d_name; + dir->dirent.d_name = dir->hdr->d_name; dir->dirent.d_compr = dir->hdr->d_compr; dir->dirent.d_csize = dir->hdr->d_csize; dir->dirent.st_size = dir->hdr->d_usize; - if (! dir->hdr->d_reclen) dir->hdr = 0; - else dir->hdr = (struct zzip_dir_hdr *) - ((char *)dir->hdr + dir->hdr->d_reclen); + if (! dir->hdr->d_reclen) + dir->hdr = 0; + else + dir->hdr = (struct zzip_dir_hdr *) + ((char *) dir->hdr + dir->hdr->d_reclen); } return &dir->dirent; } @@ -143,17 +152,18 @@ zzip_readdir(ZZIP_DIR * dir) /** => zzip_rewinddir * This function is the equivalent of => telldir(2) for a realdir or zipfile. */ -zzip_off_t -zzip_telldir(ZZIP_DIR* dir) +zzip_off_t +zzip_telldir(ZZIP_DIR * dir) { - if (! dir) { errno=EBADF; return -1; } + if (! dir) + { errno=EBADF; return -1; } if (USE_DIRENT && dir->realdir) { return _zzip_telldir(dir->realdir); - }else + } else { - return ((zzip_off_t) ((char*) dir->hdr - (char*) dir->hdr0)); + return ((zzip_off_t) ((char *) dir->hdr - (char *) dir->hdr0)); } } @@ -161,40 +171,45 @@ zzip_telldir(ZZIP_DIR* dir) * This function is the equivalent of => seekdir(2) for a realdir or zipfile. */ void -zzip_seekdir(ZZIP_DIR* dir, zzip_off_t offset) +zzip_seekdir(ZZIP_DIR * dir, zzip_off_t offset) { - if (! dir) return; - + if (! dir) + return; + if (USE_DIRENT && dir->realdir) { _zzip_seekdir(dir->realdir, offset); - }else + } else { - dir->hdr = (struct zzip_dir_hdr*) - (dir->hdr0 ? (char*) dir->hdr0 + (size_t) offset : 0); + dir->hdr = (struct zzip_dir_hdr *) + (dir->hdr0 ? (char *) dir->hdr0 + (size_t) offset : 0); } } #if defined ZZIP_LARGEFILE_RENAME && defined EOVERFLOW && defined PIC -#undef zzip_seekdir /* zzip_seekdir64 */ -#undef zzip_telldir /* zzip_telldir64 */ +#undef zzip_seekdir /* zzip_seekdir64 */ +#undef zzip_telldir /* zzip_telldir64 */ -long zzip_telldir(ZZIP_DIR* dir); -void zzip_seekdir(ZZIP_DIR* dir, long offset); +long zzip_telldir(ZZIP_DIR * dir); +void zzip_seekdir(ZZIP_DIR * dir, long offset); /* DLL compatibility layer - so that 32bit code can link with this lib too */ -long zzip_telldir(ZZIP_DIR* dir) -{ - off_t off = zzip_telldir64 (dir); +long +zzip_telldir(ZZIP_DIR * dir) +{ + off_t off = zzip_telldir64(dir); long offs = off; - if (offs != off) { errno = EOVERFLOW; return -1; } + + if (offs != off) + { errno = EOVERFLOW; return -1; } return offs; } -void zzip_seekdir(ZZIP_DIR* dir, long offset) -{ - zzip_seekdir64 (dir, offset); +void +zzip_seekdir(ZZIP_DIR * dir, long offset) +{ + zzip_seekdir64(dir, offset); } #endif @@ -208,58 +223,62 @@ void zzip_seekdir(ZZIP_DIR* dir, long offset) * * the error-code is mapped to => errno(3). */ -ZZIP_DIR* -zzip_opendir(zzip_char_t* filename) +ZZIP_DIR * +zzip_opendir(zzip_char_t * filename) { - return zzip_opendir_ext_io (filename, 0, 0, 0); + return zzip_opendir_ext_io(filename, 0, 0, 0); } /** => zzip_opendir * This function uses explicit ext and io instead of the internal * defaults, setting them to zero is equivalent to => zzip_opendir */ -ZZIP_DIR* -zzip_opendir_ext_io(zzip_char_t* filename, int o_modes, - zzip_strings_t* ext, zzip_plugin_io_t io) +ZZIP_DIR * +zzip_opendir_ext_io(zzip_char_t * filename, int o_modes, + zzip_strings_t * ext, zzip_plugin_io_t io) { zzip_error_t e; - ZZIP_DIR* dir; + ZZIP_DIR *dir; # ifdef ZZIP_HAVE_SYS_STAT_H struct stat st; # endif - if (o_modes & (ZZIP_PREFERZIP|ZZIP_ONLYZIP)) goto try_zzip; - try_real: + if (o_modes & (ZZIP_PREFERZIP | ZZIP_ONLYZIP)) + goto try_zzip; + try_real: # ifdef ZZIP_HAVE_SYS_STAT_H - if (stat(filename, &st) >= 0 && S_ISDIR(st.st_mode) - ){ - if (USE_DIRENT) - { - _zzip_DIR* realdir = _zzip_opendir(filename); - if (realdir) - { - if (! (dir = (ZZIP_DIR *)calloc(1, sizeof (*dir)))) - { - _zzip_closedir(realdir); - return 0; - }else - { - dir->realdir = realdir; - dir->realname = strdup(filename); - return dir; - } - } + if (stat(filename, &st) >= 0 && S_ISDIR(st.st_mode)) + { + if (USE_DIRENT) + { + _zzip_DIR *realdir = _zzip_opendir(filename); + + if (realdir) + { + if (! (dir = (ZZIP_DIR *) calloc(1, sizeof(*dir)))) + { + _zzip_closedir(realdir); + return 0; + } else + { + dir->realdir = realdir; + dir->realname = strdup(filename); + return dir; + } + } } return 0; } # endif /* HAVE_SYS_STAT_H */ - try_zzip: - dir = zzip_dir_open_ext_io (filename, &e, ext, io); - if (! dir && (o_modes & ZZIP_PREFERZIP)) goto try_real; - if (e) errno = zzip_errno(e); + try_zzip: + dir = zzip_dir_open_ext_io(filename, &e, ext, io); + if (! dir && (o_modes & ZZIP_PREFERZIP)) + goto try_real; + if (e) + errno = zzip_errno(e); return dir; } @@ -272,9 +291,10 @@ zzip_opendir_ext_io(zzip_char_t* filename, int o_modes, * to => zzip_dir_close which will free the ZZIP_DIR structure. */ int -zzip_closedir(ZZIP_DIR* dir) +zzip_closedir(ZZIP_DIR * dir) { - if (! dir) { errno = EBADF; return -1; } + if (! dir) + { errno = EBADF; return -1; } if (USE_DIRENT && dir->realdir) { @@ -282,7 +302,7 @@ zzip_closedir(ZZIP_DIR* dir) free(dir->realname); free(dir); return 0; - }else + } else { zzip_dir_close(dir); return 0; |