summaryrefslogtreecommitdiff
path: root/source3/lib/util_unistr.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/lib/util_unistr.c')
-rw-r--r--source3/lib/util_unistr.c43
1 files changed, 21 insertions, 22 deletions
diff --git a/source3/lib/util_unistr.c b/source3/lib/util_unistr.c
index 74ecc841d0..5e86d5db0b 100644
--- a/source3/lib/util_unistr.c
+++ b/source3/lib/util_unistr.c
@@ -282,38 +282,37 @@ void unistr_to_ascii(char *dest, const uint16 *src, int len)
void unistr2_to_ascii(char *dest, const UNISTR2 *str, size_t maxlen)
{
- char *destend;
- const uint16 *src;
+ char *p;
+ uint16 *src;
size_t len;
- register uint16 c;
+ int i;
+
+ if (str == NULL) {
+ *dest='\0';
+ return;
+ }
src = str->buffer;
len = MIN(str->uni_str_len, maxlen);
- destend = dest + len;
- while (dest < destend)
- {
- uint16 ucs2_val;
- uint16 cp_val;
+ if (len == 0) {
+ *dest='\0';
+ return;
+ }
+
+ for (p = dest; *src && p-dest < len; src++) {
+ uint16 ucs2_val = SVAL(src,0);
+ uint16 cp_val = ucs2_to_doscp[ucs2_val];
- c = *src;
- if (c == 0)
- {
- break;
- }
-
- ucs2_val = SVAL(src++,0);
- cp_val = ucs2_to_doscp[ucs2_val];
-
if (cp_val < 256)
- *(dest++) = (char)cp_val;
+ *p++ = (char)cp_val;
else {
- *dest= (cp_val >> 8) & 0xff;
- *(dest++) = (cp_val & 0xff);
+ *p = (cp_val >> 8) & 0xff;
+ *p++ = (cp_val & 0xff);
}
}
-
- *dest = 0;
+
+ *p = 0;
}