cosmopolitan/third_party/zip/osdep.h
Justine Tunney b0df6c1fce
Implement proper time zone support
Cosmopolitan now supports 104 time zones. They're embedded inside any
binary that links the localtime() function. Doing so adds about 100kb
to the binary size. This change also gets time zones working properly
on Windows for the first time. It's not needed to have /etc/localtime
exist on Windows, since we can get this information from WIN32. We're
also now updated to the latest version of Paul Eggert's TZ library.
2024-05-04 23:06:37 -07:00

93 lines
2.4 KiB
C

/*
unix/osdep.h - Zip 3
Copyright (c) 1990-2005 Info-ZIP. All rights reserved.
See the accompanying file LICENSE, version 2005-Feb-10 or later
(the contents of which are also included in zip.h) for terms of use.
If, for some reason, both of these files are missing, the Info-ZIP license
also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html
*/
#ifdef NO_LARGE_FILE_SUPPORT
# ifdef LARGE_FILE_SUPPORT
# undef LARGE_FILE_SUPPORT
# endif
#endif
#ifdef LARGE_FILE_SUPPORT
/* 64-bit Large File Support */
/* The following Large File Summit (LFS) defines turn on large file support on
Linux (probably 2.4 or later kernel) and many other unixen */
# define _LARGEFILE_SOURCE /* some OSes need this for fseeko */
# define _LARGEFILE64_SOURCE
# define _FILE_OFFSET_BITS 64 /* select default interface as 64 bit */
# define _LARGE_FILES /* some OSes need this for 64-bit off_t */
#endif
#include "libc/calls/makedev.h"
#include "libc/calls/weirdtypes.h"
#include "libc/thread/thread.h"
#include "libc/calls/typedef/u.h"
#include "libc/calls/weirdtypes.h"
#include "libc/sock/select.h"
#include "libc/sysv/consts/endian.h"
#include "libc/calls/calls.h"
#include "libc/calls/struct/stat.h"
#include "libc/calls/struct/stat.macros.h"
#include "libc/calls/struct/timespec.h"
#include "libc/calls/weirdtypes.h"
#include "libc/sysv/consts/s.h"
#include "libc/sysv/consts/utime.h"
#include "libc/time.h"
/* printf format size prefix for zoff_t values */
#ifdef LARGE_FILE_SUPPORT
# define ZOFF_T_FORMAT_SIZE_PREFIX "ll"
#else
# define ZOFF_T_FORMAT_SIZE_PREFIX "l"
#endif
#ifdef NO_OFF_T
typedef long zoff_t;
typedef unsigned long uzoff_t;
#else
typedef off_t zoff_t;
# if defined(LARGE_FILE_SUPPORT) && !(defined(__alpha) && defined(__osf__))
typedef unsigned long long uzoff_t;
# else
typedef unsigned long uzoff_t;
# endif
#endif
typedef struct stat z_stat;
/* Automatically set ZIP64_SUPPORT if LFS */
#ifdef LARGE_FILE_SUPPORT
# ifndef NO_ZIP64_SUPPORT
# ifndef ZIP64_SUPPORT
# define ZIP64_SUPPORT
# endif
# else
# ifdef ZIP64_SUPPORT
# undef ZIP64_SUPPORT
# endif
# endif
#endif
/* Process files in binary mode */
#if defined(__DJGPP__) || defined(__CYGWIN__)
# define FOPR "rb"
# define FOPM "r+b"
# define FOPW "wb"
#endif
/* Enable the "UT" extra field (time info) */
#if !defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME)
# define USE_EF_UT_TIME
#endif