2009-09-16 08:41:12 +02:00

86 lines
2.8 KiB
C

/*
archive.h - g(un)zip and unzip support
Copyright (c) 2001 - 2003 dbjh
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef MISC_ARCHIVE_H
#define MISC_ARCHIVE_H
#ifdef HAVE_CONFIG_H
#include "config.h" // USE_ZLIB
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifdef USE_ZLIB
// make sure ZLIB support is enabled everywhere
//#warning USE_ZLIB is defined
#include <stdio.h>
#include <zlib.h>
#include "unzip.h"
extern FILE *fopen2 (const char *filename, const char *mode);
extern int fclose2 (FILE *file);
extern int fseek2 (FILE *file, long offset, int mode);
extern size_t fread2 (void *buffer, size_t size, size_t number, FILE *file);
extern int fgetc2 (FILE *file);
extern char *fgets2 (char *buffer, int maxlength, FILE *file);
extern int feof2 (FILE *file);
extern size_t fwrite2 (const void *buffer, size_t size, size_t number, FILE *file);
extern int fputc2 (int character, FILE *file);
extern long ftell2 (FILE *file);
extern void rewind2 (FILE *file);
extern FILE *popen2 (const char *command, const char *mode);
extern int pclose2 (FILE *stream);
extern int fsizeof2 (const char *filename);
#undef feof // necessary on (at least) Cygwin
#define fopen(FILE, MODE) fopen2(FILE, MODE)
#define fclose(FILE) fclose2(FILE)
#define fseek(FILE, OFFSET, MODE) fseek2(FILE, OFFSET, MODE)
#define fread(BUF, SIZE, NUM, FILE) fread2(BUF, SIZE, NUM, FILE)
#define fgetc(FILE) fgetc2(FILE)
#define fgets(BUF, MAXLEN, FILE) fgets2(BUF, MAXLEN, FILE)
#define feof(FILE) feof2(FILE)
#define fwrite(BUF, SIZE, NUM, FILE) fwrite2(BUF, SIZE, NUM, FILE)
#define fputc(CHAR, FILE) fputc2(CHAR, FILE)
#define ftell(FILE) ftell2(FILE)
#define rewind(FILE) rewind2(FILE)
#undef popen
#define popen(COMMAND, MODE) popen2(COMMAND, MODE)
#undef pclose
#define pclose(FILE) pclose2(FILE)
#define fsizeof(FILENAME) fsizeof2(FILENAME)
// Returns the number of files in the "central dir of this disk" or -1 if
// filename is not a ZIP file or an error occured.
extern int unzip_get_number_entries (const char *filename);
extern int unzip_goto_file (unzFile file, int file_index);
extern int unzip_current_file_nr;
#endif // USE_ZLIB
#ifdef __cplusplus
}
#endif
#endif // MISC_ARCHIVE_H