#include <iconv.h>
#include <sys/mman.h>
#include <sys/stat.h>
+#include <langinfo.h>
#include "libvhd.h"
#include "relative-path.h"
size_t ibl, obl;
char *uri, *uri_utf8, *uri_utf8p, *ret;
const char *urip;
+ char *codeset;
err = 0;
ret = NULL;
len = strlen(name) + strlen("file://");
ibl = len;
- obl = len;
+ obl = len * 2;
urip = uri = malloc(ibl + 1);
uri_utf8 = uri_utf8p = malloc(obl);
if (!uri || !uri_utf8)
return -ENOMEM;
- cd = iconv_open("UTF-8", "ASCII");
+ codeset = nl_langinfo(CODESET);
+ cd = iconv_open("UTF-8", codeset);
if (cd == (iconv_t)-1) {
err = -errno;
goto out;
(char **)
#endif
&urip, &ibl, &uri_utf8p, &obl) == (size_t)-1 ||
- ibl || obl) {
+ ibl) {
err = (errno ? -errno : -EIO);
goto out;
}
size_t ibl, obl;
char *uri, *uri_utf16, *uri_utf16p, *tmp, *ret;
const char *urip;
+ char *codeset;
err = 0;
ret = NULL;
* MICROSOFT_COMPAT
* little endian unicode here
*/
- cd = iconv_open("UTF-16LE", "ASCII");
+ codeset = nl_langinfo(CODESET);
+ cd = iconv_open("UTF-16LE", codeset);
if (cd == (iconv_t)-1) {
err = -errno;
goto out;
(char **)
#endif
&urip, &ibl, &uri_utf16p, &obl) == (size_t)-1 ||
- ibl || obl) {
+ ibl) {
err = (errno ? -errno : -EIO);
goto out;
}
iconv_t cd;
char *name;
size_t ibl, obl;
+ char *codeset;
name = out;
ibl = obl = len;
- cd = iconv_open("ASCII", "UTF-8");
+ codeset = nl_langinfo(CODESET);
+ cd = iconv_open(codeset, "UTF-8");
if (cd == (iconv_t)-1)
return NULL;
iconv_t cd;
char *name, *tmp;
size_t ibl, obl;
+ char *codeset;
tmp = name = out;
ibl = obl = len;
- cd = iconv_open("ASCII", utf_type);
+ codeset = nl_langinfo(CODESET);
+ cd = iconv_open(codeset, utf_type);
if (cd == (iconv_t)-1)
return NULL;
size_t ibl, obl;
char *ppath, *dst;
const char *pname;
+ char *codeset;
err = 0;
pname = NULL;
* MICROSOFT_COMPAT
* big endian unicode here
*/
- cd = iconv_open(UTF_16BE, "ASCII");
+ codeset = nl_langinfo(CODESET);
+ cd = iconv_open(UTF_16BE, codeset);
if (cd == (iconv_t)-1) {
err = -errno;
goto out;