| 
							- /*
 -   Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
 - 
 -   See the accompanying file LICENSE, version 2009-Jan-02 or later
 -   (the contents of which are also included in zip.h) for terms of use.
 -   If, for some reason, all these files are missing, the Info-ZIP license
 -   also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
 - */
 - /*---------------------------------------------------------------------------
 - 
 -   win32/win32i64.c - UnZip 6
 - 
 -   64-bit filesize support for WIN32 Zip and UnZip.
 -   ---------------------------------------------------------------------------*/
 - 
 - #include "../zip.h"
 - 
 - /* --------------------------------------------------- */
 - /* Large File Support
 -  *
 -  * Initial functions by E. Gordon and R. Nausedat
 -  * 9/10/2003
 -  *
 -  * These implement 64-bit file support for Windows.  The
 -  * defines and headers are in win32/osdep.h.
 -  *
 -  * These moved from win32.c by Mike White to avoid conflicts
 -  * in WiZ of same name functions in UnZip and Zip libraries.
 -  * 9/25/04 EG
 -  */
 - 
 - #if defined(LARGE_FILE_SUPPORT) && !defined(__CYGWIN__)
 - # ifdef USE_STRM_INPUT
 - 
 - #  ifndef zftello
 - /* 64-bit buffered ftello
 -  *
 -  * Win32 does not provide a 64-bit buffered
 -  * ftell (in the published api anyway) so below provides
 -  * hopefully close version.
 -  * We have not gotten _telli64 to work with buffered
 -  * streams.  Below cheats by using fgetpos improperly and
 -  * may not work on other ports.
 -  */
 - 
 - zoff_t zftello(stream)
 -   FILE *stream;
 - {
 -   fpos_t fpos = 0;
 - 
 -   if (fgetpos(stream, &fpos) != 0) {
 -     return -1L;
 -   } else {
 -     return fpos;
 -   }
 - }
 - #  endif /* ndef zftello */
 - 
 - 
 - #  ifndef zfseeko
 - /* 64-bit buffered fseeko
 -  *
 -  * Win32 does not provide a 64-bit buffered
 -  * fseeko, so use _lseeki64 and fflush.  Note
 -  * that SEEK_CUR can lose track of location
 -  * if fflush is done between the last buffered
 -  * io and this call.
 -  */
 - 
 - int zfseeko(stream, offset, origin)
 -   FILE *stream;
 -   zoff_t offset;
 -   int origin;
 - {
 - 
 -   /* fseek() or its replacements are supposed to clear the eof status
 -      of the stream. fflush() and _lseeki64() do not touch the stream's
 -      eof flag, so we have to do it manually. */
 - #if ((defined(_MSC_VER) && (_MSC_VER >= 1200)) || \
 -      (defined(__MINGW32__) && defined(__MSVCRT_VERSION__)))
 -   /* For the MSC environment (VS 6 or higher), and for recent releases of
 -      the MinGW environment, we "know" the internals of the FILE structure.
 -      So, we can clear just the EOF bit of the status flag. */
 -   stream->_flag &= ~_IOEOF;
 - #else
 -   /* Unfortunately, there is no standard "cleareof()" function, so we have
 -      to use clearerr().  This has the unwanted side effect of clearing the
 -      ferror() state as well. */
 -   clearerr(stream);
 - #endif
 - 
 -   if (origin == SEEK_CUR) {
 -     /* instead of synching up lseek easier just to figure and
 -        use an absolute offset */
 -     offset += zftello(stream);
 -     origin = SEEK_SET;
 -   }
 -   fflush(stream);
 -   if (_lseeki64(fileno(stream), offset, origin) == (zoff_t)-1L) {
 -     return -1;
 -   } else {
 -     return 0;
 -   }
 - }
 - #  endif  /* ndef fseeko */
 - # endif /* USE_STRM_INPUT */
 - #endif  /* Win32 LARGE_FILE_SUPPORT */
 - 
 - #if 0
 - FILE* zfopen(filename, mode)
 - const char *filename;
 - const char *mode;
 - {
 -   FILE* fTemp;
 - 
 -   fTemp = fopen(filename, mode);
 -   if( fTemp == NULL )
 -     return NULL;
 - 
 -   /* sorry, could not make VC60 and its rtl work properly without setting the
 -    * file buffer to NULL. the problem seems to be _telli64 which seems to
 -    * return the max stream position, comments are welcome
 -    */
 -   setbuf(fTemp, NULL);
 - 
 -   return fTemp;
 - }
 - #endif
 - /* --------------------------------------------------- */
 
 
  |