diff --git a/Source/build.cpp b/Source/build.cpp index 48f87d87..a73ab11d 100644 --- a/Source/build.cpp +++ b/Source/build.cpp @@ -419,7 +419,8 @@ CEXEBuild::CEXEBuild() int CEXEBuild::getcurdbsize() { return cur_datablock->getlen(); } -int CEXEBuild::add_string(const char *string, int process/*=1*/) // returns offset in stringblock +// returns offset in stringblock +int CEXEBuild::add_string(const char *string, int process/*=1*/, WORD codepage/*=CP_ACP*/) { if (!string || !*string) return 0; @@ -442,11 +443,7 @@ int CEXEBuild::add_string(const char *string, int process/*=1*/) // returns offs if (!process) return cur_strlist->add(string,2); char buf[4096]; -#ifdef NSIS_SUPPORT_LANG_IN_STRINGS - preprocess_string(buf,string,false); -#else - preprocess_string(buf,string); -#endif + preprocess_string(buf,string,codepage); return cur_strlist->add(buf,2); } @@ -458,11 +455,7 @@ int CEXEBuild::add_intstring(const int i) // returns offset in stringblock } // based on Dave Laundon's code -#ifdef NSIS_SUPPORT_LANG_IN_STRINGS -int CEXEBuild::preprocess_string(char *out, const char *in, bool bUninstall) -#else -int CEXEBuild::preprocess_string(char *out, const char *in) -#endif +int CEXEBuild::preprocess_string(char *out, const char *in, WORD codepage/*=CP_ACP*/) { #ifndef NSIS_SUPPORT_NAMED_USERVARS static const char VarNames[] = @@ -510,7 +503,7 @@ int CEXEBuild::preprocess_string(char *out, const char *in) const char *p=in; while (*p) { - const char *np=CharNext(p); + const char *np=CharNextExA(codepage, p, 0); if (np-p > 1) // multibyte char { @@ -602,29 +595,14 @@ int CEXEBuild::preprocess_string(char *out, const char *in) if (pos) { *pos = 0; - if ( !bUninstall ) + idx = DefineLangString(cp); + if ( idx < 0 ) { - idx = DefineLangString(cp); - if ( idx < 0 ) - { - *out++=(unsigned int)LANG_CODES_START; // Next word is lang-string Identifier - *(WORD*)out=(WORD)idx; - out += sizeof(WORD); - p += strlen(cp)+2; - bProceced = true; - } - } - else - { - idx = DefineLangString(cp); - if ( idx < 0 ) - { - *out++=(unsigned int)LANG_CODES_START; // Next word is lang-string Identifier - *(WORD*)out=(WORD)idx; - out += sizeof(WORD); - p += strlen(cp)+2; - bProceced = true; - } + *out++=(unsigned int)LANG_CODES_START; // Next word is lang-string Identifier + *(WORD*)out=(WORD)idx; + out += sizeof(WORD); + p += strlen(cp)+2; + bProceced = true; } } free(cp); diff --git a/Source/build.h b/Source/build.h index 68072d53..e9a814c6 100644 --- a/Source/build.h +++ b/Source/build.h @@ -175,14 +175,10 @@ class CEXEBuild { int add_db_data(IMMap *map); // returns offset int add_db_data(const char *data, int length); // returns offset int add_data(const char *data, int length, IGrowBuf *dblock); // returns offset - int add_string(const char *string, int process=1); // returns offset (in string table) + int add_string(const char *string, int process=1, WORD codepage=CP_ACP); // returns offset (in string table) int add_intstring(const int i); // returns offset in stringblock -#ifdef NSIS_SUPPORT_LANG_IN_STRINGS - int preprocess_string(char *out, const char *in, bool bUninstall); -#else - int preprocess_string(char *out, const char *in); -#endif + int preprocess_string(char *out, const char *in, WORD codepage=CP_ACP); int make_sure_not_in_secorfunc(const char *str, int page_ok=0); diff --git a/Source/lang.cpp b/Source/lang.cpp index a9d4b571..ed72220f 100644 --- a/Source/lang.cpp +++ b/Source/lang.cpp @@ -438,7 +438,7 @@ int CEXEBuild::GenerateLangTables() { curfilename = fn; linecnt = lt[i].lang_id; - tab = add_string(str, lang_strings[j].process); + tab = add_string(str, lang_strings[j].process, lt[i].nlf.m_uCodePage); tabsset++; curfilename = 0; @@ -527,7 +527,7 @@ int CEXEBuild::GenerateLangTables() { curfilename = fn; linecnt = lt[i].lang_id; - tab = add_string(str, lang_strings[j].process); + tab = add_string(str, lang_strings[j].process, lt[i].nlf.m_uCodePage); tabsset++; curfilename = 0;