summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2011-04-12 16:31:08 +1000
committerAndrew Tridgell <tridge@samba.org>2011-04-13 14:47:07 +1000
commit9941dfe9f6532ecbc317685046d74e6f90c41695 (patch)
treeab591eead8e1d38e0167f005730a4ac76dd4fa74
parentce2f217bd2402ada76c13bf3c170c8f55752fb11 (diff)
downloadsamba-9941dfe9f6532ecbc317685046d74e6f90c41695.tar.gz
samba-9941dfe9f6532ecbc317685046d74e6f90c41695.tar.bz2
samba-9941dfe9f6532ecbc317685046d74e6f90c41695.zip
lib/util/charset Move source3/lib/util_unistr.c to the common code.
This file (largely) contains functions to deal with UTF16 strings. Andrew Bartlett Signed-off-by: Andrew Tridgell <tridge@samba.org>
-rw-r--r--lib/util/charset/charset.h20
-rw-r--r--lib/util/charset/util_unistr_w.c (renamed from source3/lib/util_unistr.c)56
-rw-r--r--lib/util/charset/wscript_build2
-rw-r--r--source3/Makefile.in2
-rw-r--r--source3/include/proto.h26
-rw-r--r--source3/lib/charcnv.c39
-rwxr-xr-xsource3/wscript_build2
7 files changed, 73 insertions, 74 deletions
diff --git a/lib/util/charset/charset.h b/lib/util/charset/charset.h
index 16bb9c62fb..3a6e6a3216 100644
--- a/lib/util/charset/charset.h
+++ b/lib/util/charset/charset.h
@@ -240,6 +240,26 @@ void load_case_tables(void);
void load_case_tables_library(void);
bool smb_register_charset(const struct charset_functions *funcs_in);
+/* The following definitions come from util_unistr_w.c */
+
+size_t strlen_w(const smb_ucs2_t *src);
+size_t strnlen_w(const smb_ucs2_t *src, size_t max);
+smb_ucs2_t *strchr_w(const smb_ucs2_t *s, smb_ucs2_t c);
+smb_ucs2_t *strchr_wa(const smb_ucs2_t *s, char c);
+smb_ucs2_t *strrchr_w(const smb_ucs2_t *s, smb_ucs2_t c);
+smb_ucs2_t *strnrchr_w(const smb_ucs2_t *s, smb_ucs2_t c, unsigned int n);
+smb_ucs2_t *strstr_w(const smb_ucs2_t *s, const smb_ucs2_t *ins);
+bool strlower_w(smb_ucs2_t *s);
+bool strupper_w(smb_ucs2_t *s);
+int strcmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b);
+int strcasecmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b);
+int strncasecmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b, size_t len);
+int strcmp_wa(const smb_ucs2_t *a, const char *b);
+int toupper_ascii(int c);
+int tolower_ascii(int c);
+int isupper_ascii(int c);
+int islower_ascii(int c);
+
/*
* Define stub for charset module which implements 8-bit encoding with gaps.
* Encoding tables for such module should be produced from glibc's CHARMAPs
diff --git a/source3/lib/util_unistr.c b/lib/util/charset/util_unistr_w.c
index 26450e319b..a550e52776 100644
--- a/source3/lib/util_unistr.c
+++ b/lib/util/charset/util_unistr_w.c
@@ -1,20 +1,20 @@
-/*
+/*
Unix SMB/CIFS implementation.
Samba utility functions
Copyright (C) Andrew Tridgell 1992-2001
Copyright (C) Simo Sorce 2001
Copyright (C) Jeremy Allison 2005
-
+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
@@ -32,46 +32,6 @@
static int strncmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b, size_t len);
/*******************************************************************
- Write a string in (little-endian) unicode format. src is in
- the current DOS codepage. len is the length in bytes of the
- string pointed to by dst.
-
- if null_terminate is True then null terminate the packet (adds 2 bytes)
-
- the return value is the length in bytes consumed by the string, including the
- null termination if applied
-********************************************************************/
-
-size_t dos_PutUniCode(char *dst,const char *src, size_t len, bool null_terminate)
-{
- int flags = null_terminate ? STR_UNICODE|STR_NOALIGN|STR_TERMINATE
- : STR_UNICODE|STR_NOALIGN;
- return push_ucs2(NULL, dst, src, len, flags);
-}
-
-
-/* Converts a string from internal samba format to unicode
- */
-
-int rpcstr_push(void *dest, const char *src, size_t dest_len, int flags)
-{
- return push_ucs2(NULL, dest, src, dest_len, flags|STR_UNICODE|STR_NOALIGN);
-}
-
-/* Converts a string from internal samba format to unicode. Always terminates.
- * Actually just a wrapper round push_ucs2_talloc().
- */
-
-int rpcstr_push_talloc(TALLOC_CTX *ctx, smb_ucs2_t **dest, const char *src)
-{
- size_t size;
- if (push_ucs2_talloc(ctx, dest, src, &size))
- return size;
- else
- return -1;
-}
-
-/*******************************************************************
Count the number of two-byte pairs in a UTF16 string.
********************************************************************/
@@ -212,13 +172,13 @@ smb_ucs2_t *strstr_w(const smb_ucs2_t *s, const smb_ucs2_t *ins)
bool strlower_w(smb_ucs2_t *s)
{
smb_ucs2_t cp;
- bool ret = False;
+ bool ret = false;
while (*(COPY_UCS2_CHAR(&cp,s))) {
smb_ucs2_t v = tolower_m(cp);
if (v != cp) {
COPY_UCS2_CHAR(s,&v);
- ret = True;
+ ret = true;
}
s++;
}
@@ -235,12 +195,12 @@ bool strlower_w(smb_ucs2_t *s)
bool strupper_w(smb_ucs2_t *s)
{
smb_ucs2_t cp;
- bool ret = False;
+ bool ret = false;
while (*(COPY_UCS2_CHAR(&cp,s))) {
smb_ucs2_t v = toupper_m(cp);
if (v != cp) {
COPY_UCS2_CHAR(s,&v);
- ret = True;
+ ret = true;
}
s++;
}
diff --git a/lib/util/charset/wscript_build b/lib/util/charset/wscript_build
index a245ef1b0c..29e168dce1 100644
--- a/lib/util/charset/wscript_build
+++ b/lib/util/charset/wscript_build
@@ -13,6 +13,6 @@ bld.SAMBA_SUBSYSTEM('ICONV_WRAPPER',
public_deps='iconv replace talloc')
bld.SAMBA_SUBSYSTEM('CODEPOINTS',
- source='codepoints.c util_str.c',
+ source='codepoints.c util_str.c util_unistr_w.c',
deps='DYNCONFIG ICONV_WRAPPER'
)
diff --git a/source3/Makefile.in b/source3/Makefile.in
index b3b1de48c5..a0503278b9 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -451,7 +451,7 @@ LIB_OBJ = $(LIBSAMBAUTIL_OBJ) $(UTIL_OBJ) $(CRYPTO_OBJ) \
lib/bitmap.o lib/dprintf.o $(UTIL_REG_OBJ) \
lib/wins_srv.o \
lib/util_str.o ../lib/util/base64.o lib/util_sid.o \
- lib/util_unistr.o ../lib/util/charset/codepoints.o ../lib/util/charset/util_str.o lib/util_file.o \
+ ../lib/util/charset/util_unistr_w.o ../lib/util/charset/codepoints.o ../lib/util/charset/util_str.o lib/util_file.o \
lib/util.o lib/util_cmdline.o lib/util_names.o \
lib/util_sock.o lib/sock_exec.o lib/util_sec.o \
lib/substitute.o lib/dbwrap_util.o \
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 48b94aacce..3f44b949f2 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -126,6 +126,9 @@ size_t pull_string_talloc(TALLOC_CTX *ctx,
size_t src_len,
int flags);
size_t align_string(const void *base_ptr, const char *p, int flags);
+size_t dos_PutUniCode(char *dst,const char *src, size_t len, bool null_terminate);
+int rpcstr_push(void *dest, const char *src, size_t dest_len, int flags);
+int rpcstr_push_talloc(TALLOC_CTX *ctx, smb_ucs2_t **dest, const char *src);
/* The following definitions come from lib/conn_tdb.c */
@@ -1046,29 +1049,6 @@ char *escape_shell_string(const char *src);
char **str_list_make_v3(TALLOC_CTX *mem_ctx, const char *string, const char *sep);
char *sanitize_username(TALLOC_CTX *mem_ctx, const char *username);
-/* The following definitions come from lib/util_unistr.c */
-
-size_t dos_PutUniCode(char *dst,const char *src, size_t len, bool null_terminate);
-int rpcstr_push(void *dest, const char *src, size_t dest_len, int flags);
-int rpcstr_push_talloc(TALLOC_CTX *ctx, smb_ucs2_t **dest, const char *src);
-size_t strlen_w(const smb_ucs2_t *src);
-size_t strnlen_w(const smb_ucs2_t *src, size_t max);
-smb_ucs2_t *strchr_w(const smb_ucs2_t *s, smb_ucs2_t c);
-smb_ucs2_t *strchr_wa(const smb_ucs2_t *s, char c);
-smb_ucs2_t *strrchr_w(const smb_ucs2_t *s, smb_ucs2_t c);
-smb_ucs2_t *strnrchr_w(const smb_ucs2_t *s, smb_ucs2_t c, unsigned int n);
-smb_ucs2_t *strstr_w(const smb_ucs2_t *s, const smb_ucs2_t *ins);
-bool strlower_w(smb_ucs2_t *s);
-bool strupper_w(smb_ucs2_t *s);
-int strcmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b);
-int strcasecmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b);
-int strncasecmp_w(const smb_ucs2_t *a, const smb_ucs2_t *b, size_t len);
-int strcmp_wa(const smb_ucs2_t *a, const char *b);
-int toupper_ascii(int c);
-int tolower_ascii(int c);
-int isupper_ascii(int c);
-int islower_ascii(int c);
-
/* The following definitions come from lib/version.c */
const char *samba_version_string(void);
diff --git a/source3/lib/charcnv.c b/source3/lib/charcnv.c
index 6e5b606e64..edcccc25e7 100644
--- a/source3/lib/charcnv.c
+++ b/source3/lib/charcnv.c
@@ -1366,3 +1366,42 @@ size_t align_string(const void *base_ptr, const char *p, int flags)
return 0;
}
+/*******************************************************************
+ Write a string in (little-endian) unicode format. src is in
+ the current DOS codepage. len is the length in bytes of the
+ string pointed to by dst.
+
+ if null_terminate is True then null terminate the packet (adds 2 bytes)
+
+ the return value is the length in bytes consumed by the string, including the
+ null termination if applied
+********************************************************************/
+
+size_t dos_PutUniCode(char *dst,const char *src, size_t len, bool null_terminate)
+{
+ int flags = null_terminate ? STR_UNICODE|STR_NOALIGN|STR_TERMINATE
+ : STR_UNICODE|STR_NOALIGN;
+ return push_ucs2(NULL, dst, src, len, flags);
+}
+
+
+/* Converts a string from internal samba format to unicode
+ */
+
+int rpcstr_push(void *dest, const char *src, size_t dest_len, int flags)
+{
+ return push_ucs2(NULL, dest, src, dest_len, flags|STR_UNICODE|STR_NOALIGN);
+}
+
+/* Converts a string from internal samba format to unicode. Always terminates.
+ * Actually just a wrapper round push_ucs2_talloc().
+ */
+
+int rpcstr_push_talloc(TALLOC_CTX *ctx, smb_ucs2_t **dest, const char *src)
+{
+ size_t size;
+ if (push_ucs2_talloc(ctx, dest, src, &size))
+ return size;
+ else
+ return -1;
+}
diff --git a/source3/wscript_build b/source3/wscript_build
index 300f5b3863..71d91388dd 100755
--- a/source3/wscript_build
+++ b/source3/wscript_build
@@ -963,7 +963,7 @@ bld.SAMBA3_SUBSYSTEM('tdb-wrap3',
vars=locals())
bld.SAMBA3_SUBSYSTEM('CHARSET3',
- source='''lib/util_str.c lib/util_unistr.c lib/charcnv.c lib/fstring.c''',
+ source='''lib/util_str.c lib/charcnv.c lib/fstring.c''',
public_deps='ICONV_WRAPPER CODEPOINTS',
deps='DYNCONFIG')