librpc/ndr: correctly implement ndr_charset_length()
authorStefan Metzmacher <metze@samba.org>
Wed, 25 Aug 2010 08:05:15 +0000 (10:05 +0200)
committerKarolin Seeger <kseeger@samba.org>
Sat, 5 Mar 2011 13:34:31 +0000 (14:34 +0100)
Before we ignored the charset type.

metze

Signed-off-by: Michael Adam <obnox@samba.org>
(cherry picked from commit 9fd5cc6d85d3179972d7567bad95538ab2873c30)

source3/librpc/ndr/ndr_string.c

index 519be7b1a037e9f8cb5d10479bf56b46fb8f5c3f..51b0d89b12780f2648d0257f8ebd5869b129d969 100644 (file)
@@ -714,7 +714,19 @@ _PUBLIC_ enum ndr_err_code ndr_push_charset(struct ndr_push *ndr, int ndr_flags,
 /* Return number of elements in a string in the specified charset */
 _PUBLIC_ uint32_t ndr_charset_length(const void *var, charset_t chset)
 {
-       /* FIXME: Treat special chars special here, taking chset into account */
-       /* Also include 0 byte */
+       switch (chset) {
+       /* case CH_UTF16: this has the same value as CH_UTF16LE */
+       case CH_UTF16LE:
+       case CH_UTF16BE:
+       case CH_UTF16MUNGED:
+               return strlen_m_term((const char *)var);
+       case CH_DISPLAY:
+       case CH_DOS:
+       case CH_UNIX:
+       case CH_UTF8:
+               return strlen((const char *)var)+1;
+       }
+
+       /* Fallback, this should never happen */
        return strlen((const char *)var)+1;
 }