summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/include/includes.h13
-rw-r--r--source3/lib/util_unistr.c56
-rw-r--r--source3/script/makeunicodecasemap.awk2
3 files changed, 70 insertions, 1 deletions
diff --git a/source3/include/includes.h b/source3/include/includes.h
index 0e8505daec..0dd12bc989 100644
--- a/source3/include/includes.h
+++ b/source3/include/includes.h
@@ -672,6 +672,13 @@ typedef struct smb_wpasswd {
wpstring pw_shell;
} SMB_STRUCT_WPASSWD;
+/* Defines for wisXXX functions. */
+#define UNI_UPPER 0x1
+#define UNI_LOWER 0x2
+#define UNI_DIGIT 0x4
+#define UNI_XDIGIT 0x8
+#define UNI_SPACE 0x10
+
/***** automatically generated prototypes *****/
#include "proto.h"
@@ -695,6 +702,12 @@ typedef struct smb_wpasswd {
#define fstrcpy(d,s) safe_strcpy((d),(s),sizeof(fstring)-1)
#define fstrcat(d,s) safe_strcat((d),(s),sizeof(fstring)-1)
+/* smb_ucs2_t versions of the above. */
+#define wpstrcpy(d,s) safe_wstrcpy((d),(s),sizeof(wpstring))
+#define wpstrcat(d,s) safe_wstrcat((d),(s),sizeof(wpstring))
+#define wfstrcpy(d,s) safe_wstrcpy((d),(s),sizeof(wfstring))
+#define wfstrcat(d,s) safe_wstrcat((d),(s),sizeof(wfstring))
+
#ifdef __COMPAR_FN_T
#define QSORT_CAST (__compar_fn_t)
#endif
diff --git a/source3/lib/util_unistr.c b/source3/lib/util_unistr.c
index cdeaefce7a..486091a8b5 100644
--- a/source3/lib/util_unistr.c
+++ b/source3/lib/util_unistr.c
@@ -905,3 +905,59 @@ smb_ucs2_t *wstrdup(const smb_ucs2_t *s)
safe_wstrcpy(newstr, s, newlen);
return newstr;
}
+
+/*******************************************************************
+ Mapping tables for UNICODE character. Allows toupper/tolower and
+ isXXX functions to work.
+********************************************************************/
+
+typedef struct {
+ smb_ucs2_t lower;
+ smb_ucs2_t upper;
+ unsigned char flags;
+} smb_unicode_table_t;
+
+static smb_unicode_table_t map_table[] = {
+#include "unicode_map_table.h"
+};
+
+/*******************************************************************
+ Is an upper case wchar.
+********************************************************************/
+
+int wisupper( smb_ucs2_t val)
+{
+ return (map_table[val].flags & UNI_UPPER);
+}
+/*******************************************************************
+ Is a lower case wchar.
+********************************************************************/
+
+int wislower( smb_ucs2_t val)
+{
+ return (map_table[val].flags & UNI_LOWER);
+}
+/*******************************************************************
+ Is a digit wchar.
+********************************************************************/
+
+int wisdigit( smb_ucs2_t val)
+{
+ return (map_table[val].flags & UNI_DIGIT);
+}
+/*******************************************************************
+ Is a hex digit wchar.
+********************************************************************/
+
+int wisxdigit( smb_ucs2_t val)
+{
+ return (map_table[val].flags & UNI_XDIGIT);
+}
+/*******************************************************************
+ Is a space wchar.
+********************************************************************/
+
+int wisspace( smb_ucs2_t val)
+{
+ return (map_table[val].flags & UNI_SPACE);
+}
diff --git a/source3/script/makeunicodecasemap.awk b/source3/script/makeunicodecasemap.awk
index 4a4640da85..8424b6c672 100644
--- a/source3/script/makeunicodecasemap.awk
+++ b/source3/script/makeunicodecasemap.awk
@@ -52,7 +52,7 @@ BEGIN {
END {
while ( val < 65536 ) {
- printf("{ 0, 0x%04X, 0x%04X }, \t\t\t/* %s NOMAP */\n", val, val, strval);
+ printf("{ 0x%04X, 0x%04X, 0 }, \t\t\t/* %s NOMAP */\n", val, val, strval);
val++;
strval=sprintf("%04X", val);
}