updated the 3.0 branch from the head branch - ready for alpha18
[samba.git] / source3 / lib / util_unistr.c
index a1cff26169a7c9a2f342d1d1cfc7114ae6f729a9..ba02819bdc6553264562a648cbb159c56a4b0d81 100644 (file)
@@ -775,3 +775,44 @@ int unistrcpy(uint16 *dst, uint16 *src)
 
        return num_wchars;
 }
+
+/**
+ * Samba ucs2 type to UNISTR2 conversion
+ *
+ * @param ctx Talloc context to create the dst strcture (if null) and the 
+ *            contents of the unicode string.
+ * @param dst UNISTR2 destination. If equals null, then it's allocated.
+ * @param src smb_ucs2_t source.
+ * @param max_len maximum number of unicode characters to copy. If equals
+ *        null, then null-termination of src is taken
+ *
+ * @return copied UNISTR2 destination
+ **/
+UNISTR2* ucs2_to_unistr2(TALLOC_CTX *ctx, UNISTR2* dst, smb_ucs2_t* src)
+{
+       size_t len;
+
+       if (!src) return NULL;
+       len = strlen_w(src);
+       
+       /* allocate UNISTR2 destination if not given */
+       if (!dst) {
+               dst = (UNISTR2*) talloc(ctx, sizeof(UNISTR2));
+               if (!dst) return NULL;
+       }
+       if (!dst->buffer) {
+               dst->buffer = (uint16*) talloc(ctx, sizeof(uint16) * (len + 1));
+               if (!dst->buffer) return NULL;
+       }
+       
+       /* set UNISTR2 parameters */
+       dst->uni_max_len = len + 1;
+       dst->undoc = 0;
+       dst->uni_str_len = len;
+       
+       /* copy the actual unicode string */
+       strncpy_w(dst->buffer, src, dst->uni_max_len);
+       
+       return dst;
+};
+