2000-05-23 01:55:31 +00:00
|
|
|
/*
|
|
|
|
* NuFX archive manipulation library
|
2007-02-19 23:12:22 +00:00
|
|
|
* Copyright (C) 2000-2007 by Andy McFadden, All Rights Reserved.
|
2000-05-23 01:55:31 +00:00
|
|
|
* This is free software; you can redistribute it and/or modify it under the
|
2007-02-19 23:12:22 +00:00
|
|
|
* terms of the BSD License, see the file COPYING-LIB.
|
2000-05-23 01:55:31 +00:00
|
|
|
*
|
|
|
|
* External type definitions and function prototypes.
|
|
|
|
*/
|
2014-12-23 00:06:55 +00:00
|
|
|
#ifndef NUFXLIB_SYSDEFS_H
|
|
|
|
#define NUFXLIB_SYSDEFS_H
|
2000-05-23 01:55:31 +00:00
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include <config.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef DEBUG_VERBOSE
|
|
|
|
# define DEBUG_MSGS
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* these should exist everywhere */
|
|
|
|
#include <stdarg.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <memory.h>
|
|
|
|
#include <time.h>
|
|
|
|
#include <errno.h>
|
|
|
|
#include <assert.h>
|
|
|
|
|
|
|
|
/* basic Win32 stuff -- info-zip has much more complete defs */
|
2014-10-29 22:14:14 +00:00
|
|
|
#if defined(_WIN32) || defined(MSDOS)
|
2000-05-23 01:55:31 +00:00
|
|
|
# define WINDOWS_LIKE
|
|
|
|
|
|
|
|
# ifndef HAVE_CONFIG_H
|
|
|
|
# define HAVE_FCNTL_H
|
|
|
|
# define HAVE_MALLOC_H
|
|
|
|
# define HAVE_STDLIB_H
|
|
|
|
# define HAVE_SYS_STAT_H
|
|
|
|
# undef HAVE_SYS_TIME_H
|
|
|
|
# define HAVE_SYS_TYPES_H
|
|
|
|
# undef HAVE_UNISTD_H
|
|
|
|
# undef HAVE_UTIME_H
|
|
|
|
# define HAVE_SYS_UTIME_H
|
|
|
|
# define HAVE_WINDOWS_H
|
|
|
|
# define HAVE_FDOPEN
|
|
|
|
# undef HAVE_FTRUNCATE
|
|
|
|
# define HAVE_MEMMOVE
|
|
|
|
# undef HAVE_MKSTEMP
|
|
|
|
# define HAVE_MKTIME
|
|
|
|
# define HAVE_SNPRINTF
|
|
|
|
# undef HAVE_STRCASECMP
|
|
|
|
# undef HAVE_STRNCASECMP
|
|
|
|
# define HAVE_STRERROR
|
|
|
|
# define HAVE_STRTOUL
|
|
|
|
# define HAVE_VSNPRINTF
|
|
|
|
# define SNPRINTF_DECLARED
|
|
|
|
# define VSNPRINTF_DECLARED
|
|
|
|
# define SPRINTF_RETURNS_INT
|
|
|
|
# define inline /*Visual C++6.0 can't inline ".c" files*/
|
|
|
|
# define mode_t int
|
2002-10-10 23:45:56 +00:00
|
|
|
# define ENABLE_SQ
|
|
|
|
# define ENABLE_LZW
|
|
|
|
# define ENABLE_LZC
|
|
|
|
/*# define ENABLE_DEFLATE*/
|
|
|
|
/*# define ENABLE_BZIP2*/
|
2000-05-23 01:55:31 +00:00
|
|
|
# endif
|
|
|
|
|
|
|
|
# include <io.h>
|
|
|
|
# include <direct.h>
|
|
|
|
# define FOPEN_WANTS_B
|
|
|
|
# define HAVE_CHSIZE
|
|
|
|
# define snprintf _snprintf
|
|
|
|
# define vsnprintf _vsnprintf
|
Distinguish Unicode and Mac OS Roman strings
NufxLib has historically made no effort to distinguish between
the character set used for filenames on the local disk, and for
filenames stored within the archive. Now all Unicode filename
strings use the UNICHAR type and have "UNI" in the name, and all
Mac OS Roman strings have "MOR" in the name. (The naming
convention makes it obvious when you're assigning the wrong thing;
on Linux both formats are char*, so the compiler won't tell you
if you get it wrong.)
The distinction is necessary because filesystems generally support
Unicode these days, but on Windows you need to use a separate
set of wide-character file I/O functions. (On Linux it all works
with "narrow" strings, and the UTF-8 encoding is interpreted by
applications.) The character set used for NuFX archive filenames
is MOR, matching what GS/OS + HFS supported, and we want to be able
to convert back and forth between MOR and a Unicode representation.
This change updates the various character types and string names,
adds conversion functions, and updates NuLib2 for proper execution
on Linux. It does not include the (probably extensive) changes
required for Windows UTF-16 support. Instead, the conversion
functions are no-ops, which should result in NuLib2 for Windows
continuing to behave in the same slightly broken way.
This adds "test-names", which exercises Unicode filenames a bit.
It will not pass on Win32.
Also, tweaked the Linux makefiles to have explicit dependencies,
rather than empty space and an expectation that "makedepend" exists.
Also, minor source code cleanups.
While this probably doesn't affect binary compatibility -- it's
mainly a matter of naming and string interpretation -- there's
enough going on that it should be considered an API revision, so
this updates the version to 3.0.0.
2014-12-24 19:14:32 +00:00
|
|
|
|
2000-05-23 01:55:31 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef HAVE_MALLOC_H
|
|
|
|
# include <malloc.h>
|
|
|
|
#endif
|
|
|
|
#ifdef HAVE_STDLIB_H
|
|
|
|
# include <stdlib.h>
|
|
|
|
#endif
|
|
|
|
#ifdef HAVE_SYS_STAT_H
|
|
|
|
# include <sys/stat.h>
|
|
|
|
#endif
|
|
|
|
#ifdef HAVE_SYS_TIME_H
|
|
|
|
# include <sys/time.h>
|
|
|
|
#endif
|
|
|
|
#ifdef HAVE_SYS_TYPES_H
|
|
|
|
# include <sys/types.h>
|
|
|
|
#endif
|
|
|
|
#ifdef HAVE_UNISTD_H
|
|
|
|
# include <unistd.h>
|
|
|
|
#endif
|
|
|
|
#ifdef HAVE_UTIME_H
|
|
|
|
# include <utime.h>
|
|
|
|
#endif
|
|
|
|
#ifdef HAVE_SYS_UTIME_H
|
|
|
|
# include <sys/utime.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if defined(WINDOWS_LIKE)
|
|
|
|
# ifndef F_OK
|
2002-12-19 23:21:32 +00:00
|
|
|
# define F_OK 0 /* was 02 in <= v1.1.0 */
|
2000-05-23 01:55:31 +00:00
|
|
|
# endif
|
|
|
|
#endif
|
|
|
|
|
2003-06-20 22:51:29 +00:00
|
|
|
#if defined(__APPLE__) && defined(__MACH__) /* OS X */
|
|
|
|
# define MAC_LIKE
|
|
|
|
# define UNIX_LIKE
|
|
|
|
#endif
|
2000-05-23 01:55:31 +00:00
|
|
|
|
|
|
|
#if defined(__unix__) || defined(__unix) || defined(__BEOS__) || \
|
2003-06-20 22:51:29 +00:00
|
|
|
defined(__hpux) || defined(_AIX)
|
2002-09-21 00:49:42 +00:00
|
|
|
# define UNIX_LIKE /* standardize */
|
2000-05-23 01:55:31 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#if defined(UNIX_LIKE)
|
|
|
|
# ifdef USE_REENTRANT_CALLS
|
2002-09-21 00:49:42 +00:00
|
|
|
# define _REENTRANT /* Solaris 2.x convention */
|
2000-05-23 01:55:31 +00:00
|
|
|
# endif
|
|
|
|
#endif
|
|
|
|
|
2015-01-03 23:15:05 +00:00
|
|
|
/* not currently using filesystem resource forks */
|
|
|
|
//#if defined(__ORCAC__) || defined(MAC_LIKE)
|
|
|
|
//# define HAS_RESOURCE_FORKS
|
|
|
|
//#endif
|
2000-05-23 01:55:31 +00:00
|
|
|
|
|
|
|
/* __FUNCTION__ was missing from BeOS __MWERKS__, and might be gcc-only */
|
|
|
|
#ifdef __GNUC__
|
|
|
|
# define HAS__FUNCTION__
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if defined(__linux__)
|
|
|
|
# define HAS_MALLOC_CHECK_
|
|
|
|
#endif
|
|
|
|
|
2014-12-23 00:06:55 +00:00
|
|
|
#endif /*NUFXLIB_SYSDEFS_H*/
|