s3-string: moved fstring functions into their own file
authorAndrew Tridgell <tridge@samba.org>
Thu, 24 Mar 2011 04:56:26 +0000 (15:56 +1100)
committerAndrew Tridgell <tridge@samba.org>
Fri, 25 Mar 2011 03:37:06 +0000 (04:37 +0100)
Pair-Programmed-With: Andrew Bartlett <abartlet@samba.org>

source3/Makefile.in
source3/lib/charcnv.c
source3/lib/fstring.c [new file with mode: 0644]
source3/wscript_build

index 2bc65c72856ebcf573da55cf93ad4ea43b35e236..565e52c056896a4031d149e37050775598bb94e6 100644 (file)
@@ -442,7 +442,7 @@ LIB_OBJ = $(LIBSAMBAUTIL_OBJ) $(UTIL_OBJ) $(CRYPTO_OBJ) \
          lib/util_transfer_file.o ../lib/async_req/async_sock.o \
          lib/addrchange.o \
          $(TDB_LIB_OBJ) \
-         $(VERSION_OBJ) lib/charcnv.o ../lib/util/debug.o ../lib/util/debug_s3.o ../lib/util/fault.o \
+         $(VERSION_OBJ) lib/charcnv.o lib/fstring.o ../lib/util/debug.o ../lib/util/debug_s3.o ../lib/util/fault.o \
          lib/interface.o lib/pidfile.o lib/dumpcore.o \
          lib/system.o lib/sendfile.o lib/recvfile.o lib/time.o \
          lib/username.o \
index 12c708ed8ea3b141beae2deca4cbc4c80622cf7f..d2633bd8adf7519514ff2d394813c50e42c18693 100644 (file)
@@ -652,49 +652,6 @@ size_t push_ascii(void *dest, const char *src, size_t dest_len, int flags)
        return ret;
 }
 
-size_t push_ascii_fstring(void *dest, const char *src)
-{
-       return push_ascii(dest, src, sizeof(fstring), STR_TERMINATE);
-}
-
-/********************************************************************
- Push an nstring - ensure null terminated. Written by
- moriyama@miraclelinux.com (MORIYAMA Masayuki).
-********************************************************************/
-
-size_t push_ascii_nstring(void *dest, const char *src)
-{
-       size_t i, buffer_len, dest_len;
-       smb_ucs2_t *buffer;
-
-       conv_silent = True;
-       if (!push_ucs2_talloc(talloc_tos(), &buffer, src, &buffer_len)) {
-               smb_panic("failed to create UCS2 buffer");
-       }
-
-       /* We're using buffer_len below to count ucs2 characters, not bytes. */
-       buffer_len /= sizeof(smb_ucs2_t);
-
-       dest_len = 0;
-       for (i = 0; buffer[i] != 0 && (i < buffer_len); i++) {
-               unsigned char mb[10];
-               /* Convert one smb_ucs2_t character at a time. */
-               size_t mb_len = convert_string(CH_UTF16LE, CH_DOS, buffer+i, sizeof(smb_ucs2_t), mb, sizeof(mb));
-               if ((mb_len != (size_t)-1) && (dest_len + mb_len <= MAX_NETBIOSNAME_LEN - 1)) {
-                       memcpy((char *)dest + dest_len, mb, mb_len);
-                       dest_len += mb_len;
-               } else {
-                       errno = E2BIG;
-                       break;
-               }
-       }
-       ((char *)dest)[dest_len] = '\0';
-
-       conv_silent = False;
-       TALLOC_FREE(buffer);
-       return dest_len;
-}
-
 /********************************************************************
  Push and malloc an ascii string. src and dest null terminated.
 ********************************************************************/
@@ -854,18 +811,6 @@ static size_t pull_ascii_base_talloc(TALLOC_CTX *ctx,
        return src_len;
 }
 
