Changeset 0c5f3af3 in rtems


Ignore:
Timestamp:
Mar 18, 2011, 10:11:09 AM (9 years ago)
Author:
Ralf Corsepius <ralf.corsepius@…>
Branches:
4.11, master
Children:
ba3ec3d2
Parents:
d159dd8
Message:

Import from zlib-1.2.4

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpukit/zlib/contrib/minizip/ioapi.c

    rd159dd8 r0c5f3af3  
    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
     1/* ioapi.h -- IO base function header for compress/uncompress .zip
     2   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
     3
     4         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
     5
     6         Modifications for Zip64 support
     7         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
     8
     9         For more info read MiniZip_info.txt
     10
    711*/
    812
    9 #include <stdio.h>
    10 #include <stdlib.h>
    11 #include <string.h>
    12 
    13 #include "zlib.h"
     13#if (defined(_WIN32))
     14        #define _CRT_SECURE_NO_WARNINGS
     15#endif
     16
    1417#include "ioapi.h"
    1518
    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)
    69    voidpf opaque;
    70    const char* filename;
    71    int mode;
     19voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)
     20{
     21    if (pfilefunc->zfile_func64.zopen64_file != NULL)
     22        return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode);
     23    else
     24    {
     25        return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode);
     26    }
     27}
     28
     29long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)
     30{
     31    if (pfilefunc->zfile_func64.zseek64_file != NULL)
     32        return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin);
     33    else
     34    {
     35        uLong offsetTruncated = (uLong)offset;
     36        if (offsetTruncated != offset)
     37            return -1;
     38        else
     39            return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin);
     40    }
     41}
     42
     43ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)
     44{
     45    if (pfilefunc->zfile_func64.zseek64_file != NULL)
     46        return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);
     47    else
     48    {
     49        uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
     50        if ((tell_uLong) == ((uLong)-1))
     51            return (ZPOS64_T)-1;
     52        else
     53            return tell_uLong;
     54    }
     55}
     56
     57void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32)
     58{
     59    p_filefunc64_32->zfile_func64.zopen64_file = NULL;
     60    p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file;
     61    p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
     62    p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file;
     63    p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file;
     64    p_filefunc64_32->zfile_func64.ztell64_file = NULL;
     65    p_filefunc64_32->zfile_func64.zseek64_file = NULL;
     66    p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file;
     67    p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
     68    p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque;
     69    p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file;
     70    p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file;
     71}
     72
     73
     74
     75static voidpf  ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode));
     76static uLong   ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
     77static uLong   ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size));
     78static ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream));
     79static long    ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
     80static int     ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream));
     81static int     ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));
     82
     83static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode)
    7284{
    7385    FILE* file = NULL;
     
    8799}
    88100
    89 
    90 uLong ZCALLBACK fread_file_func (opaque, stream, buf, size)
    91    voidpf opaque;
    92    voidpf stream;
    93    void* buf;
    94    uLong size;
     101static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode)
     102{
     103    FILE* file = NULL;
     104    const char* mode_fopen = NULL;
     105    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
     106        mode_fopen = "rb";
     107    else
     108    if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
     109        mode_fopen = "r+b";
     110    else
     111    if (mode & ZLIB_FILEFUNC_MODE_CREATE)
     112        mode_fopen = "wb";
     113
     114    if ((filename!=NULL) && (mode_fopen != NULL))
     115        file = fopen64((const char*)filename, mode_fopen);
     116    return file;
     117}
     118
     119
     120static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size)
    95121{
    96122    uLong ret;
     
    99125}
    100126
    101 
    102 uLong ZCALLBACK fwrite_file_func (opaque, stream, buf, size)
    103    voidpf opaque;
    104    voidpf stream;
    105    const void* buf;
    106    uLong size;
     127static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size)
    107128{
    108129    uLong ret;
     
    111132}
    112133
    113 long ZCALLBACK ftell_file_func (opaque, stream)
    114    voidpf opaque;
    115    voidpf stream;
     134static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
    116135{
    117136    long ret;
     
    120139}
    121140
    122 long ZCALLBACK fseek_file_func (opaque, stream, offset, origin)
    123    voidpf opaque;
    124    voidpf stream;
    125    uLong offset;
    126    int origin;
     141
     142static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
     143{
     144    ZPOS64_T ret;
     145    ret = ftello64((FILE *)stream);
     146    return ret;
     147}
     148
     149static long ZCALLBACK fseek_file_func (voidpf  opaque, voidpf stream, uLong offset, int origin)
    127150{
    128151    int fseek_origin=0;
     
    142165    }
    143166    ret = 0;
    144     fseek((FILE *)stream, offset, fseek_origin);
    145     return ret;
    146 }
    147 
    148 int ZCALLBACK fclose_file_func (opaque, stream)
    149    voidpf opaque;
    150    voidpf stream;
     167    if (fseek((FILE *)stream, offset, fseek_origin) != 0)
     168        ret = -1;
     169    return ret;
     170}
     171
     172static long ZCALLBACK fseek64_file_func (voidpf  opaque, voidpf stream, ZPOS64_T offset, int origin)
     173{
     174    int fseek_origin=0;
     175    long ret;
     176    switch (origin)
     177    {
     178    case ZLIB_FILEFUNC_SEEK_CUR :
     179        fseek_origin = SEEK_CUR;
     180        break;
     181    case ZLIB_FILEFUNC_SEEK_END :
     182        fseek_origin = SEEK_END;
     183        break;
     184    case ZLIB_FILEFUNC_SEEK_SET :
     185        fseek_origin = SEEK_SET;
     186        break;
     187    default: return -1;
     188    }
     189    ret = 0;
     190
     191    if(fseeko64((FILE *)stream, offset, fseek_origin) != 0)
     192                        ret = -1;
     193
     194    return ret;
     195}
     196
     197
     198static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)
    151199{
    152200    int ret;
     
    155203}
    156204
    157 int ZCALLBACK ferror_file_func (opaque, stream)
    158    voidpf opaque;
    159    voidpf stream;
     205static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)
    160206{
    161207    int ret;
     
    176222    pzlib_filefunc_def->opaque = NULL;
    177223}
     224
     225void fill_fopen64_filefunc (zlib_filefunc64_def*  pzlib_filefunc_def)
     226{
     227    pzlib_filefunc_def->zopen64_file = fopen64_file_func;
     228    pzlib_filefunc_def->zread_file = fread_file_func;
     229    pzlib_filefunc_def->zwrite_file = fwrite_file_func;
     230    pzlib_filefunc_def->ztell64_file = ftell64_file_func;
     231    pzlib_filefunc_def->zseek64_file = fseek64_file_func;
     232    pzlib_filefunc_def->zclose_file = fclose_file_func;
     233    pzlib_filefunc_def->zerror_file = ferror_file_func;
     234    pzlib_filefunc_def->opaque = NULL;
     235}
Note: See TracChangeset for help on using the changeset viewer.