]> wimlib.net Git - wimlib/blobdiff - wimlib_tchar.h
Char encoding updates and misc. fixes
[wimlib] / wimlib_tchar.h
diff --git a/wimlib_tchar.h b/wimlib_tchar.h
new file mode 100644 (file)
index 0000000..75f8e81
--- /dev/null
@@ -0,0 +1,111 @@
+#ifndef _WIMLIB_TCHAR_H
+#define _WIMLIB_TCHAR_H
+
+/* Functions to act on "tchar" strings, which have a platform-dependent encoding
+ * and character size. */
+
+#ifdef __WIN32__
+#include <wchar.h>
+/* 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. */
+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 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 tstrcpy      wcscpy
+#  define tprintf      wprintf
+#  define tsprintf     swprintf
+#  define tfprintf     fwprintf
+#  define tvfprintf    vfwprintf
+#  define istalpha     iswalpha
+#  define istspace     iswspace
+#  define tstrcmp      wcscmp
+#  define tstrchr      wcschr
+#  define tstrpbrk     wcspbrk
+#  define tstrrchr     wcsrchr
+#  define tstrlen      wcslen
+#  define tmemcmp      wmemcmp
+#  define tstrcasecmp   _wcsicmp
+#  define tstrftime    wcsftime
+#  define tputchar     putwchar
+#  define tputc                putwc
+#  define tputs                _putws
+#  define tfputs       fputws
+#  define tfopen       _wfopen
+#  define tstat                _wstati64
+#  define tstrtol      wcstol
+#  define tstrtod      wcstod
+#  define tstrtoul     wcstoul
+#  define tunlink      _wunlink
+#  define tstrerror    _wcserror
+#  define taccess      _waccess
+/* 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      WSTRDUP
+#  define tmkdir(path, mode) _wmkdir(path)
+#  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. */
+typedef char tchar;
+#  define TCHAR_IS_UTF16LE 0
+#  define T(text) text /* In this case, strings of "tchar" are simply strings of
+                         char */
+#  define TS "s"       /* Similarly, a string of "tchar" is printed just as a
+                         normal string. */
+#  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 tstrcpy      strcpy
+#  define tprintf      printf
+#  define tsprintf     sprintf
+#  define tfprintf     fprintf
+#  define tvfprintf    vfprintf
+#  define istalpha     isalpha
+#  define istspace     isspace
+#  define tstrcmp      strcmp
+#  define tstrchr      strchr
+#  define tstrpbrk     strpbrk
+#  define tstrrchr     strrchr
+#  define tstrlen      strlen
+#  define tmemcmp      memcmp
+#  define tstrcasecmp   strcasecmp
+#  define tstrftime    strftime
+#  define tputchar     putchar
+#  define tputc                putc
+#  define tputs                puts
+#  define tfputs       fputs
+#  define tfopen       fopen
+#  define tstat                stat
+#  define tunlink      unlink
+#  define tstrerror    strerror
+#  define tstrtol      strtol
+#  define tstrtod      strtod
+#  define tstrtoul     strtoul
+#  define tmkdir       mkdir
+#  define TSTRDUP      STRDUP
+#  define tstrerror_r  strerror_r
+#  define trename      rename
+#  define ttruncate    truncate
+#  define taccess      access
+#endif /* !__WIN32__ */
+
+#endif /* _WIMLIB_TCHAR_H */