ioapi.c
上传用户:maxiaolivb
上传日期:2022-06-07
资源大小:915k
文件大小:3k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. /* ioapi.c -- IO base function header for compress/uncompress .zip
  2. files using zlib + zip or unzip API
  3. Version 1.01, May 8th, 2004
  4. Copyright (C) 1998-2004 Gilles Vollant
  5.  */
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #include "zlib.h"
  10. #include "ioapi.h"
  11. void *ZCALLBACK fopen_file_func(void *opaque, const char *filename, int mode)
  12. {
  13.   FILE *file = NULL;
  14.   const char *mode_fopen = NULL;
  15.   if ((mode &ZLIB_FILEFUNC_MODE_READWRITEFILTER) == ZLIB_FILEFUNC_MODE_READ)
  16.   {
  17.     mode_fopen = "rb";
  18.   }
  19.   else
  20.   {
  21.     if (mode &ZLIB_FILEFUNC_MODE_EXISTING)
  22.     {
  23.       mode_fopen = "r+b";
  24.     }
  25.     else
  26.     {
  27.       if (mode &ZLIB_FILEFUNC_MODE_CREATE)
  28.       {
  29.         mode_fopen = "wb";
  30.       }
  31.     }
  32.   }
  33.   if ((filename != NULL) && (mode_fopen != NULL))
  34.   {
  35.     file = fopen(filename, mode_fopen);
  36.   }
  37.   return file;
  38. }
  39. //-------------------------------------------------------------------------
  40. DWORD ZCALLBACK fread_file_func(void *opaque, void *stream, void *buf, DWORD size)
  41. {
  42.   return fread(buf, 1, (size_t)size, (FILE*)stream);
  43. }
  44. //-------------------------------------------------------------------------
  45. DWORD ZCALLBACK fwrite_file_func(void *opaque, void *stream, const void *buf, DWORD size)
  46. {
  47.   return fwrite(buf, 1, (size_t)size, (FILE*)stream);
  48. }
  49. //-------------------------------------------------------------------------
  50. long ZCALLBACK ftell_file_func(void *opaque, void *stream)
  51. {
  52.   return ftell((FILE*)stream);
  53. }
  54. //-------------------------------------------------------------------------
  55. long ZCALLBACK fseek_file_func(void *opaque, void *stream, DWORD offset, int origin)
  56. {
  57.   fseek((FILE*)stream, offset, origin);
  58.   return 0;
  59. }
  60. //-------------------------------------------------------------------------
  61. int ZCALLBACK fclose_file_func(void *opaque, void *stream)
  62. {
  63.   return fclose((FILE*)stream);
  64. }
  65. //-------------------------------------------------------------------------
  66. int ZCALLBACK ferror_file_func(void *opaque, void *stream)
  67. {
  68.   return ferror((FILE*)stream);
  69. }
  70. //-------------------------------------------------------------------------
  71. void fill_fopen_filefunc(zlib_filefunc_def *pzlib_filefunc_def)
  72. {
  73.   pzlib_filefunc_def->zopen_file = fopen_file_func;
  74.   pzlib_filefunc_def->zread_file = fread_file_func;
  75.   pzlib_filefunc_def->zwrite_file = fwrite_file_func;
  76.   pzlib_filefunc_def->ztell_file = ftell_file_func;
  77.   pzlib_filefunc_def->zseek_file = fseek_file_func;
  78.   pzlib_filefunc_def->zclose_file = fclose_file_func;
  79.   pzlib_filefunc_def->zerror_file = ferror_file_func;
  80.   pzlib_filefunc_def->opaque = NULL;
  81. }