summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/smbsrv/string.h
diff options
context:
space:
mode:
authorJordan Brown <Jordan.Brown@Sun.COM>2009-11-05 14:34:36 -0800
committerJordan Brown <Jordan.Brown@Sun.COM>2009-11-05 14:34:36 -0800
commitbbf6f00c25b6a2bed23c35eac6d62998ecdb338c (patch)
tree8cf72fd47362b5b0da2ffe9be7fe7726a3d24426 /usr/src/uts/common/smbsrv/string.h
parentd95ac3ffcdcc13296bb4c53f621f72c0535f32c3 (diff)
downloadillumos-joyent-bbf6f00c25b6a2bed23c35eac6d62998ecdb338c.tar.gz
6747532 ns_lookup_bypid spams syslog with too many messages
6888836 Not listing all files in a directory of a CIFS share in Windows XP 6812570 Trans2 is missing pass-through levels: FILE_RENAME_INFORMATION (and others) 6888827 Add Unicode codepage support 6865488 libadutils: leak in ldap_lookup_domains_in_forest() 6888708 idmapd crashing periodically. Need cores analyzed. 6891342 invalid, redundant SQL in rule WHERE expressions 6891767 minor cleanups in idmap 6892544 Panic occurred at smb_node_ref+0x7f(ffffffd612297310) --HG-- rename : usr/src/uts/common/smbsrv/cifs.h => usr/src/uts/common/smbsrv/smb.h
Diffstat (limited to 'usr/src/uts/common/smbsrv/string.h')
-rw-r--r--usr/src/uts/common/smbsrv/string.h128
1 files changed, 103 insertions, 25 deletions
diff --git a/usr/src/uts/common/smbsrv/string.h b/usr/src/uts/common/smbsrv/string.h
index 6696cbc33d..21b32e328f 100644
--- a/usr/src/uts/common/smbsrv/string.h
+++ b/usr/src/uts/common/smbsrv/string.h
@@ -19,37 +19,67 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SMBSRV_STRING_H
#define _SMBSRV_STRING_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <sys/types.h>
-#include <smbsrv/smb_i18n.h>
#ifdef __cplusplus
extern "C" {
#endif
-extern char *strsubst(char *, char, char);
-extern char *strsep(char **, const char *);
-extern char *strcanon(char *, const char *);
+#define _smb_between(l, c, u) ((l) <= (c) && (c) <= (u))
+
+#define smb_isalpha(c) (smb_islower(c) || smb_isupper(c))
+#define smb_isdigit(c) _smb_between('0', (c), '9')
+#define smb_isalnum(c) (smb_isalpha(c) || smb_isdigit(c))
+#define smb_isxdigit(c) (smb_isdigit(c) || \
+ _smb_between('a', (c), 'f') || \
+ _smb_between('A', (c), 'F'))
+#define smb_isblank(c) ((c) == ' ' || (c) == '\t')
+#define smb_isspace(c) ((c) == ' ' || \
+ (c) == '\t' || \
+ (c) == '\n' || \
+ (c) == '\r' || \
+ (c) == '\f')
+#define smb_isascii(c) (!((c) &~ 0x7F))
+
+/* These macros only apply to ASCII */
+#define smb_isalpha_ascii(c) \
+ (_smb_between('a', (c), 'z') || _smb_between('A', (c), 'Z'))
+#define smb_isalnum_ascii(c) (smb_isalpha_ascii(c) || smb_isdigit(c))
-extern char *utf8_strupr(char *);
-extern char *utf8_strlwr(char *);
-extern int utf8_isstrupr(const char *);
-extern int utf8_isstrlwr(const char *);
-extern int utf8_strcasecmp(const char *, const char *);
-extern int utf8_strncasecmp(const char *, const char *, int);
-extern int utf8_isstrascii(const char *);
+#define smb_isprint(c) _smb_between('!', (c), '~')
+#define smb_iscntrl(c) ((((c) >= 0) && ((c) <= 0x1f)) || ((c) == 0x7f))
+#define smb_ispunct(c) (smb_isprint(c) && !smb_isxdigit(c) && !smb_isspace(c))
-extern int smb_match(char *patn, char *str);
-extern int smb_match_ci(char *patn, char *str);
-extern int smb_match83(char *patn, char *str83);
+/*
+ * These id's should correspond to oemcpg_table smb_oem.c.
+ */
+typedef enum codepage_id {
+ OEM_CPG_850 = 0,
+ OEM_CPG_950,
+ OEM_CPG_1252,
+ OEM_CPG_949,
+ OEM_CPG_936,
+ OEM_CPG_932,
+ OEM_CPG_852,
+ OEM_CPG_1250,
+ OEM_CPG_1253,
+ OEM_CPG_737,
+ OEM_CPG_1254,
+ OEM_CPG_857,
+ OEM_CPG_1251,
+ OEM_CPG_866,
+ OEM_CPG_1255,
+ OEM_CPG_862,
+ OEM_CPG_1256,
+ OEM_CPG_720
+} codepage_id_t;
/*
* Maximum number of bytes per multi-byte character.
@@ -57,16 +87,64 @@ extern int smb_match83(char *patn, char *str83);
#define MTS_MB_CUR_MAX 3
#define MTS_MB_CHAR_MAX MTS_MB_CUR_MAX
-size_t mts_mbstowcs(mts_wchar_t *, const char *, size_t);
-size_t mts_wcstombs(char *, const mts_wchar_t *, size_t);
-int mts_mbtowc(mts_wchar_t *, const char *, size_t);
-int mts_wctomb(char *, mts_wchar_t);
+typedef uint16_t smb_wchar_t;
+
+/*
+ * Labels to define whether a code page table entry is an uppercase
+ * character, a lowercase character or neither. One of these values
+ * should appear in the ctype field of the code page tables.
+ */
+#define CODEPAGE_ISNONE 0x00
+#define CODEPAGE_ISUPPER 0x01
+#define CODEPAGE_ISLOWER 0x02
+
+/*
+ * The structure of a code page entry. Each code page table will
+ * consist of an array of 256 codepage entries.
+ *
+ * ctype indicates case of the value.
+ * upper indicates the uppercase equivalent value.
+ * lower indicates the lowercase equivalent value.
+ */
+typedef struct smb_codepage {
+ unsigned char ctype;
+ smb_wchar_t upper;
+ smb_wchar_t lower;
+} smb_codepage_t;
+
+void smb_codepage_init(void);
+
+int smb_isupper(int);
+int smb_islower(int);
+int smb_toupper(int);
+int smb_tolower(int);
+char *smb_strupr(char *);
+char *smb_strlwr(char *);
+int smb_isstrupr(const char *);
+int smb_isstrlwr(const char *);
+int smb_strcasecmp(const char *, const char *, size_t);
+
+int smb_match(char *patn, char *str);
+int smb_match_ci(char *patn, char *str);
+int smb_match83(char *patn, char *str83);
+
+size_t smb_mbstowcs(smb_wchar_t *, const char *, size_t);
+size_t smb_wcstombs(char *, const smb_wchar_t *, size_t);
+int smb_mbtowc(smb_wchar_t *, const char *, size_t);
+int smb_wctomb(char *, smb_wchar_t);
+
+size_t smb_wcequiv_strlen(const char *);
+size_t smb_sbequiv_strlen(const char *);
+
+int smb_stombs(char *, char *, int);
+int smb_mbstos(char *, const char *);
-size_t mts_wcequiv_strlen(const char *);
-size_t mts_sbequiv_strlen(const char *);
+size_t ucstooem(char *, const smb_wchar_t *, size_t, uint32_t);
+size_t oemtoucs(smb_wchar_t *, const char *, size_t, uint32_t);
-int mts_stombs(char *, char *, int);
-int mts_mbstos(char *, const char *);
+char *strsubst(char *, char, char);
+char *strsep(char **, const char *);
+char *strcanon(char *, const char *);
#ifdef __cplusplus
}