]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Use MultiByteToWideChar() on Windows instead of mbstowcs().
authorTim Kientzle <kientzle@gmail.com>
Mon, 29 Dec 2008 00:24:22 +0000 (19:24 -0500)
committerTim Kientzle <kientzle@gmail.com>
Mon, 29 Dec 2008 00:24:22 +0000 (19:24 -0500)
I'm not yet convinced about this approach.  Microsoft documents
mbstowcs(); I'd prefer to avoid platform conditionals.

Submitted by: Michihiro NAKAJIMA

SVN-Revision: 301

libarchive/archive_entry.c

index d7aadd7992b4585f2957829f362ded8b751f9d5d..4391129827b253a9867f6755b307a49df2d8b0f0 100644 (file)
@@ -62,6 +62,9 @@ __FBSDID("$FreeBSD: src/lib/libarchive/archive_entry.c,v 1.55 2008/12/23 05:01:4
 #ifdef HAVE_WCHAR_H
 #include <wchar.h>
 #endif
+#ifdef _WIN32
+#include <windows.h>
+#endif
 
 #include "archive.h"
 #include "archive_entry.h"
@@ -227,9 +230,15 @@ aes_get_wcs(struct aes *aes)
                w = (wchar_t *)malloc((wcs_length + 1) * sizeof(wchar_t));
                if (w == NULL)
                        __archive_errx(1, "No memory for aes_get_wcs()");
+#ifndef _WIN32
                r = mbstowcs(w, aes->aes_mbs.s, wcs_length);
-               w[wcs_length] = 0;
+#else
+               r = MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS,
+                   aes->aes_mbs.s, (int)aes->aes_mbs.length, w,
+                   (int)wcs_length);
+#endif
                if (r > 0) {
+                       w[r] = 0;
                        aes->aes_set |= AES_SET_WCS;
                        return (aes->aes_wcs = w);
                }