nulib2/nulib2/SysDefs.h

220 lines
4.4 KiB
C
Raw Normal View History

2000-05-23 01:55:31 +00:00
/*
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
* NuLib2
2007-02-19 23:11:55 +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:11:55 +00:00
* terms of the BSD License, see the file COPYING.
2000-05-23 01:55:31 +00:00
*
* This was adapted from gzip's "tailor.h" and NuLib's "nudefs.h".
*/
#ifndef NULIB2_SYSDEFS_H
#define NULIB2_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 <stdint.h>
2000-05-23 01:55:31 +00:00
#include <stdio.h>
#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 */
#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
# endif
# include <io.h>
# include <direct.h>
2000-05-23 01:55:31 +00:00
# define FOPEN_WANTS_B
# define HAVE_CHSIZE
# if _MSC_VER < 1900 /* no snprintf until Visual Studio 2015 */
# define snprintf _snprintf
# define vsnprintf _vsnprintf
# endif
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
#if defined(WINDOWS_LIKE)
# ifndef F_OK
# define F_OK 00
2000-05-23 01:55:31 +00:00
# endif
# ifndef R_OK
# define R_OK 04
2000-05-23 01:55:31 +00:00
# endif
#endif
#if defined(__unix__) || defined(__unix) || defined(__BEOS__) || \
defined(__hpux) || defined(_AIX) || defined(__APPLE__)
2000-05-23 01:55:31 +00:00
# define UNIX_LIKE
#endif
#if defined(__MSDOS__) && !defined(MSDOS)
# define MSDOS
#endif
#if defined(__OS2__) && !defined(OS2)
# define OS2
#endif
#if defined(OS2) && defined(MSDOS) /* MS C under OS/2 */
# undef MSDOS
#endif
/* this ought to get trimmed down */
#ifdef MSDOS
# ifndef __GNUC__
# ifdef __TURBOC__
# define NO_OFF_T
# ifdef __BORLANDC__
# define DIRENT
# else
# define NO_UTIME
# endif
# else /* MSC */
# define HAVE_SYS_UTIME_H
# define NO_UTIME_H
# endif
# endif
# define PATH_SEP '\\'
# define PATH_SEP2 '/'
# define PATH_SEP3 ':'
# ifdef MAX_PATH
# define MAX_PATH_LEN MAX_PATH
# else
# define MAX_PATH_LEN 128
# endif
# define NO_MULTIPLE_DOTS
# define MAX_EXT_CHARS 3
# define NO_CHOWN
# define PROTO
# ifndef HAVE_CONFIG_H
# define STDC_HEADERS
# endif
# define NO_SIZE_CHECK
# define SYSTEM_DEFAULT_EOL "\r\n"
#endif
#ifdef WIN32 /* Windows 95/98/NT */
# define HAVE_SYS_UTIME_H
# define NO_UTIME_H
# define PATH_SEP '\\'
# define PATH_SEP2 '/'
# define PATH_SEP3 ':'
# ifdef MAX_PATH
# define MAX_PATH_LEN MAX_PATH
# else
# define MAX_PATH_LEN 260
# endif
# define PROTO
# define STDC_HEADERS
# define SYSTEM_DEFAULT_EOL "\r\n"
#endif
#ifdef MACOS
# define PATH_SEP ':'
# define NO_CHOWN
# define NO_UTIME
# define SYSTEM_DEFAULT_EOL "\r"
#endif
#if defined(__APPLE__) && defined(__MACH__) /* OS X */
# define MAC_LIKE
# define UNIX_LIKE
#endif
/* 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
#if defined(APW) || defined(__ORCAC__)
# define __appleiigs__
# pragma lint -1
# pragma memorymodel 1
# pragma optimize 7
/*# pragma debug 25 */
# define PATH_SEP ':'
# define SYSTEM_DEFAULT_EOL "\r"
# ifdef GNO
# define HAS_DIRENT
# endif
#endif
#ifdef __GNUC__ /* this was missing from BeOS __MWERKS__, and probably others */
2000-05-23 01:55:31 +00:00
# define HAS__FUNCTION__
#endif
/* general defaults, mainly for UNIX */
#ifndef PATH_SEP
# define PATH_SEP '/'
#endif
#ifndef SYSTEM_DEFAULT_EOL
# define SYSTEM_DEFAULT_EOL "\n"
#endif
#ifndef MAX_PATH_LEN
# define MAX_PATH_LEN 1024
2000-05-23 01:55:31 +00:00
#endif
#endif /*NULIB2_SYSDEFS_H*/