From 8e1b52185975374ff518d1e6ea298cd4180ea743 Mon Sep 17 00:00:00 2001 From: kichik Date: Wed, 18 Jul 2007 19:26:16 +0000 Subject: [PATCH] real implementation for IsValidCodePage git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@5211 212acab6-be3b-0410-9dea-997c60f758d6 --- Source/lang.cpp | 8 -------- Source/util.cpp | 14 ++++++++++++++ Source/util.h | 1 + 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Source/lang.cpp b/Source/lang.cpp index e1975e5e..1bf316f6 100644 --- a/Source/lang.cpp +++ b/Source/lang.cpp @@ -876,14 +876,6 @@ char SkipComments(FILE *f) { return (char) c; } -#ifndef _WIN32 -BOOL IsValidCodePage(UINT CodePage) -{ - // FIXME make a real check - return TRUE; -} -#endif - // NSIS Language File parser LanguageTable * CEXEBuild::LoadLangFile(char *filename) { FILE *f = FOPEN(filename, "r"); diff --git a/Source/util.cpp b/Source/util.cpp index fa030ea6..f02f5831 100644 --- a/Source/util.cpp +++ b/Source/util.cpp @@ -528,6 +528,20 @@ int MultiByteToWideChar(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, return cchWideChar - (outbytes / sizeof (WCHAR)); } +BOOL IsValidCodePage(UINT CodePage) +{ + char cp[128]; + create_code_page_string(cp, sizeof(cp), CodePage); + + iconv_t cd = iconv_open("UCS-2LE", cp); + if (cd == (iconv_t) -1) + return FALSE; + + iconv_close(cd); + + return TRUE; +} + #define MY_ERROR_MSG(x) {if (g_display_errors) {fprintf(g_output,"%s", x);}} char *my_convert(const char *path) diff --git a/Source/util.h b/Source/util.h index b1930fd8..98c17189 100644 --- a/Source/util.h +++ b/Source/util.h @@ -72,6 +72,7 @@ int WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, LPBOOL lpUsedDefaultChar); int MultiByteToWideChar(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar); +BOOL IsValidCodePage(UINT CodePage); char *my_convert(const char *path); void my_convert_free(char *converted_path);