X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=platform%2Fposix%2Finternals%2F_PDCLIB_config.h;h=ae30e0a3622f4757cc17ba8a35c7ab0573265c7a;hb=37f62a3ac31302556f0cdad12b2250a6fc7872f1;hp=314eed5f52fec6085e688866f847779c14a3421a;hpb=86e885d620860db125684fb0ab4d084891227a62;p=pdclib diff --git a/platform/posix/internals/_PDCLIB_config.h b/platform/posix/internals/_PDCLIB_config.h index 314eed5..ae30e0a 100644 --- a/platform/posix/internals/_PDCLIB_config.h +++ b/platform/posix/internals/_PDCLIB_config.h @@ -62,6 +62,9 @@ #endif #define _PDCLIB_LLONG_BYTES 8 +// Match Darwin headers +#define _PDCLIB_INT64_IS_LLONG + /* defines the div() function family that allows taking quotient */ /* and remainder of an integer division in one operation. Many platforms */ /* support this in hardware / opcode, and the standard permits ordering of */ @@ -118,9 +121,15 @@ struct _PDCLIB_lldiv_t #define _PDCLIB_fast32 int #define _PDCLIB_FAST32_CONV +#ifdef __LP64__ +#define _PDCLIB_FAST64 LONG +#define _PDCLIB_fast64 long +#define _PDCLIB_FAST64_CONV l +#else #define _PDCLIB_FAST64 LLONG #define _PDCLIB_fast64 long long #define _PDCLIB_FAST64_CONV ll +#endif /* -------------------------------------------------------------------------- */ /* What follows are a couple of "special" typedefs and their limits. Again, */ @@ -147,9 +156,9 @@ struct _PDCLIB_lldiv_t /* Large enough an integer to hold all character codes of the largest supported locale. */ -#define _PDCLIB_wint signed int -#define _PDCLIB_wchar unsigned int -#define _PDCLIB_WCHAR UINT +#define _PDCLIB_wint int +#define _PDCLIB_wchar int +#define _PDCLIB_WCHAR INT #define _PDCLIB_intptr long #define _PDCLIB_INTPTR LONG @@ -170,30 +179,30 @@ struct _PDCLIB_imaxdiv_t _PDCLIB_intmax rem; }; -/* : time_t - * The C standard doesn't define what representation of time is stored in +/* : time_t + * The C standard doesn't define what representation of time is stored in * time_t when returned by time() , but POSIX defines it to be seconds since the - * UNIX epoch and most appplications expect that. + * UNIX epoch and most appplications expect that. * - * time_t is also used as the tv_sec member of struct timespec, which *is* + * time_t is also used as the tv_sec member of struct timespec, which *is* * defined as a linear count of seconds. * * time_t is defined as a "real type", so may be a floating point type, but with * the presence of the nanosecond accurate struct timespec, and with the lack of - * any functions for manipulating more accurate values of time_t, this is + * any functions for manipulating more accurate values of time_t, this is * probably not useful. */ -#define _PDCLIB_time unsigned long long +#define _PDCLIB_time long /* : clock_t * * A count of "clock ticks", where the length of a clock tick is unspecified by - * the standard. The implementation is required to provide a macro, + * the standard. The implementation is required to provide a macro, * CLOCKS_PER_SEC, which is the number of "clock ticks" which corresponds to one * second. * * clock_t may be any real type (i.e. integral or floating), and its type on - * various systems differs. + * various systems differs. * * On XSI systems, CLOCKS_PER_SEC must be defined to 1000000 */ @@ -204,8 +213,8 @@ struct _PDCLIB_imaxdiv_t * * The TIME_UTC parameter is passed to the timespec_get function in order to get * the system time in UTC since an implementation defined epoch (not necessarily - * the same as that used for time_t). That said, on POSIX the obvious - * implementation of timespec_get for TIME_UTC is to wrap + * the same as that used for time_t). That said, on POSIX the obvious + * implementation of timespec_get for TIME_UTC is to wrap * clock_gettime(CLOCK_REALTIME, ...), which is defined as time in UTC since the * same epoch. * @@ -319,6 +328,14 @@ struct _PDCLIB_imaxdiv_t /* TODO: Better document these */ +/* Locale --------------------------------------------------------------------*/ + +/* Locale method. See _PDCLIB_locale.h */ +#define _PDCLIB_LOCALE_METHOD _PDCLIB_LOCALE_METHOD_TSS + +/* wchar_t encoding */ +#define _PDCLIB_WCHAR_ENCODING _PDCLIB_WCHAR_ENCODING_UCS4 + /* I/O ---------------------------------------------------------------------- */ /* The default size for file buffers. Must be at least 256. */ @@ -354,121 +371,4 @@ struct _PDCLIB_imaxdiv_t */ #define _PDCLIB_UNGETCBUFSIZE 1 -/* errno -------------------------------------------------------------------- */ - -/* These are the values that _PDCLIB_errno can be set to by the library. - - By keeping PDCLib's errno in the _PDCLIB_* namespace, the library is capable - to "translate" between errno values used by the hosting operating system and - those used and passed out by the library. - - Example: In the example platform, the remove() function uses the unlink() - system call as backend. Linux sets its errno to EISDIR if you try to unlink() - a directory, but POSIX demands EPERM. Within the remove() function, you can - catch the 'errno == EISDIR', and set '_PDCLIB_errno = _PDCLIB_EPERM'. Anyone - using PDCLib's will "see" EPERM instead of EISDIR (the _PDCLIB_* - prefix removed by mechanics). - - If you do not want that kind of translation, you might want to "match" the - values used by PDCLib with those used by the host OS, as to avoid confusion. - - The C standard only defines three distinct errno values: ERANGE, EDOM, and - EILSEQ. The standard leaves it up to "the implementation" whether there are - any more beyond those three. There is some controversy as to whether errno is - such a good idea at all, so you might want to come up with a different error - reporting facility for your platform. - - Things used to say "Since errno values beyond the three defined by the - standard are not portable anyway (unless you look at POSIX), having your own - error reporting facility would not hurt anybody either." at this point. - However, then somebody birthed C++11 into the world, which copied POSIX's - errno values into C++. Yes, even EINTR. Therefore, this library defines - them. That said, thats nothing stopping you from using your own error - reporting facility for things outside the C library. - - Sometimes the standard says to set errno to indicate an error, but does not - prescribe a value. We will use a value from the following list. If POSIX - defines a value, we use that; otherwise, we use as seems suitable. - - If porting to a system which uses an errno-like reporting system (e.g. a - UNIX), you'll probably want to define them to match what the OS uses -*/ -/* C errno values */ -#define _PDCLIB_ERANGE 1 -#define _PDCLIB_EDOM 2 -#define _PDCLIB_EILSEQ 3 - -/* C++11/POSIX errno values */ -#define _PDCLIB_E2BIG 4 -#define _PDCLIB_ECONNRESET 5 -#define _PDCLIB_EISCONN 6 -#define _PDCLIB_ENOENT 7 -#define _PDCLIB_ENOTRECOVERABLE 8 -#define _PDCLIB_EROFS 9 -#define _PDCLIB_EACCES 10 -#define _PDCLIB_EDEADLK 11 -#define _PDCLIB_EISDIR 12 -#define _PDCLIB_ENOEXEC 13 -#define _PDCLIB_ENOTSOCK 14 -#define _PDCLIB_ESPIPE 15 -#define _PDCLIB_EADDRINUSE 16 -#define _PDCLIB_EDESTADDRREQ 17 -#define _PDCLIB_ELOOP 18 -#define _PDCLIB_ENOLCK 19 -#define _PDCLIB_ENOTSUPP 20 -#define _PDCLIB_ESRCH 21 -#define _PDCLIB_EADDRNOTAVAIL 22 -#define _PDCLIB_EMFILE 23 -#define _PDCLIB_ENOLINK 24 -#define _PDCLIB_ENOTTY 25 -#define _PDCLIB_ETIME 26 -#define _PDCLIB_EAFNOSUPPORT 27 -#define _PDCLIB_EEXIST 28 -#define _PDCLIB_EMLINK 29 -#define _PDCLIB_ENOMEM 30 -#define _PDCLIB_ENXIO 31 -#define _PDCLIB_ETIMEDOUT 32 -#define _PDCLIB_EAGAIN 33 -#define _PDCLIB_EFAULT 34 -#define _PDCLIB_EMSGSIZE 35 -#define _PDCLIB_ENOMSG 36 -#define _PDCLIB_EOPNOTSUPP 37 -#define _PDCLIB_ETXTBSY 38 -#define _PDCLIB_EALREADY 39 -#define _PDCLIB_EFBIG 40 -#define _PDCLIB_ENAMETOOLONG 41 -#define _PDCLIB_ENOPROTOOPT 42 -#define _PDCLIB_EOVERFLOW 43 -#define _PDCLIB_EWOULDBLOCK _PDCLIB_EAGAIN -#define _PDCLIB_EBADF 44 -#define _PDCLIB_EHOSTUNREACH 45 -#define _PDCLIB_ENETDOWN 46 -#define _PDCLIB_ENOSPC 47 -#define _PDCLIB_EOWNERDEAD 48 -#define _PDCLIB_EXDEV 49 -#define _PDCLIB_EBADMSG 50 -#define _PDCLIB_EIDRM 51 -#define _PDCLIB_ENETRESET 52 -#define _PDCLIB_ENOSR 53 -#define _PDCLIB_EPERM 54 -#define _PDCLIB_EBUSY 55 -#define _PDCLIB_ENETUNREACH 56 -#define _PDCLIB_ENOSTR 57 -#define _PDCLIB_EPIPE 58 -#define _PDCLIB_ECANCELED 59 -#define _PDCLIB_EINPROGRESS 60 -#define _PDCLIB_ENFILE 61 -#define _PDCLIB_ENOSYS 62 -#define _PDCLIB_EPROTO 63 -#define _PDCLIB_ECHILD 64 -#define _PDCLIB_EINTR 65 -#define _PDCLIB_ENOBUFS 66 -#define _PDCLIB_ENOTCONN 67 -#define _PDCLIB_EPROTONOSUPPORT 68 -#define _PDCLIB_ECONNABORTED 69 -#define _PDCLIB_EINVAL 70 -#define _PDCLIB_ENODATA 71 -#define _PDCLIB_ENOTDIR 72 -#define _PDCLIB_EPROTOTYPE 73 - #endif