source: rtems/cpukit/zlib/contrib/minizip/ioapi.c @ 959f7df2

4.104.114.84.95
Last change on this file since 959f7df2 was 959f7df2, checked in by Ralf Corsepius <ralf.corsepius@…>, on 10/28/05 at 07:22:42

Import of zlib-1.2.2.2.tar.gz

  • Property mode set to 100644
File size: 3.6 KB
Line 
1/* ioapi.c -- IO base function header for compress/uncompress .zip
2   files using zlib + zip or unzip API
3
4   Version 1.01, May 8th, 2004
5
6   Copyright (C) 1998-2004 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
32voidpf ZCALLBACK fopen_file_func OF((
33   voidpf opaque,
34   const char* filename,
35   int mode));
36
37uLong ZCALLBACK fread_file_func OF((
38   voidpf opaque,
39   voidpf stream,
40   void* buf,
41   uLong size));
42
43uLong ZCALLBACK fwrite_file_func OF((
44   voidpf opaque,
45   voidpf stream,
46   const void* buf,
47   uLong size));
48
49long ZCALLBACK ftell_file_func OF((
50   voidpf opaque,
51   voidpf stream));
52
53long ZCALLBACK fseek_file_func OF((
54   voidpf opaque,
55   voidpf stream,
56   uLong offset,
57   int origin));
58
59int ZCALLBACK fclose_file_func OF((
60   voidpf opaque,
61   voidpf stream));
62
63int ZCALLBACK ferror_file_func OF((
64   voidpf opaque,
65   voidpf stream));
66
67
68voidpf ZCALLBACK fopen_file_func (opaque, filename, mode)
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
90uLong ZCALLBACK fread_file_func (opaque, stream, buf, size)
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
102uLong ZCALLBACK fwrite_file_func (opaque, stream, buf, size)
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
113long ZCALLBACK ftell_file_func (opaque, stream)
114   voidpf opaque;
115   voidpf stream;
116{
117    long ret;
118    ret = ftell((FILE *)stream);
119    return ret;
120}
121
122long ZCALLBACK fseek_file_func (opaque, stream, offset, origin)
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
148int ZCALLBACK fclose_file_func (opaque, stream)
149   voidpf opaque;
150   voidpf stream;
151{
152    int ret;
153    ret = fclose((FILE *)stream);
154    return ret;
155}
156
157int ZCALLBACK ferror_file_func (opaque, stream)
158   voidpf opaque;
159   voidpf stream;
160{
161    int ret;
162    ret = ferror((FILE *)stream);
163    return ret;
164}
165
166void fill_fopen_filefunc (pzlib_filefunc_def)
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}
Note: See TracBrowser for help on using the repository browser.