X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=include%2Fwimlib_tchar.h;h=2585fa660b8183fe246370cd75f90a8d2db79358;hb=refs%2Fheads%2Fmaster;hp=f0b17f01e51d06feda1f35b270994e1226a168c7;hpb=14cf34971b351167d88adb009051a3513e627f32;p=wimlib diff --git a/include/wimlib_tchar.h b/include/wimlib_tchar.h index f0b17f01..781f370c 100644 --- a/include/wimlib_tchar.h +++ b/include/wimlib_tchar.h @@ -4,35 +4,42 @@ /* Functions to act on "tchar" strings, which have a platform-dependent encoding * and character size. */ -#ifdef __WIN32__ +#ifdef _WIN32 #include -/* For Windows builds, the "tchar" type will be 2 bytes and will be equivalent - * to "wchar_t" and "utf16lechar". All indicate one code unit of a UTF16-LE - * string. */ +/* + * For Windows builds, the "tchar" type will be 2 bytes and will be equivalent + * to "wchar_t" and "utf16lechar". All indicate one coding unit of a string + * encoded in UTF-16LE with the additional possibility of unpaired surrogates. + */ typedef wchar_t tchar; # define TCHAR_IS_UTF16LE 1 # define _T(text) L##text # define T(text) _T(text) /* Make a string literal into a wide string */ # define TS "ls" /* Format a string of "tchar" */ # define TC "lc" /* Format a "tchar" */ -# define WS "ls" /* Format a UTF-16LE string (same as above) */ /* For Windows builds, the following definitions replace the "tchar" functions * with the "wide-character" functions. */ # define tmemchr wmemchr # define tmemcpy wmemcpy +# define tmemmove wmemmove # define tmempcpy wmempcpy +# define tstrcat wcscat # define tstrcpy wcscpy # define tprintf wprintf # define tsprintf swprintf # define tfprintf fwprintf # define tvfprintf vfwprintf -# define istalpha iswalpha -# define istspace iswspace +# define tscanf swscanf +# define istalpha(c) iswalpha((wchar_t)(c)) +# define istspace(c) iswspace((wchar_t)(c)) +# define totlower(c) towlower((wchar_t)(c)) # define tstrcmp wcscmp +# define tstrncmp wcsncmp # define tstrchr wcschr # define tstrpbrk wcspbrk # define tstrrchr wcsrchr +# define tstrstr wcsstr # define tstrlen wcslen # define tmemcmp wmemcmp # define tstrcasecmp _wcsicmp @@ -47,22 +54,27 @@ typedef wchar_t tchar; # define tstrtol wcstol # define tstrtod wcstod # define tstrtoul wcstoul +# define tstrtoull wcstoull # define tunlink _wunlink # define tstrerror _wcserror # define taccess _waccess # define tstrdup wcsdup +# define tgetenv _wgetenv /* The following "tchar" functions do not have exact wide-character equivalents * on Windows so require parameter rearrangement or redirection to a replacement * function defined ourselves. */ # define TSTRDUP WCSDUP # define tmkdir(path, mode) _wmkdir(path) -# define tstrerror_r win32_strerror_r_replacement +# define tstrerror_r(errnum, buf, bufsize) \ + _wcserror_s((buf), (bufsize), (errnum)) # define trename win32_rename_replacement -# define ttruncate win32_truncate_replacement -#else /* __WIN32__ */ -/* For non-Windows builds, the "tchar" type will be one byte and will specify a - * string in the locale-dependent multibyte encoding. However, only UTF-8 is - * well supported in this library. */ +# define tglob win32_wglob +#else /* _WIN32 */ +/* + * For non-Windows builds, the "tchar" type will be one byte and will specify a + * string encoded in UTF-8 with the additional possibility of surrogate + * codepoints. + */ typedef char tchar; # define TCHAR_IS_UTF16LE 0 # define T(text) text /* In this case, strings of "tchar" are simply strings of @@ -70,27 +82,28 @@ typedef char tchar; # define TS "s" /* Similarly, a string of "tchar" is printed just as a normal string. */ # define TC "c" /* Print a single character */ -# define WS "W" /* UTF-16LE strings must be printed using a special - extension implemented by wimlib itself. Note that - "ls" will not work here because a string of wide - characters on non-Windows systems is typically not - UTF-16LE. */ /* For non-Windows builds, replace the "tchar" functions with the regular old * string functions. */ # define tmemchr memchr # define tmemcpy memcpy +# define tmemmove memmove # define tmempcpy mempcpy +# define tstrcat strcat # define tstrcpy strcpy # define tprintf printf # define tsprintf sprintf # define tfprintf fprintf # define tvfprintf vfprintf -# define istalpha isalpha -# define istspace isspace +# define tscanf sscanf +# define istalpha(c) isalpha((unsigned char)(c)) +# define istspace(c) isspace((unsigned char)(c)) +# define totlower(c) tolower((unsigned char)(c)) # define tstrcmp strcmp +# define tstrncmp strncmp # define tstrchr strchr # define tstrpbrk strpbrk # define tstrrchr strrchr +# define tstrstr strstr # define tstrlen strlen # define tmemcmp memcmp # define tstrcasecmp strcasecmp @@ -107,13 +120,15 @@ typedef char tchar; # define tstrtol strtol # define tstrtod strtod # define tstrtoul strtoul +# define tstrtoull strtoull # define tmkdir mkdir # define tstrdup strdup +# define tgetenv getenv # define TSTRDUP STRDUP # define tstrerror_r strerror_r # define trename rename -# define ttruncate truncate # define taccess access -#endif /* !__WIN32__ */ +# define tglob glob +#endif /* !_WIN32 */ #endif /* _WIMLIB_TCHAR_H */