diff options
Diffstat (limited to 'Build/source/libs/zziplib/zziplib-0.13.59/zzip/plugin.c')
-rw-r--r-- | Build/source/libs/zziplib/zziplib-0.13.59/zzip/plugin.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/Build/source/libs/zziplib/zziplib-0.13.59/zzip/plugin.c b/Build/source/libs/zziplib/zziplib-0.13.59/zzip/plugin.c new file mode 100644 index 00000000000..a7d77c060cd --- /dev/null +++ b/Build/source/libs/zziplib/zziplib-0.13.59/zzip/plugin.c @@ -0,0 +1,86 @@ + +/* + * Author: + * Guido Draheim <guidod@gmx.de> + * Mike Nordell <tamlin-@-algonet-se> + * + * Copyright (c) 2002,2003 Guido Draheim + * All rights reserved, + * use under the restrictions of the + * Lesser GNU General Public License + * or alternatively the restrictions + * of the Mozilla Public License 1.1 + */ + +#include <zzip/lib.h> +#include <zzip/plugin.h> + +#include <string.h> +#include <sys/stat.h> +#include <errno.h> +#include <stdlib.h> +#ifdef DEBUG +#include <stdio.h> +#endif + +#include <zzip/file.h> +#include <zzip/format.h> + +zzip_off_t +zzip_filesize(int fd) +{ + struct stat st; + + if (fstat(fd, &st) < 0) + return -1; + +# if defined DEBUG && ! defined _WIN32 + if (! st.st_size && st.st_blocks > 1) /* seen on some darwin 10.1 machines */ + fprintf(stderr, "broken fstat(2) ?? st_size=%ld st_blocks=%ld\n", + (long) st.st_size, (long) st.st_blocks); +# endif + + return st.st_size; +} + +static const struct zzip_plugin_io default_io = { + &open, + &close, + &_zzip_read, + &_zzip_lseek, + &zzip_filesize, + 1, 1, + &_zzip_write +}; + +/** => zzip_init_io + * This function returns a zzip_plugin_io_t handle to static defaults + * wrapping the posix io file functions for actual file access. + */ +zzip_plugin_io_t +zzip_get_default_io(void) +{ + return (zzip_plugin_io_t) & default_io; +} + +/** + * This function initializes the users handler struct to default values + * being the posix io functions in default configured environments. + */ +int +zzip_init_io(zzip_plugin_io_handlers_t io, int flags) +{ + if (! io) + { + return ZZIP_ERROR; + } + memcpy(io, &default_io, sizeof(default_io)); + io->fd.sys = flags; + return 0; +} + +/* + * Local variables: + * c-file-style: "stroustrup" + * End: + */ |