-size_t pull_ascii_fstring(char *dest, const void *src)
-{
-       return pull_ascii(dest, src, sizeof(fstring), -1, STR_TERMINATE);
-}
-
-/* When pulling an nstring it can expand into a larger size (dos cp -> utf8). Cope with this. */
-
-size_t pull_ascii_nstring(char *dest, size_t dest_len, const void *src)
-{
-       return pull_ascii(dest, src, dest_len, sizeof(nstring)-1, STR_TERMINATE);
-}
-
 /**
  * Copy a string from a char* src to a unicode destination.
  *
@@ -963,51 +908,6 @@ bool push_ucs2_talloc(TALLOC_CTX *ctx, smb_ucs2_t **dest, const char *src,
 }
 
 
-/**
- Copy a string from a char* src to a UTF-8 destination.
- Return the number of bytes occupied by the string in the destination
- Flags can have:
-  STR_TERMINATE means include the null termination
-  STR_UPPER     means uppercase in the destination
- dest_len is the maximum length allowed in the destination. If dest_len
- is -1 then no maxiumum is used.
-**/
-
-static size_t push_utf8(void *dest, const char *src, size_t dest_len, int flags)
-{
-       size_t src_len = 0;
-       size_t ret;
-       char *tmpbuf = NULL;
-
-       if (dest_len == (size_t)-1) {
-               /* No longer allow dest_len of -1. */
-               smb_panic("push_utf8 - invalid dest_len of -1");
-       }
-
-       if (flags & STR_UPPER) {
-               tmpbuf = strupper_talloc(talloc_tos(), src);
-               if (!tmpbuf) {
-                       return (size_t)-1;
-               }
-               src = tmpbuf;
-               src_len = strlen(src);
-       }
-
-       src_len = strlen(src);
-       if (flags & STR_TERMINATE) {
-               src_len++;
-       }
-
-       ret = convert_string(CH_UNIX, CH_UTF8, src, src_len, dest, dest_len);
-       TALLOC_FREE(tmpbuf);
-       return ret;
-}
-
-size_t push_utf8_fstring(void *dest, const char *src)
-{
-       return push_utf8(dest, src, sizeof(fstring), STR_TERMINATE);
-}
-
 /**
  * Copy a string from a unix char* src to a UTF-8 destination, allocating a buffer using talloc
  *
@@ -1211,11 +1111,6 @@ size_t pull_ucs2_base_talloc(TALLOC_CTX *ctx,
        return src_len + ucs2_align_len;
 }
 
-size_t pull_ucs2_fstring(char *dest, const void *src)
-{
-       return pull_ucs2(NULL, dest, src, sizeof(fstring), -1, STR_TERMINATE);
-}
-
 /**
  * Copy a string from a UCS2 src to a unix char * destination, allocating a buffer using talloc
  *
diff --git a/source3/lib/fstring.c b/source3/lib/fstring.c
new file mode 100644 (file)
index 0000000..cd5317c
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   fixed string functions
+
+   Copyright (C) Igor Vergeichik <iverg@mail.ru> 2001
+   Copyright (C) Andrew Tridgell 2001
+   Copyright (C) Simo Sorce 2001
+   Copyright (C) Martin Pool 2003
+
+   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/>.
+
+*/
+
+#include "includes.h"
+
+size_t push_ascii_fstring(void *dest, const char *src)
+{
+       return push_ascii(dest, src, sizeof(fstring), STR_TERMINATE);
+}
+
+/********************************************************************
+ Push an nstring - ensure null terminated. Written by
+ moriyama@miraclelinux.com (MORIYAMA Masayuki).
+********************************************************************/
+
+size_t push_ascii_nstring(void *dest, const char *src)
+{
+       size_t i, buffer_len, dest_len;
+       smb_ucs2_t *buffer;
+
+       conv_silent = True;
+       if (!push_ucs2_talloc(talloc_tos(), &buffer, src, &buffer_len)) {
+               smb_panic("failed to create UCS2 buffer");
+       }
+
+       /* We're using buffer_len below to count ucs2 characters, not bytes. */
+       buffer_len /= sizeof(smb_ucs2_t);
+
+       dest_len = 0;
+       for (i = 0; buffer[i] != 0 && (i < buffer_len); i++) {
+               unsigned char mb[10];
+               /* Convert one smb_ucs2_t character at a time. */
+               size_t mb_len = convert_string(CH_UTF16LE, CH_DOS, buffer+i, sizeof(smb_ucs2_t), mb, sizeof(mb));
+               if ((mb_len != (size_t)-1) && (dest_len + mb_len <= MAX_NETBIOSNAME_LEN - 1)) {
+                       memcpy((char *)dest + dest_len, mb, mb_len);
+                       dest_len += mb_len;
+               } else {
+                       errno = E2BIG;
+                       break;
+               }
+       }
+       ((char *)dest)[dest_len] = '\0';
+
+       conv_silent = False;
+       TALLOC_FREE(buffer);
+       return dest_len;
+}
+
+size_t pull_ascii_fstring(char *dest, const void *src)
+{
+       return pull_ascii(dest, src, sizeof(fstring), -1, STR_TERMINATE);
+}
+
+/* When pulling an nstring it can expand into a larger size (dos cp -> utf8). Cope with this. */
+
+size_t pull_ascii_nstring(char *dest, size_t dest_len, const void *src)
+{
+       return pull_ascii(dest, src, dest_len, sizeof(nstring)-1, STR_TERMINATE);
+}
+
+/**
+ Copy a string from a char* src to a UTF-8 destination.
+ Return the number of bytes occupied by the string in the destination
+ Flags can have:
+  STR_TERMINATE means include the null termination
+  STR_UPPER     means uppercase in the destination
+ dest_len is the maximum length allowed in the destination. If dest_len
+ is -1 then no maxiumum is used.
+**/
+
+static size_t push_utf8(void *dest, const char *src, size_t dest_len, int flags)
+{
+       size_t src_len = 0;
+       size_t ret;
+       char *tmpbuf = NULL;
+
+       if (dest_len == (size_t)-1) {
+               /* No longer allow dest_len of -1. */
+               smb_panic("push_utf8 - invalid dest_len of -1");
+       }
+
+       if (flags & STR_UPPER) {
+               tmpbuf = strupper_talloc(talloc_tos(), src);
+               if (!tmpbuf) {
+                       return (size_t)-1;
+               }
+               src = tmpbuf;
+               src_len = strlen(src);
+       }
+
+       src_len = strlen(src);
+       if (flags & STR_TERMINATE) {
+               src_len++;
+       }
+
+       ret = convert_string(CH_UNIX, CH_UTF8, src, src_len, dest, dest_len);
+       TALLOC_FREE(tmpbuf);
+       return ret;
+}
+
+size_t push_utf8_fstring(void *dest, const char *src)
+{
+       return push_utf8(dest, src, sizeof(fstring), STR_TERMINATE);
+}
+
+size_t pull_ucs2_fstring(char *dest, const void *src)
+{
+       return pull_ucs2(NULL, dest, src, sizeof(fstring), -1, STR_TERMINATE);
+}
index fa8c18edaadfe686e6a1bb31dc54448f49f5469c..d314a2a2e25bbc5e63e458c2a27afc08f24e8562 100755 (executable)
@@ -959,7 +959,7 @@ bld.SAMBA3_SUBSYSTEM('tdb-wrap3',
                     vars=locals())
 
 bld.SAMBA3_SUBSYSTEM('CHARSET3',
-                    source='''lib/util_str.c lib/util_unistr.c lib/charcnv.c''',
+                    source='''lib/util_str.c lib/util_unistr.c lib/charcnv.c lib/fstring.c''',
                     public_deps='ICONV_WRAPPER CODEPOINTS',
                     deps='DYNCONFIG')