root/lib/zlib/contrib/minizip/ioapi.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. fopen_file_func
  2. fread_file_func
  3. fwrite_file_func
  4. ftell_file_func
  5. fseek_file_func
  6. fclose_file_func
  7. ferror_file_func
  8. fill_fopen_filefunc

   1 /* ioapi.c -- IO base function header for compress/uncompress .zip
   2    files using zlib + zip or unzip API
   3 
   4    Version 1.01e, February 12th, 2005
   5 
   6    Copyright (C) 1998-2005 Gilles Vollant
   7 */
   8 
   9 #include <stdio.h>
  10 #include <stdlib.h>
  11 #include <string.h>
  12 
  13 #include "zlib.h"
  14 #include "ioapi.h"
  15 
  16 
  17 
  18 /* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */
  19 
  20 #ifndef SEEK_CUR
  21 #define SEEK_CUR    1
  22 #endif
  23 
  24 #ifndef SEEK_END
  25 #define SEEK_END    2
  26 #endif
  27 
  28 #ifndef SEEK_SET
  29 #define SEEK_SET    0
  30 #endif
  31 
  32 voidpf ZCALLBACK fopen_file_func OF((
  33    voidpf opaque,
  34    const char* filename,
  35    int mode));
  36 
  37 uLong ZCALLBACK fread_file_func OF((
  38    voidpf opaque,
  39    voidpf stream,
  40    void* buf,
  41    uLong size));
  42 
  43 uLong ZCALLBACK fwrite_file_func OF((
  44    voidpf opaque,
  45    voidpf stream,
  46    const void* buf,
  47    uLong size));
  48 
  49 long ZCALLBACK ftell_file_func OF((
  50    voidpf opaque,
  51    voidpf stream));
  52 
  53 long ZCALLBACK fseek_file_func OF((
  54    voidpf opaque,
  55    voidpf stream,
  56    uLong offset,
  57    int origin));
  58 
  59 int ZCALLBACK fclose_file_func OF((
  60    voidpf opaque,
  61    voidpf stream));
  62 
  63 int ZCALLBACK ferror_file_func OF((
  64    voidpf opaque,
  65    voidpf stream));
  66 
  67 
  68 voidpf ZCALLBACK fopen_file_func (opaque, filename, mode)
     /* [<][>][^][v][top][bottom][index][help] */
  69    voidpf opaque;
  70    const char* filename;
  71    int mode;
  72 {
  73     FILE* file = NULL;
  74     const char* mode_fopen = NULL;
  75     if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
  76         mode_fopen = "rb";
  77     else
  78     if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
  79         mode_fopen = "r+b";
  80     else
  81     if (mode & ZLIB_FILEFUNC_MODE_CREATE)
  82         mode_fopen = "wb";
  83 
  84     if ((filename!=NULL) && (mode_fopen != NULL))
  85         file = fopen(filename, mode_fopen);
  86     return file;
  87 }
  88 
  89 
  90 uLong ZCALLBACK fread_file_func (opaque, stream, buf, size)
     /* [<][>][^][v][top][bottom][index][help] */
  91    voidpf opaque;
  92    voidpf stream;
  93    void* buf;
  94    uLong size;
  95 {
  96     uLong ret;
  97     ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);
  98     return ret;
  99 }
 100 
 101 
 102 uLong ZCALLBACK fwrite_file_func (opaque, stream, buf, size)
     /* [<][>][^][v][top][bottom][index][help] */
 103    voidpf opaque;
 104    voidpf stream;
 105    const void* buf;
 106    uLong size;
 107 {
 108     uLong ret;
 109     ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);
 110     return ret;
 111 }
 112 
 113 long ZCALLBACK ftell_file_func (opaque, stream)
     /* [<][>][^][v][top][bottom][index][help] */
 114    voidpf opaque;
 115    voidpf stream;
 116 {
 117     long ret;
 118     ret = ftell((FILE *)stream);
 119     return ret;
 120 }
 121 
 122 long ZCALLBACK fseek_file_func (opaque, stream, offset, origin)
     /* [<][>][^][v][top][bottom][index][help] */
 123    voidpf opaque;
 124    voidpf stream;
 125    uLong offset;
 126    int origin;
 127 {
 128     int fseek_origin=0;
 129     long ret;
 130     switch (origin)
 131     {
 132     case ZLIB_FILEFUNC_SEEK_CUR :
 133         fseek_origin = SEEK_CUR;
 134         break;
 135     case ZLIB_FILEFUNC_SEEK_END :
 136         fseek_origin = SEEK_END;
 137         break;
 138     case ZLIB_FILEFUNC_SEEK_SET :
 139         fseek_origin = SEEK_SET;
 140         break;
 141     default: return -1;
 142     }
 143     ret = 0;
 144     fseek((FILE *)stream, offset, fseek_origin);
 145     return ret;
 146 }
 147 
 148 int ZCALLBACK fclose_file_func (opaque, stream)
     /* [<][>][^][v][top][bottom][index][help] */
 149    voidpf opaque;
 150    voidpf stream;
 151 {
 152     int ret;
 153     ret = fclose((FILE *)stream);
 154     return ret;
 155 }
 156 
 157 int ZCALLBACK ferror_file_func (opaque, stream)
     /* [<][>][^][v][top][bottom][index][help] */
 158    voidpf opaque;
 159    voidpf stream;
 160 {
 161     int ret;
 162     ret = ferror((FILE *)stream);
 163     return ret;
 164 }
 165 
 166 void fill_fopen_filefunc (pzlib_filefunc_def)
     /* [<][>][^][v][top][bottom][index][help] */
 167   zlib_filefunc_def* pzlib_filefunc_def;
 168 {
 169     pzlib_filefunc_def->zopen_file = fopen_file_func;
 170     pzlib_filefunc_def->zread_file = fread_file_func;
 171     pzlib_filefunc_def->zwrite_file = fwrite_file_func;
 172     pzlib_filefunc_def->ztell_file = ftell_file_func;
 173     pzlib_filefunc_def->zseek_file = fseek_file_func;
 174     pzlib_filefunc_def->zclose_file = fclose_file_func;
 175     pzlib_filefunc_def->zerror_file = ferror_file_func;
 176     pzlib_filefunc_def->opaque = NULL;
 177 }

/* [<][>][^][v][top][bottom][index][help] */