mirror of
https://github.com/fadden/nulib2.git
synced 2024-12-28 09:29:16 +00:00
e2088e64d3
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.
145 lines
3.0 KiB
C
145 lines
3.0 KiB
C
/*
|
|
* NuFX archive manipulation library
|
|
* Copyright (C) 2000-2007 by Andy McFadden, All Rights Reserved.
|
|
* This is free software; you can redistribute it and/or modify it under the
|
|
* terms of the BSD License, see the file COPYING-LIB.
|
|
*
|
|
* External type definitions and function prototypes.
|
|
*/
|
|
#ifndef NUFXLIB_SYSDEFS_H
|
|
#define NUFXLIB_SYSDEFS_H
|
|
|
|
#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 */
|
|
#if defined(_WIN32) || defined(MSDOS)
|
|
# 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
|
|
# define ENABLE_SQ
|
|
# define ENABLE_LZW
|
|
# define ENABLE_LZC
|
|
/*# define ENABLE_DEFLATE*/
|
|
/*# define ENABLE_BZIP2*/
|
|
# endif
|
|
|
|
# include <io.h>
|
|
# include <direct.h>
|
|
# define FOPEN_WANTS_B
|
|
# define HAVE_CHSIZE
|
|
# define snprintf _snprintf
|
|
# define vsnprintf _vsnprintf
|
|
|
|
#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
|
|
# define F_OK 0 /* was 02 in <= v1.1.0 */
|
|
# endif
|
|
#endif
|
|
|
|
#if defined(__APPLE__) && defined(__MACH__) /* OS X */
|
|
# define MAC_LIKE
|
|
# define UNIX_LIKE
|
|
#endif
|
|
|
|
#if defined(__unix__) || defined(__unix) || defined(__BEOS__) || \
|
|
defined(__hpux) || defined(_AIX)
|
|
# define UNIX_LIKE /* standardize */
|
|
#endif
|
|
|
|
#if defined(UNIX_LIKE)
|
|
# ifdef USE_REENTRANT_CALLS
|
|
# define _REENTRANT /* Solaris 2.x convention */
|
|
# endif
|
|
#endif
|
|
|
|
/* resource forks on UFS filesystem under Mac OS X are a kluge */
|
|
/*#ifdef MAC*/
|
|
/*# define HAS_RESOURCE_FORKS*/
|
|
/*#endif*/
|
|
|
|
#if defined(__ORCAC__) || defined(MAC_LIKE)
|
|
# define HAS_RESOURCE_FORKS
|
|
#endif
|
|
|
|
/* __FUNCTION__ was missing from BeOS __MWERKS__, and might be gcc-only */
|
|
#ifdef __GNUC__
|
|
# define HAS__FUNCTION__
|
|
#endif
|
|
|
|
#if defined(__sun__) && !defined(__SVR4)
|
|
# include "SunOS4.h"
|
|
#endif
|
|
|
|
#if defined(__linux__)
|
|
# define HAS_MALLOC_CHECK_
|
|
#endif
|
|
|
|
#endif /*NUFXLIB_SYSDEFS_H*/
|