librpc/ndr: correctly implement ndr_charset_length()
authorStefan Metzmacher <metze@samba.org>
Wed, 25 Aug 2010 08:05:15 +0000 (10:05 +0200)
committerStefan Metzmacher <metze@samba.org>
Thu, 26 Aug 2010 06:49:35 +0000 (08:49 +0200)
Before we ignored the charset type.

metze

librpc/ndr/ndr_string.c

index 568c36845e5d47c166a0fba21534409152847837..a6383d6c7c5274d2d6628cabadcfc5d1f1cda29d 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:
+       case CH_UTF16BE:
+       case CH_UTF16LE:
+       case CH_UTF16MUNGED:
+               return strlen_m_term(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;
 }