1406 lines
34 KiB
C
1406 lines
34 KiB
C
|
/**
|
||
|
osdep.h -- O/S abstraction for products using MakeMe.
|
||
|
*/
|
||
|
|
||
|
#ifndef _h_OSDEP
|
||
|
#define _h_OSDEP 1
|
||
|
|
||
|
/********************************** Includes **********************************/
|
||
|
|
||
|
#include "me.h"
|
||
|
|
||
|
/******************************* Default Features *****************************/
|
||
|
/*
|
||
|
MakeMe defaults
|
||
|
*/
|
||
|
#ifndef ME_COM_SSL
|
||
|
#define ME_COM_SSL 0 /**< Build without SSL support */
|
||
|
#endif
|
||
|
#ifndef ME_DEBUG
|
||
|
#define ME_DEBUG 0 /**< Default to a debug build */
|
||
|
#endif
|
||
|
#ifndef ME_FLOAT
|
||
|
#define ME_FLOAT 1 /**< Build with floating point support */
|
||
|
#endif
|
||
|
#ifndef ME_ROM
|
||
|
#define ME_ROM 0 /**< Build for execute from ROM */
|
||
|
#endif
|
||
|
|
||
|
/********************************* CPU Families *******************************/
|
||
|
/*
|
||
|
CPU Architectures
|
||
|
*/
|
||
|
#define ME_CPU_UNKNOWN 0
|
||
|
#define ME_CPU_ARM 1 /**< Arm */
|
||
|
#define ME_CPU_ITANIUM 2 /**< Intel Itanium */
|
||
|
#define ME_CPU_X86 3 /**< X86 */
|
||
|
#define ME_CPU_X64 4 /**< AMD64 or EMT64 */
|
||
|
#define ME_CPU_MIPS 5 /**< Mips */
|
||
|
#define ME_CPU_PPC 6 /**< Power PC */
|
||
|
#define ME_CPU_SPARC 7 /**< Sparc */
|
||
|
#define ME_CPU_TIDSP 8 /**< TI DSP */
|
||
|
#define ME_CPU_SH 9 /**< SuperH */
|
||
|
|
||
|
/*
|
||
|
Byte orderings
|
||
|
*/
|
||
|
#define ME_LITTLE_ENDIAN 1 /**< Little endian byte ordering */
|
||
|
#define ME_BIG_ENDIAN 2 /**< Big endian byte ordering */
|
||
|
|
||
|
/*
|
||
|
Use compiler definitions to determine the CPU type.
|
||
|
The default endianness can be overridden by configure --endian big|little.
|
||
|
*/
|
||
|
#if defined(__alpha__)
|
||
|
#define ME_CPU "alpha"
|
||
|
#define ME_CPU_ARCH ME_CPU_ALPHA
|
||
|
#define CPU_ENDIAN ME_LITTLE_ENDIAN
|
||
|
|
||
|
#elif defined(__arm__)
|
||
|
#define ME_CPU "arm"
|
||
|
#define ME_CPU_ARCH ME_CPU_ARM
|
||
|
#define CPU_ENDIAN ME_LITTLE_ENDIAN
|
||
|
|
||
|
#elif defined(__arm64__) || defined(__aarch64__)
|
||
|
#define ME_CPU "arm"
|
||
|
#define ME_CPU_ARCH ME_CPU_ARM
|
||
|
#define CPU_ENDIAN ME_LITTLE_ENDIAN
|
||
|
|
||
|
#elif defined(__x86_64__) || defined(_M_AMD64)
|
||
|
#define ME_CPU "x64"
|
||
|
#define ME_CPU_ARCH ME_CPU_X64
|
||
|
#define CPU_ENDIAN ME_LITTLE_ENDIAN
|
||
|
|
||
|
#elif defined(__i386__) || defined(__i486__) || defined(__i585__) || defined(__i686__) || defined(_M_IX86)
|
||
|
#define ME_CPU "x86"
|
||
|
#define ME_CPU_ARCH ME_CPU_X86
|
||
|
#define CPU_ENDIAN ME_LITTLE_ENDIAN
|
||
|
|
||
|
#elif defined(_M_IA64)
|
||
|
#define ME_CPU "ia64"
|
||
|
#define ME_CPU_ARCH ME_CPU_ITANIUM
|
||
|
#define CPU_ENDIAN ME_LITTLE_ENDIAN
|
||
|
|
||
|
#elif defined(__mips__) || defined(__mips64)
|
||
|
#define ME_CPU "mips"
|
||
|
#define ME_CPU_ARCH ME_CPU_MIPS
|
||
|
#define CPU_ENDIAN ME_BIG_ENDIAN
|
||
|
|
||
|
#elif defined(__ppc__) || defined(__powerpc__) || defined(__ppc64__) || defined(__ppc)
|
||
|
#define ME_CPU "ppc"
|
||
|
#define ME_CPU_ARCH ME_CPU_PPC
|
||
|
#define CPU_ENDIAN ME_BIG_ENDIAN
|
||
|
|
||
|
#elif defined(__sparc__)
|
||
|
#define ME_CPU "sparc"
|
||
|
#define ME_CPU_ARCH ME_CPU_SPARC
|
||
|
#define CPU_ENDIAN ME_BIG_ENDIAN
|
||
|
|
||
|
#elif defined(_TMS320C6X)
|
||
|
#define TIDSP 1
|
||
|
#define ME_CPU "tidsp"
|
||
|
#define ME_CPU_ARCH ME_CPU_SPARC
|
||
|
#define CPU_ENDIAN ME_LITTLE_ENDIAN
|
||
|
|
||
|
#elif defined(__sh__)
|
||
|
#define ME_CPU "sh"
|
||
|
#define ME_CPU_ARCH ME_CPU_SH
|
||
|
#define CPU_ENDIAN ME_LITTLE_ENDIAN
|
||
|
|
||
|
#else
|
||
|
#error "Cannot determine CPU type in osdep.h"
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
Set the default endian if me.h does not define it explicitly
|
||
|
*/
|
||
|
#ifndef ME_ENDIAN
|
||
|
#define ME_ENDIAN CPU_ENDIAN
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
Operating system defines. Use compiler standard definitions to sleuth. Works for all except VxWorks which does not
|
||
|
define any special symbol. NOTE: Support for SCOV Unix, LynxOS and UnixWare is deprecated.
|
||
|
*/
|
||
|
#if defined(__APPLE__)
|
||
|
#define ME_OS "macosx"
|
||
|
#define MACOSX 1
|
||
|
#define ME_UNIX_LIKE 1
|
||
|
#define ME_WIN_LIKE 0
|
||
|
#define ME_BSD_LIKE 1
|
||
|
#define HAS_USHORT 1
|
||
|
#define HAS_UINT 1
|
||
|
|
||
|
#elif defined(__linux__)
|
||
|
#define ME_OS "linux"
|
||
|
#define LINUX 1
|
||
|
#define ME_UNIX_LIKE 1
|
||
|
#define ME_WIN_LIKE 0
|
||
|
|
||
|
#elif defined(__FreeBSD__)
|
||
|
#define ME_OS "freebsd"
|
||
|
#define FREEBSD 1
|
||
|
#define ME_UNIX_LIKE 1
|
||
|
#define ME_WIN_LIKE 0
|
||
|
#define ME_BSD_LIKE 1
|
||
|
|
||
|
#elif defined(__OpenBSD__)
|
||
|
#define ME_OS "freebsd"
|
||
|
#define OPENBSD 1
|
||
|
#define ME_UNIX_LIKE 1
|
||
|
#define ME_WIN_LIKE 0
|
||
|
#define ME_BSD_LIKE 1
|
||
|
|
||
|
#elif defined(_WIN32)
|
||
|
#define ME_OS "windows"
|
||
|
#define WINDOWS 1
|
||
|
#define ME_UNIX_LIKE 0
|
||
|
#define ME_WIN_LIKE 1
|
||
|
|
||
|
#elif defined(__OS2__)
|
||
|
#define ME_OS "os2"
|
||
|
#define OS2 0
|
||
|
#define ME_UNIX_LIKE 0
|
||
|
#define ME_WIN_LIKE 0
|
||
|
|
||
|
#elif defined(MSDOS) || defined(__DME__)
|
||
|
#define ME_OS "msdos"
|
||
|
#define WINDOWS 0
|
||
|
#define ME_UNIX_LIKE 0
|
||
|
#define ME_WIN_LIKE 0
|
||
|
|
||
|
#elif defined(__NETWARE_386__)
|
||
|
#define ME_OS "netware"
|
||
|
#define NETWARE 0
|
||
|
#define ME_UNIX_LIKE 0
|
||
|
#define ME_WIN_LIKE 0
|
||
|
|
||
|
#elif defined(__bsdi__)
|
||
|
#define ME_OS "bsdi"
|
||
|
#define BSDI 1
|
||
|
#define ME_UNIX_LIKE 1
|
||
|
#define ME_WIN_LIKE 0
|
||
|
#define ME_BSD_LIKE 1
|
||
|
|
||
|
#elif defined(__NetBSD__)
|
||
|
#define ME_OS "netbsd"
|
||
|
#define NETBSD 1
|
||
|
#define ME_UNIX_LIKE 1
|
||
|
#define ME_WIN_LIKE 0
|
||
|
#define ME_BSD_LIKE 1
|
||
|
|
||
|
#elif defined(__QNX__)
|
||
|
#define ME_OS "qnx"
|
||
|
#define QNX 0
|
||
|
#define ME_UNIX_LIKE 0
|
||
|
#define ME_WIN_LIKE 0
|
||
|
|
||
|
#elif defined(__hpux)
|
||
|
#define ME_OS "hpux"
|
||
|
#define HPUX 1
|
||
|
#define ME_UNIX_LIKE 1
|
||
|
#define ME_WIN_LIKE 0
|
||
|
|
||
|
#elif defined(_AIX)
|
||
|
#define ME_OS "aix"
|
||
|
#define AIX 1
|
||
|
#define ME_UNIX_LIKE 1
|
||
|
#define ME_WIN_LIKE 0
|
||
|
|
||
|
#elif defined(__CYGWIN__)
|
||
|
#define ME_OS "cygwin"
|
||
|
#define CYGWIN 1
|
||
|
#define ME_UNIX_LIKE 1
|
||
|
#define ME_WIN_LIKE 0
|
||
|
|
||
|
#elif defined(__VMS)
|
||
|
#define ME_OS "vms"
|
||
|
#define VMS 1
|
||
|
#define ME_UNIX_LIKE 0
|
||
|
#define ME_WIN_LIKE 0
|
||
|
|
||
|
#elif defined(VXWORKS)
|
||
|
/* VxWorks does not have a pre-defined symbol */
|
||
|
#define ME_OS "vxworks"
|
||
|
#define ME_UNIX_LIKE 0
|
||
|
#define ME_WIN_LIKE 0
|
||
|
#define HAS_USHORT 1
|
||
|
|
||
|
#elif defined(ECOS)
|
||
|
/* ECOS may not have a pre-defined symbol */
|
||
|
#define ME_OS "ecos"
|
||
|
#define ME_UNIX_LIKE 0
|
||
|
#define ME_WIN_LIKE 0
|
||
|
|
||
|
#elif defined(TIDSP)
|
||
|
#define ME_OS "tidsp"
|
||
|
#define ME_UNIX_LIKE 0
|
||
|
#define ME_WIN_LIKE 0
|
||
|
#define HAS_INT32 1
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#if __WORDSIZE == 64 || __amd64 || __x86_64 || __x86_64__ || _WIN64 || __mips64 || __arch64__ || __arm64__
|
||
|
#define ME_64 1
|
||
|
#define ME_WORDSIZE 64
|
||
|
#else
|
||
|
#define ME_64 0
|
||
|
#define ME_WORDSIZE 32
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
Unicode
|
||
|
*/
|
||
|
#ifndef ME_CHAR_LEN
|
||
|
#define ME_CHAR_LEN 1
|
||
|
#endif
|
||
|
#if ME_CHAR_LEN == 4
|
||
|
typedef int wchar;
|
||
|
#define UT(s) L ## s
|
||
|
#define UNICODE 1
|
||
|
#elif ME_CHAR_LEN == 2
|
||
|
typedef short wchar;
|
||
|
#define UT(s) L ## s
|
||
|
#define UNICODE 1
|
||
|
#else
|
||
|
typedef char wchar;
|
||
|
#define UT(s) s
|
||
|
#endif
|
||
|
|
||
|
#define ME_PLATFORM ME_OS "-" ME_CPU "-" ME_PROFILE
|
||
|
|
||
|
/********************************* O/S Includes *******************************/
|
||
|
/*
|
||
|
Out-of-order definitions and includes. Order really matters in this section.
|
||
|
*/
|
||
|
#if WINDOWS
|
||
|
#undef _CRT_SECURE_NO_DEPRECATE
|
||
|
#define _CRT_SECURE_NO_DEPRECATE 1
|
||
|
#undef _CRT_SECURE_NO_WARNINGS
|
||
|
#define _CRT_SECURE_NO_WARNINGS 1
|
||
|
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1
|
||
|
#ifndef _WIN32_WINNT
|
||
|
/* Target Windows 7 by default */
|
||
|
#define _WIN32_WINNT 0x601
|
||
|
#endif
|
||
|
/*
|
||
|
Work-around to allow the windows 7.* SDK to be used with VS 2012
|
||
|
MSC_VER 1800 2013
|
||
|
MSC_VER 1900 2015
|
||
|
*/
|
||
|
#if _MSC_VER >= 1700
|
||
|
#define SAL_SUPP_H
|
||
|
#define SPECSTRING_SUPP_H
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if LINUX
|
||
|
/*
|
||
|
Use GNU extensions for:
|
||
|
RTLD_DEFAULT for dlsym()
|
||
|
*/
|
||
|
#define _GNU_SOURCE 1
|
||
|
#if !ME_64
|
||
|
#define _LARGEFILE64_SOURCE 1
|
||
|
#ifdef __USE_FILE_OFFSET64
|
||
|
#define _FILE_OFFSET_BITS 64
|
||
|
#endif
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if VXWORKS
|
||
|
#ifndef _VSB_CONFIG_FILE
|
||
|
#define _VSB_CONFIG_FILE "vsbConfig.h"
|
||
|
#endif
|
||
|
#include <vxWorks.h>
|
||
|
#endif
|
||
|
|
||
|
#if ME_WIN_LIKE
|
||
|
#include <winsock2.h>
|
||
|
#include <windows.h>
|
||
|
#include <winbase.h>
|
||
|
#include <winuser.h>
|
||
|
#include <shlobj.h>
|
||
|
#include <shellapi.h>
|
||
|
#include <wincrypt.h>
|
||
|
#include <ws2tcpip.h>
|
||
|
#include <conio.h>
|
||
|
#include <process.h>
|
||
|
#include <windows.h>
|
||
|
#include <shlobj.h>
|
||
|
#if _MSC_VER >= 1800
|
||
|
#include <stdbool.h>
|
||
|
#endif
|
||
|
#if ME_DEBUG
|
||
|
#include <crtdbg.h>
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
Includes in alphabetic order
|
||
|
*/
|
||
|
#include <ctype.h>
|
||
|
#if ME_WIN_LIKE
|
||
|
#include <direct.h>
|
||
|
#else
|
||
|
#include <dirent.h>
|
||
|
#endif
|
||
|
#if ME_UNIX_LIKE
|
||
|
#include <dlfcn.h>
|
||
|
#endif
|
||
|
#include <fcntl.h>
|
||
|
#include <errno.h>
|
||
|
#if ME_FLOAT
|
||
|
#include <float.h>
|
||
|
#define __USE_ISOC99 1
|
||
|
#include <math.h>
|
||
|
#endif
|
||
|
#if ME_UNIX_LIKE
|
||
|
#include <grp.h>
|
||
|
#endif
|
||
|
#if ME_WIN_LIKE
|
||
|
#include <io.h>
|
||
|
#endif
|
||
|
#if MACOSX || LINUX
|
||
|
#include <libgen.h>
|
||
|
#endif
|
||
|
#include <limits.h>
|
||
|
#if ME_UNIX_LIKE || VXWORKS
|
||
|
#include <sys/socket.h>
|
||
|
#include <arpa/inet.h>
|
||
|
#include <netdb.h>
|
||
|
#include <net/if.h>
|
||
|
#include <netinet/in.h>
|
||
|
#include <netinet/tcp.h>
|
||
|
#include <netinet/ip.h>
|
||
|
#endif
|
||
|
#if ME_UNIX_LIKE
|
||
|
#include <pthread.h>
|
||
|
#include <pwd.h>
|
||
|
#if !CYGWIN
|
||
|
#include <resolv.h>
|
||
|
#endif
|
||
|
#endif
|
||
|
#if ME_BSD_LIKE
|
||
|
#include <readpassphrase.h>
|
||
|
#endif
|
||
|
#include <setjmp.h>
|
||
|
#include <signal.h>
|
||
|
#include <stdarg.h>
|
||
|
#if ME_UNIX_LIKE
|
||
|
#include <stdint.h>
|
||
|
#endif
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
#if ME_UNIX_LIKE
|
||
|
#include <syslog.h>
|
||
|
#endif
|
||
|
#if !TIDSP
|
||
|
#include <sys/stat.h>
|
||
|
#include <sys/types.h>
|
||
|
#endif
|
||
|
#if ME_UNIX_LIKE
|
||
|
#include <sys/ioctl.h>
|
||
|
#include <sys/mman.h>
|
||
|
#include <sys/resource.h>
|
||
|
#include <sys/select.h>
|
||
|
#include <sys/time.h>
|
||
|
#include <sys/times.h>
|
||
|
#include <sys/utsname.h>
|
||
|
#include <sys/uio.h>
|
||
|
#include <sys/wait.h>
|
||
|
#include <poll.h>
|
||
|
#include <unistd.h>
|
||
|
#endif
|
||
|
#include <time.h>
|
||
|
#if !VXWORKS && !TIDSP
|
||
|
#include <wchar.h>
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
Extra includes per O/S
|
||
|
*/
|
||
|
#if CYGWIN
|
||
|
#include "w32api/windows.h"
|
||
|
#include "sys/cygwin.h"
|
||
|
#endif
|
||
|
#if LINUX
|
||
|
#include <linux/version.h>
|
||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
|
||
|
#include <sys/epoll.h>
|
||
|
#endif
|
||
|
#include <sys/prctl.h>
|
||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
|
||
|
#include <sys/eventfd.h>
|
||
|
#endif
|
||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13)
|
||
|
#define HAS_INOTIFY 1
|
||
|
#include <sys/inotify.h>
|
||
|
#else
|
||
|
#define HAS_INOTIFY 0
|
||
|
#endif
|
||
|
#if !__UCLIBC__
|
||
|
#include <sys/sendfile.h>
|
||
|
#endif
|
||
|
#endif
|
||
|
#if MACOSX
|
||
|
#include <stdbool.h>
|
||
|
#include <mach-o/dyld.h>
|
||
|
#include <mach-o/dyld.h>
|
||
|
#include <mach/mach_init.h>
|
||
|
#include <mach/mach_time.h>
|
||
|
#include <mach/task.h>
|
||
|
#include <sys/sysctl.h>
|
||
|
#include <libkern/OSAtomic.h>
|
||
|
#endif
|
||
|
#if VXWORKS
|
||
|
#include <vxWorks.h>
|
||
|
#include <envLib.h>
|
||
|
#include <iosLib.h>
|
||
|
#include <loadLib.h>
|
||
|
#include <selectLib.h>
|
||
|
#include <sockLib.h>
|
||
|
#include <inetLib.h>
|
||
|
#include <ioLib.h>
|
||
|
#include <pipeDrv.h>
|
||
|
#include <hostLib.h>
|
||
|
#include <sysSymTbl.h>
|
||
|
#include <sys/fcntlcom.h>
|
||
|
#include <tickLib.h>
|
||
|
#include <taskHookLib.h>
|
||
|
#include <unldLib.h>
|
||
|
#if _WRS_VXWORKS_MAJOR >= 6
|
||
|
#include <wait.h>
|
||
|
#endif
|
||
|
#if _WRS_VXWORKS_MAJOR > 6 || (_WRS_VXWORKS_MAJOR == 6 && _WRS_VXWORKS_MINOR >= 8)
|
||
|
#include <symSync.h>
|
||
|
#include <vxAtomicLib.h>
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if TIDSP
|
||
|
#include <mathf.h>
|
||
|
#include <netmain.h>
|
||
|
#include <nettools/inc/dnsif.h>
|
||
|
#include <socket.h>
|
||
|
#include <file.h>
|
||
|
#endif
|
||
|
|
||
|
/************************************** Types *********************************/
|
||
|
/*
|
||
|
Standard types
|
||
|
*/
|
||
|
#ifndef HAS_BOOL
|
||
|
#ifndef __cplusplus
|
||
|
#if !MACOSX
|
||
|
#define HAS_BOOL 1
|
||
|
/**
|
||
|
Boolean data type.
|
||
|
*/
|
||
|
#if !WINDOWS || ((_MSC_VER < 1800) && !defined(bool))
|
||
|
/* Bool introduced via stdbool in VS 2015 */
|
||
|
typedef char bool;
|
||
|
#endif
|
||
|
#endif
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_UCHAR
|
||
|
#define HAS_UCHAR 1
|
||
|
/**
|
||
|
Unsigned char data type.
|
||
|
*/
|
||
|
typedef unsigned char uchar;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_SCHAR
|
||
|
#define HAS_SCHAR 1
|
||
|
/**
|
||
|
Signed char data type.
|
||
|
*/
|
||
|
typedef signed char schar;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_CCHAR
|
||
|
#define HAS_CCHAR 1
|
||
|
/**
|
||
|
Constant char data type.
|
||
|
*/
|
||
|
typedef const char cchar;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_CUCHAR
|
||
|
#define HAS_CUCHAR 1
|
||
|
/**
|
||
|
Unsigned char data type.
|
||
|
*/
|
||
|
typedef const unsigned char cuchar;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_USHORT
|
||
|
#define HAS_USHORT 1
|
||
|
/**
|
||
|
Unsigned short data type.
|
||
|
*/
|
||
|
typedef unsigned short ushort;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_CUSHORT
|
||
|
#define HAS_CUSHORT 1
|
||
|
/**
|
||
|
Constant unsigned short data type.
|
||
|
*/
|
||
|
typedef const unsigned short cushort;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_CVOID
|
||
|
#define HAS_CVOID 1
|
||
|
/**
|
||
|
Constant void data type.
|
||
|
*/
|
||
|
typedef const void cvoid;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_INT8
|
||
|
#define HAS_INT8 1
|
||
|
/**
|
||
|
Integer 8 bits data type.
|
||
|
*/
|
||
|
typedef char int8;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_UINT8
|
||
|
#define HAS_UINT8 1
|
||
|
/**
|
||
|
Unsigned integer 8 bits data type.
|
||
|
*/
|
||
|
typedef unsigned char uint8;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_INT16
|
||
|
#define HAS_INT16 1
|
||
|
/**
|
||
|
Integer 16 bits data type.
|
||
|
*/
|
||
|
typedef short int16;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_UINT16
|
||
|
#define HAS_UINT16 1
|
||
|
/**
|
||
|
Unsigned integer 16 bits data type.
|
||
|
*/
|
||
|
typedef unsigned short uint16;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_INT32
|
||
|
#define HAS_INT32 1
|
||
|
/**
|
||
|
Integer 32 bits data type.
|
||
|
*/
|
||
|
typedef int int32;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_UINT32
|
||
|
#define HAS_UINT32 1
|
||
|
/**
|
||
|
Unsigned integer 32 bits data type.
|
||
|
*/
|
||
|
typedef unsigned int uint32;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_UINT
|
||
|
#define HAS_UINT 1
|
||
|
/**
|
||
|
Unsigned integer (machine dependent bit size) data type.
|
||
|
*/
|
||
|
typedef unsigned int uint;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_ULONG
|
||
|
#define HAS_ULONG 1
|
||
|
/**
|
||
|
Unsigned long (machine dependent bit size) data type.
|
||
|
*/
|
||
|
typedef unsigned long ulong;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_CINT
|
||
|
#define HAS_CINT 1
|
||
|
/**
|
||
|
Constant int data type.
|
||
|
*/
|
||
|
typedef const int cint;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_SSIZE
|
||
|
#define HAS_SSIZE 1
|
||
|
#if ME_UNIX_LIKE || VXWORKS || DOXYGEN
|
||
|
/**
|
||
|
Signed integer size field large enough to hold a pointer offset.
|
||
|
*/
|
||
|
typedef ssize_t ssize;
|
||
|
#elif TIDSP
|
||
|
typedef int ssize_t;
|
||
|
typedef ssize_t ssize;
|
||
|
#else
|
||
|
typedef SSIZE_T ssize;
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
Windows uses uint for write/read counts (Ugh!)
|
||
|
*/
|
||
|
#if ME_WIN_LIKE
|
||
|
typedef uint wsize;
|
||
|
#else
|
||
|
typedef ssize wsize;
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_INT64
|
||
|
#if ME_UNIX_LIKE
|
||
|
__extension__ typedef long long int int64;
|
||
|
#elif VXWORKS || DOXYGEN
|
||
|
/**
|
||
|
Integer 64 bit data type.
|
||
|
*/
|
||
|
typedef long long int int64;
|
||
|
#elif ME_WIN_LIKE
|
||
|
typedef __int64 int64;
|
||
|
#else
|
||
|
typedef long long int int64;
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef HAS_UINT64
|
||
|
#if ME_UNIX_LIKE
|
||
|
__extension__ typedef unsigned long long int uint64;
|
||
|
#elif VXWORKS || DOXYGEN
|
||
|
typedef unsigned long long int uint64;
|
||
|
#elif ME_WIN_LIKE
|
||
|
typedef unsigned __int64 uint64;
|
||
|
#else
|
||
|
typedef unsigned long long int uint64;
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/**
|
||
|
Signed file offset data type. Supports large files greater than 4GB in size on all systems.
|
||
|
*/
|
||
|
typedef int64 Offset;
|
||
|
|
||
|
#if DOXYGEN
|
||
|
/** Size to hold the length of a socket address */
|
||
|
typedef int Socklen;
|
||
|
#elif VXWORKS
|
||
|
typedef int Socklen;
|
||
|
#else
|
||
|
typedef socklen_t Socklen;
|
||
|
#endif
|
||
|
|
||
|
#if DOXYGEN || ME_UNIX_LIKE || VXWORKS
|
||
|
/** Argument for sockets */
|
||
|
typedef int Socket;
|
||
|
#ifndef SOCKET_ERROR
|
||
|
#define SOCKET_ERROR -1
|
||
|
#endif
|
||
|
#define SOCKET_ERROR -1
|
||
|
#ifndef INVALID_SOCKET
|
||
|
#define INVALID_SOCKET -1
|
||
|
#endif
|
||
|
#elif ME_WIN_LIKE
|
||
|
typedef SOCKET Socket;
|
||
|
#elif TIDSP
|
||
|
typedef SOCKET Socket;
|
||
|
#define SOCKET_ERROR INVALID_SOCKET
|
||
|
#else
|
||
|
typedef int Socket;
|
||
|
#ifndef SOCKET_ERROR
|
||
|
#define SOCKET_ERROR -1
|
||
|
#endif
|
||
|
#ifndef INVALID_SOCKET
|
||
|
#define INVALID_SOCKET -1
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
typedef int64 Time;
|
||
|
|
||
|
/**
|
||
|
Elapsed time data type. Stores time in milliseconds from some arbitrary start epoch.
|
||
|
*/
|
||
|
typedef int64 Ticks;
|
||
|
|
||
|
/**
|
||
|
Time/Ticks units per second (milliseconds)
|
||
|
*/
|
||
|
#define TPS 1000
|
||
|
|
||
|
/*********************************** Defines **********************************/
|
||
|
|
||
|
#ifndef BITSPERBYTE
|
||
|
#define BITSPERBYTE ((int) (8 * sizeof(char)))
|
||
|
#endif
|
||
|
|
||
|
#ifndef BITS
|
||
|
#define BITS(type) ((int) (BITSPERBYTE * (int) sizeof(type)))
|
||
|
#endif
|
||
|
|
||
|
#if ME_FLOAT
|
||
|
#ifndef MAXFLOAT
|
||
|
#if ME_WIN_LIKE
|
||
|
#define MAXFLOAT DBL_MAX
|
||
|
#else
|
||
|
#define MAXFLOAT FLT_MAX
|
||
|
#endif
|
||
|
#endif
|
||
|
#if VXWORKS
|
||
|
#undef isnan
|
||
|
#define isnan(n) ((n) != (n))
|
||
|
#define isnanf(n) ((n) != (n))
|
||
|
#define isinf(n) ((n) == (1.0 / 0.0) || (n) == (-1.0 / 0.0))
|
||
|
#define isinff(n) ((n) == (1.0 / 0.0) || (n) == (-1.0 / 0.0))
|
||
|
#endif
|
||
|
#if ME_WIN_LIKE
|
||
|
#define isNan(f) (_isnan(f))
|
||
|
#elif VXWORKS || MACOSX || LINUX
|
||
|
#define isNan(f) (isnan(f))
|
||
|
#else
|
||
|
#define isNan(f) (fpclassify(f) == FP_NAN)
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if ME_WIN_LIKE
|
||
|
#define INT64(x) (x##i64)
|
||
|
#define UINT64(x) (x##Ui64)
|
||
|
#else
|
||
|
#define INT64(x) (x##LL)
|
||
|
#define UINT64(x) (x##ULL)
|
||
|
#endif
|
||
|
|
||
|
#ifndef MAXINT
|
||
|
#if INT_MAX
|
||
|
#define MAXINT INT_MAX
|
||
|
#else
|
||
|
#define MAXINT 0x7fffffff
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef MAXUINT
|
||
|
#if UINT_MAX
|
||
|
#define MAXUINT UINT_MAX
|
||
|
#else
|
||
|
#define MAXUINT 0xffffffff
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef MAXINT64
|
||
|
#define MAXINT64 INT64(0x7fffffffffffffff)
|
||
|
#endif
|
||
|
#ifndef MAXUINT64
|
||
|
#define MAXUINT64 INT64(0xffffffffffffffff)
|
||
|
#endif
|
||
|
|
||
|
#if SIZE_T_MAX
|
||
|
#define MAXSIZE SIZE_T_MAX
|
||
|
#elif ME_64
|
||
|
#define MAXSIZE INT64(0xffffffffffffffff)
|
||
|
#else
|
||
|
#define MAXSIZE MAXINT
|
||
|
#endif
|
||
|
|
||
|
#if SSIZE_T_MAX
|
||
|
#define MAXSSIZE SSIZE_T_MAX
|
||
|
#elif ME_64
|
||
|
#define MAXSSIZE INT64(0x7fffffffffffffff)
|
||
|
#else
|
||
|
#define MAXSSIZE MAXINT
|
||
|
#endif
|
||
|
|
||
|
#if OFF_T_MAX
|
||
|
#define MAXOFF OFF_T_MAX
|
||
|
#else
|
||
|
#define MAXOFF INT64(0x7fffffffffffffff)
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
Word size and conversions between integer and pointer.
|
||
|
*/
|
||
|
#if ME_64
|
||
|
#define ITOP(i) ((void*) ((int64) i))
|
||
|
#define PTOI(i) ((int) ((int64) i))
|
||
|
#define LTOP(i) ((void*) ((int64) i))
|
||
|
#define PTOL(i) ((int64) i)
|
||
|
#else
|
||
|
#define ITOP(i) ((void*) ((int) i))
|
||
|
#define PTOI(i) ((int) i)
|
||
|
#define LTOP(i) ((void*) ((int) i))
|
||
|
#define PTOL(i) ((int64) (int) i)
|
||
|
#endif
|
||
|
|
||
|
#undef PUBLIC
|
||
|
#undef PUBLIC_DATA
|
||
|
#undef PRIVATE
|
||
|
|
||
|
#if ME_WIN_LIKE
|
||
|
/*
|
||
|
Use PUBLIC on function declarations and definitions (*.c and *.h).
|
||
|
*/
|
||
|
#define PUBLIC __declspec(dllexport)
|
||
|
#define PUBLIC_DATA __declspec(dllexport)
|
||
|
#define PRIVATE static
|
||
|
#else
|
||
|
#define PUBLIC
|
||
|
#define PUBLIC_DATA extern
|
||
|
#define PRIVATE static
|
||
|
#endif
|
||
|
|
||
|
/* Undefines for Qt - Ugh */
|
||
|
#undef max
|
||
|
#undef min
|
||
|
|
||
|
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
||
|
#define min(a,b) (((a) < (b)) ? (a) : (b))
|
||
|
|
||
|
#ifndef PRINTF_ATTRIBUTE
|
||
|
#if ((__GNUC__ >= 3) && !DOXYGEN) || MACOSX
|
||
|
/**
|
||
|
Use gcc attribute to check printf fns. a1 is the 1-based index of the parameter containing the format,
|
||
|
and a2 the index of the first argument. Note that some gcc 2.x versions don't handle this properly
|
||
|
*/
|
||
|
#define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2)))
|
||
|
#else
|
||
|
#define PRINTF_ATTRIBUTE(a1, a2)
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
Optimize expression evaluation code depending if the value is likely or not
|
||
|
*/
|
||
|
#undef likely
|
||
|
#undef unlikely
|
||
|
#if (__GNUC__ >= 3)
|
||
|
#define likely(x) __builtin_expect(!!(x), 1)
|
||
|
#define unlikely(x) __builtin_expect(!!(x), 0)
|
||
|
#else
|
||
|
#define likely(x) (x)
|
||
|
#define unlikely(x) (x)
|
||
|
#endif
|
||
|
|
||
|
#if !__UCLIBC__ && !CYGWIN && __USE_XOPEN2K
|
||
|
#define ME_COMPILER_HAS_SPINLOCK 1
|
||
|
#endif
|
||
|
|
||
|
#if ME_COMPILER_HAS_DOUBLE_BRACES
|
||
|
#define NULL_INIT {{0}}
|
||
|
#else
|
||
|
#define NULL_INIT {0}
|
||
|
#endif
|
||
|
|
||
|
#ifdef __USE_FILE_OFFSET64
|
||
|
#define ME_COMPILER_HAS_OFF64 1
|
||
|
#else
|
||
|
#define ME_COMPILER_HAS_OFF64 0
|
||
|
#endif
|
||
|
|
||
|
#if ME_UNIX_LIKE
|
||
|
#define ME_COMPILER_HAS_FCNTL 1
|
||
|
#endif
|
||
|
|
||
|
#ifndef R_OK
|
||
|
#define R_OK 4
|
||
|
#define W_OK 2
|
||
|
#if ME_WIN_LIKE
|
||
|
#define X_OK R_OK
|
||
|
#else
|
||
|
#define X_OK 1
|
||
|
#endif
|
||
|
#define F_OK 0
|
||
|
#endif
|
||
|
|
||
|
#if MACOSX
|
||
|
#define LD_LIBRARY_PATH "DYLD_LIBRARY_PATH"
|
||
|
#else
|
||
|
#define LD_LIBRARY_PATH "LD_LIBRARY_PATH"
|
||
|
#endif
|
||
|
|
||
|
#if VXWORKS
|
||
|
/*
|
||
|
Old VxWorks can't do array[]
|
||
|
*/
|
||
|
#define ARRAY_FLEX 0
|
||
|
#else
|
||
|
#define ARRAY_FLEX
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
Deprecated API warnings
|
||
|
*/
|
||
|
#if ((__GNUC__ >= 3) || MACOSX) && !VXWORKS
|
||
|
#define ME_DEPRECATE(MSG) __attribute__ ((deprecated(MSG)))
|
||
|
#else
|
||
|
#define ME_DEPRECATE(MSG)
|
||
|
#endif
|
||
|
|
||
|
/********************************** Tunables *********************************/
|
||
|
/*
|
||
|
These can be defined in main.bit settings (pascal case) to override. E.g.
|
||
|
|
||
|
settings: {
|
||
|
maxPath: 4096
|
||
|
}
|
||
|
*/
|
||
|
#ifndef ME_MAX_FNAME
|
||
|
#define ME_MAX_FNAME 256 /**< Reasonable filename size */
|
||
|
#endif
|
||
|
#ifndef ME_MAX_PATH
|
||
|
#define ME_MAX_PATH 1024 /**< Reasonable filename size */
|
||
|
#endif
|
||
|
#ifndef ME_BUFSIZE
|
||
|
#define ME_BUFSIZE 4096 /**< Reasonable size for buffers */
|
||
|
#endif
|
||
|
#ifndef ME_MAX_BUFFER
|
||
|
#define ME_MAX_BUFFER ME_BUFSIZE /* DEPRECATE */
|
||
|
#endif
|
||
|
|
||
|
#ifndef ME_MAX_ARGC
|
||
|
#define ME_MAX_ARGC 32 /**< Maximum number of command line args if using MAIN()*/
|
||
|
#endif
|
||
|
#ifndef ME_DOUBLE_BUFFER
|
||
|
#define ME_DOUBLE_BUFFER (DBL_MANT_DIG - DBL_MIN_EXP + 4)
|
||
|
#endif
|
||
|
#ifndef ME_MAX_IP
|
||
|
#define ME_MAX_IP 1024
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#ifndef ME_STACK_SIZE
|
||
|
#if ME_COMPILER_HAS_MMU && !VXWORKS
|
||
|
/*
|
||
|
If the system supports virtual memory, then stack size should use system default. Only used pages will
|
||
|
actually consume memory
|
||
|
*/
|
||
|
#define ME_STACK_SIZE 0 /**< Default thread stack size (0 means use system default) */
|
||
|
#else
|
||
|
/*
|
||
|
No MMU, so the stack size actually consumes memory. Set this as low as possible.
|
||
|
NOTE: php and ejs use stack heavily.
|
||
|
*/
|
||
|
#define ME_STACK_SIZE (128 * 1024) /**< Default thread stack size (0 means use system default) */
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*********************************** Fixups ***********************************/
|
||
|
|
||
|
#ifndef ME_INLINE
|
||
|
#if ME_WIN_LIKE
|
||
|
#define ME_INLINE __inline
|
||
|
#else
|
||
|
#define ME_INLINE inline
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if ECOS
|
||
|
#define LIBKERN_INLINE /* to avoid kernel inline functions */
|
||
|
#endif /* ECOS */
|
||
|
|
||
|
#if ME_UNIX_LIKE || VXWORKS || TIDSP
|
||
|
#define FILE_TEXT ""
|
||
|
#define FILE_BINARY ""
|
||
|
#endif
|
||
|
|
||
|
#if !TIDSP
|
||
|
#define ME_COMPILER_HAS_MACRO_VARARGS 1
|
||
|
#else
|
||
|
#define ME_COMPILER_HAS_MACRO_VARARGS 1
|
||
|
#endif
|
||
|
|
||
|
#if ME_UNIX_LIKE
|
||
|
#define closesocket(x) close(x)
|
||
|
#ifndef PTHREAD_MUTEX_RECURSIVE_NP
|
||
|
#define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
|
||
|
#endif
|
||
|
#ifndef PTHREAD_MUTEX_RECURSIVE
|
||
|
#define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if !ME_WIN_LIKE && !CYGWIN
|
||
|
#ifndef O_BINARY
|
||
|
#define O_BINARY 0
|
||
|
#endif
|
||
|
#ifndef O_TEXT
|
||
|
#define O_TEXT 0
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if !LINUX
|
||
|
#define __WALL 0
|
||
|
#if !CYGWIN && !defined(MSG_NOSIGNAL)
|
||
|
#define MSG_NOSIGNAL 0
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if MACOSX
|
||
|
/*
|
||
|
Fix for MAC OS X - getenv
|
||
|
*/
|
||
|
#if !HAVE_DECL_ENVIRON
|
||
|
#ifdef __APPLE__
|
||
|
#include <crt_externs.h>
|
||
|
#define environ (*_NSGetEnviron())
|
||
|
#else
|
||
|
extern char **environ;
|
||
|
#endif
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if SOLARIS
|
||
|
#define INADDR_NONE ((in_addr_t) 0xffffffff)
|
||
|
#endif
|
||
|
|
||
|
#if VXWORKS
|
||
|
#ifndef SHUT_RDWR
|
||
|
#define SHUT_RDWR 2
|
||
|
#endif
|
||
|
#define HAVE_SOCKLEN_T
|
||
|
#if _DIAB_TOOL
|
||
|
#define inline __inline__
|
||
|
#define MPR_INLINE __inline__
|
||
|
#endif
|
||
|
#ifndef closesocket
|
||
|
#define closesocket(x) close(x)
|
||
|
#endif
|
||
|
#ifndef va_copy
|
||
|
#define va_copy(d, s) ((d) = (s))
|
||
|
#endif
|
||
|
#ifndef strcasecmp
|
||
|
#define strcasecmp scaselesscmp
|
||
|
#endif
|
||
|
#ifndef strncasecmp
|
||
|
#define strncasecmp sncaselesscmp
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#if ME_WIN_LIKE
|
||
|
typedef int uid_t;
|
||
|
typedef void *handle;
|
||
|
typedef char *caddr_t;
|
||
|
typedef long pid_t;
|
||
|
typedef int gid_t;
|
||
|
typedef ushort mode_t;
|
||
|
typedef void *siginfo_t;
|
||
|
typedef int socklen_t;
|
||
|
|
||
|
#define HAVE_SOCKLEN_T
|
||
|
#define MSG_NOSIGNAL 0
|
||
|
#define FILE_BINARY "b"
|
||
|
#define FILE_TEXT "t"
|
||
|
|
||
|
/*
|
||
|
Error codes
|
||
|
*/
|
||
|
#define EPERM 1
|
||
|
#define ENOENT 2
|
||
|
#define ESRCH 3
|
||
|
#define EINTR 4
|
||
|
#define EIO 5
|
||
|
#define ENXIO 6
|
||
|
#define E2BIG 7
|
||
|
#define ENOEXEC 8
|
||
|
#define EBADF 9
|
||
|
#define ECHILD 10
|
||
|
#define EAGAIN 11
|
||
|
#define ENOMEM 12
|
||
|
#define EACCES 13
|
||
|
#define EFAULT 14
|
||
|
#define EOSERR 15
|
||
|
#define EBUSY 16
|
||
|
#define EEXIST 17
|
||
|
#define EXDEV 18
|
||
|
#define ENODEV 19
|
||
|
#define ENOTDIR 20
|
||
|
#define EISDIR 21
|
||
|
#define EINVAL 22
|
||
|
#define ENFILE 23
|
||
|
#define EMFILE 24
|
||
|
#define ENOTTY 25
|
||
|
#define EFBIG 27
|
||
|
#define ENOSPC 28
|
||
|
#define ESPIPE 29
|
||
|
#define EROFS 30
|
||
|
#define EMLINK 31
|
||
|
#define EPIPE 32
|
||
|
#define EDOM 33
|
||
|
#define ERANGE 34
|
||
|
|
||
|
#ifndef EWOULDBLOCK
|
||
|
#define EWOULDBLOCK EAGAIN
|
||
|
#define EINPROGRESS 36
|
||
|
#define EALREADY 37
|
||
|
#define ENETDOWN 43
|
||
|
#define ECONNRESET 44
|
||
|
#define ECONNREFUSED 45
|
||
|
#define EADDRNOTAVAIL 49
|
||
|
#define EISCONN 56
|
||
|
#define EADDRINUSE 46
|
||
|
#define ENETUNREACH 51
|
||
|
#define ECONNABORTED 53
|
||
|
#endif
|
||
|
#ifndef ENOTCONN
|
||
|
#define ENOTCONN 126
|
||
|
#endif
|
||
|
#ifndef EPROTO
|
||
|
#define EPROTO 134
|
||
|
#endif
|
||
|
|
||
|
#undef SHUT_RDWR
|
||
|
#define SHUT_RDWR 2
|
||
|
|
||
|
#define TIME_GENESIS UINT64(11644473600000000)
|
||
|
#ifndef va_copy
|
||
|
#define va_copy(d, s) ((d) = (s))
|
||
|
#endif
|
||
|
|
||
|
#if !WINCE
|
||
|
#define access _access
|
||
|
#define chdir _chdir
|
||
|
#define chmod _chmod
|
||
|
#define close _close
|
||
|
#define fileno _fileno
|
||
|
#define fstat _fstat
|
||
|
#define getcwd _getcwd
|
||
|
#define getpid _getpid
|
||
|
#define gettimezone _gettimezone
|
||
|
#define lseek _lseek
|
||
|
#define mkdir(a,b) _mkdir(a)
|
||
|
#define open _open
|
||
|
#define putenv _putenv
|
||
|
#define read _read
|
||
|
#define rmdir(a) _rmdir(a)
|
||
|
#define stat _stat
|
||
|
#define strdup _strdup
|
||
|
#define tempnam _tempnam
|
||
|
#define umask _umask
|
||
|
#define unlink _unlink
|
||
|
#define write _write
|
||
|
PUBLIC void sleep(int secs);
|
||
|
#endif
|
||
|
#define strcasecmp scaselesscmp
|
||
|
#define strncasecmp sncaselesscmp
|
||
|
#pragma comment( lib, "ws2_32.lib" )
|
||
|
#endif /* WIN_LIKE */
|
||
|
|
||
|
#if WINCE
|
||
|
typedef void FILE;
|
||
|
typedef int off_t;
|
||
|
|
||
|
#ifndef EOF
|
||
|
#define EOF -1
|
||
|
#endif
|
||
|
#define O_RDONLY 0
|
||
|
#define O_WRONLY 1
|
||
|
#define O_RDWR 2
|
||
|
#define O_NDELAY 0x4
|
||
|
#define O_NONBLOCK 0x4
|
||
|
#define O_APPEND 0x8
|
||
|
#define O_CREAT 0x100
|
||
|
#define O_TRUNC 0x200
|
||
|
#define O_TEXT 0x400
|
||
|
#define O_EXCL 0x800
|
||
|
#define O_BINARY 0x1000
|
||
|
/*
|
||
|
stat flags
|
||
|
*/
|
||
|
#define S_IFMT 0170000
|
||
|
#define S_IFDIR 0040000
|
||
|
#define S_IFCHR 0020000 /* character special */
|
||
|
#define S_IFIFO 0010000
|
||
|
#define S_IFREG 0100000
|
||
|
#define S_IREAD 0000400
|
||
|
#define S_IWRITE 0000200
|
||
|
#define S_IEXEC 0000100
|
||
|
|
||
|
#ifndef S_ISDIR
|
||
|
#define S_ISDIR(X) (((X) & S_IFMT) == S_IFDIR)
|
||
|
#endif
|
||
|
#ifndef S_ISREG
|
||
|
#define S_ISREG(X) (((X) & S_IFMT) == S_IFREG)
|
||
|
#endif
|
||
|
|
||
|
#define STARTF_USESHOWWINDOW 0
|
||
|
#define STARTF_USESTDHANDLES 0
|
||
|
|
||
|
#define BUFSIZ ME_BUFSIZE
|
||
|
#define PATHSIZE ME_MAX_PATH
|
||
|
#define gethostbyname2(a,b) gethostbyname(a)
|
||
|
#pragma comment( lib, "ws2.lib" )
|
||
|
#endif /* WINCE */
|
||
|
|
||
|
#if TIDSP
|
||
|
#define EINTR 4
|
||
|
#define EAGAIN 11
|
||
|
#define INADDR_NONE 0xFFFFFFFF
|
||
|
#define PATHSIZE ME_MAX_PATH
|
||
|
#define NBBY 8
|
||
|
#define hostent _hostent
|
||
|
#define NFDBITS ((int) (sizeof(fd_mask) * NBBY))
|
||
|
typedef long fd_mask;
|
||
|
typedef int Socklen;
|
||
|
struct sockaddr_storage { char pad[1024]; };
|
||
|
#endif /* TIDSP */
|
||
|
|
||
|
#ifndef NBBY
|
||
|
#define NBBY 8
|
||
|
#endif
|
||
|
|
||
|
/*********************************** Externs **********************************/
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#if LINUX
|
||
|
extern int pthread_mutexattr_gettype (__const pthread_mutexattr_t *__restrict __attr, int *__restrict __kind);
|
||
|
extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind);
|
||
|
extern char **environ;
|
||
|
#endif
|
||
|
|
||
|
#if VXWORKS
|
||
|
#if _WRS_VXWORKS_MAJOR < 6 || (_WRS_VXWORKS_MAJOR == 6 && _WRS_VXWORKS_MINOR < 9)
|
||
|
PUBLIC int gettimeofday(struct timeval *tv, struct timezone *tz);
|
||
|
#endif
|
||
|
PUBLIC char *strdup(const char *);
|
||
|
PUBLIC int sysClkRateGet();
|
||
|
|
||
|
#if _WRS_VXWORKS_MAJOR < 6
|
||
|
#define NI_MAXHOST 128
|
||
|
extern STATUS access(cchar *path, int mode);
|
||
|
typedef int socklen_t;
|
||
|
struct sockaddr_storage {
|
||
|
char pad[1024];
|
||
|
};
|
||
|
#else
|
||
|
/*
|
||
|
This may or may not be necessary - let us know dev@embedthis.com if your system needs this (and why).
|
||
|
*/
|
||
|
#if _DIAB_TOOL
|
||
|
#if ME_CPU_ARCH == ME_CPU_PPC
|
||
|
#define __va_copy(dest, src) memcpy((dest), (src), sizeof(va_list))
|
||
|
#endif
|
||
|
#endif
|
||
|
#define HAVE_SOCKLEN_T
|
||
|
#endif
|
||
|
#endif /* VXWORKS */
|
||
|
|
||
|
#if ME_WIN_LIKE
|
||
|
struct timezone {
|
||
|
int tz_minuteswest; /* minutes W of Greenwich */
|
||
|
int tz_dsttime; /* type of dst correction */
|
||
|
};
|
||
|
PUBLIC int getuid(void);
|
||
|
PUBLIC int geteuid(void);
|
||
|
PUBLIC int gettimeofday(struct timeval *tv, struct timezone *tz);
|
||
|
PUBLIC long lrand48(void);
|
||
|
PUBLIC long nap(long);
|
||
|
PUBLIC void srand48(long);
|
||
|
PUBLIC long ulimit(int, ...);
|
||
|
#endif
|
||
|
|
||
|
#if WINCE
|
||
|
struct stat {
|
||
|
int st_dev;
|
||
|
int st_ino;
|
||
|
ushort st_mode;
|
||
|
short st_nlink;
|
||
|
short st_uid;
|
||
|
short st_gid;
|
||
|
int st_rdev;
|
||
|
long st_size;
|
||
|
time_t st_atime;
|
||
|
time_t st_mtime;
|
||
|
time_t st_ctime;
|
||
|
};
|
||
|
extern int access(cchar *filename, int flags);
|
||
|
extern int chdir(cchar dirname);
|
||
|
extern int chmod(cchar *path, int mode);
|
||
|
extern int close(int handle);
|
||
|
extern void exit(int status);
|
||
|
extern long _get_osfhandle(int handle);
|
||
|
extern char *getcwd(char* buffer, int maxlen);
|
||
|
extern char *getenv(cchar *charstuff);
|
||
|
extern pid_t getpid();
|
||
|
extern long lseek(int handle, long offset, int origin);
|
||
|
extern int mkdir(cchar *dir, int mode);
|
||
|
extern time_t mktime(struct tm *pt);
|
||
|
extern int _open_osfhandle(int *handle, int flags);
|
||
|
extern uint open(cchar *file, int mode,...);
|
||
|
extern int read(int handle, void *buffer, uint count);
|
||
|
extern int rename(cchar *from, cchar *to);
|
||
|
extern int rmdir(cchar dir);
|
||
|
extern uint sleep(uint secs);
|
||
|
extern int stat(cchar *path, struct stat *stat);
|
||
|
extern char *strdup(char *s);
|
||
|
extern int write(int handle, cvoid *buffer, uint count);
|
||
|
extern int umask(int mode);
|
||
|
extern int unlink(cchar *path);
|
||
|
extern int errno;
|
||
|
|
||
|
#undef CreateFile
|
||
|
#define CreateFile CreateFileA
|
||
|
WINBASEAPI HANDLE WINAPI CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode,
|
||
|
LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
|
||
|
HANDLE hTemplateFile);
|
||
|
|
||
|
#undef CreateProcess
|
||
|
#define CreateProcess CreateProcessA
|
||
|
|
||
|
#undef FindFirstFile
|
||
|
#define FindFirstFile FindFirstFileA
|
||
|
WINBASEAPI HANDLE WINAPI FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData);
|
||
|
|
||
|
#undef FindNextFile
|
||
|
#define FindNextFile FindNextFileA
|
||
|
WINBASEAPI BOOL WINAPI FindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData);
|
||
|
|
||
|
#undef GetModuleFileName
|
||
|
#define GetModuleFileName GetModuleFileNameA
|
||
|
WINBASEAPI DWORD WINAPI GetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize);
|
||
|
|
||
|
#undef GetModuleHandle
|
||
|
#define GetModuleHandle GetModuleHandleA
|
||
|
WINBASEAPI HMODULE WINAPI GetModuleHandleA(LPCSTR lpModuleName);
|
||
|
|
||
|
#undef GetProcAddress
|
||
|
#define GetProcAddress GetProcAddressA
|
||
|
|
||
|
#undef GetFileAttributes
|
||
|
#define GetFileAttributes GetFileAttributesA
|
||
|
extern DWORD GetFileAttributesA(cchar *path);
|
||
|
|
||
|
extern void GetSystemTimeAsFileTime(FILETIME *ft);
|
||
|
|
||
|
#undef LoadLibrary
|
||
|
#define LoadLibrary LoadLibraryA
|
||
|
HINSTANCE WINAPI LoadLibraryA(LPCSTR lpLibFileName);
|
||
|
|
||
|
#define WSAGetLastError GetLastError
|
||
|
|
||
|
#define _get_timezone getTimezone
|
||
|
extern int getTimezone(int *secs);
|
||
|
|
||
|
extern struct tm *localtime_r(const time_t *when, struct tm *tp);
|
||
|
extern struct tm *gmtime_r(const time_t *t, struct tm *tp);
|
||
|
#endif /* WINCE */
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* _h_OSDEP */
|
||
|
|
||
|
/*
|
||
|
Copyright (c) Michael O'Brien. All Rights Reserved.
|
||
|
This is proprietary software and requires a commercial license from the author.
|
||
|
*/
|