diff options
| author | Jordan Brown <Jordan.Brown@Sun.COM> | 2009-11-05 14:34:36 -0800 |
|---|---|---|
| committer | Jordan Brown <Jordan.Brown@Sun.COM> | 2009-11-05 14:34:36 -0800 |
| commit | bbf6f00c25b6a2bed23c35eac6d62998ecdb338c (patch) | |
| tree | 8cf72fd47362b5b0da2ffe9be7fe7726a3d24426 /usr/src/uts/common/smbsrv/string.h | |
| parent | d95ac3ffcdcc13296bb4c53f621f72c0535f32c3 (diff) | |
| download | illumos-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.h | 128 |
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 } |
