[PATCH 1/4] regedit: Use output_message() in regproc.c for better internationalization
Hugh McMaster
hugh.mcmaster at outlook.com
Fri Jul 15 02:49:48 CDT 2016
Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
programs/regedit/regedit.c | 3 +-
programs/regedit/regedit.rc | 14 +++++++++
programs/regedit/regproc.c | 76 ++++++++++++---------------------------------
programs/regedit/regproc.h | 4 +++
programs/regedit/resource.h | 14 +++++++++
5 files changed, 52 insertions(+), 59 deletions(-)
diff --git a/programs/regedit/regedit.c b/programs/regedit/regedit.c
index c37f695..55f2b8d 100644
--- a/programs/regedit/regedit.c
+++ b/programs/regedit/regedit.c
@@ -25,7 +25,6 @@
#include "wine/unicode.h"
#include "wine/debug.h"
#include "regproc.h"
-#include "resource.h"
WINE_DEFAULT_DEBUG_CHANNEL(regedit);
@@ -69,7 +68,7 @@ static void output_formatstring(const WCHAR *fmt, __ms_va_list va_args)
LocalFree(str);
}
-static void __cdecl output_message(unsigned int id, ...)
+void __cdecl output_message(unsigned int id, ...)
{
WCHAR fmt[1536];
__ms_va_list va_args;
diff --git a/programs/regedit/regedit.rc b/programs/regedit/regedit.rc
index 18d19b5..9cbadb2 100644
--- a/programs/regedit/regedit.rc
+++ b/programs/regedit/regedit.rc
@@ -363,6 +363,20 @@ STRINGTABLE
STRING_FILE_NOT_FOUND, "regedit: The file '%1' was not found.\n"
STRING_CANNOT_OPEN_FILE, "regedit: Unable to open the file '%1'.\n"
STRING_UNHANDLED_ACTION, "regedit: Unhandled action.\n"
+ STRING_OUT_OF_MEMORY, "regedit: Out of memory! (%1!S!, line %2!u!)\n"
+ STRING_INVALID_HEX, "regedit: Invalid hexadecimal value.\n"
+ STRING_CSV_HEX_ERROR, "regedit: Unable to convert hexadecimal data. An invalid value was encountered at '%1'.\n"
+ STRING_ESCAPE_SEQUENCE, "regedit: Unrecognized escape sequence [\\%1!c!]\n"
+ STRING_UNKNOWN_DATA_FORMAT, "regedit: Unsupported registry data type [%1!u!]\n"
+ STRING_UNEXPECTED_EOL, "regedit: Unexpected end of line in '%1'.\n"
+ STRING_UNRECOGNIZED_LINE, "regedit: The line '%1' was not recognized.\n"
+ STRING_SETVALUE_FAILED, "regedit: Unable to add the registry value '%1' to '%2!S!'.\n"
+ STRING_OPEN_KEY_FAILED, "regedit: Unable to open the registry key '%1'.\n"
+ STRING_UNSUPPORTED_TYPE, "regedit: Unsupported registry data type [%1!u!] encountered in '%2'.\n"
+ STRING_EXPORT_AS_BINARY, "regedit: The registry value '%1' will be exported as binary data.\n"
+ STRING_INCORRECT_REG_CLASS, "regedit: Incorrect registry class specification in '%1'.\n"
+ STRING_REG_KEY_NOT_FOUND, "regedit: Unable to export '%1'. The specified registry key was not found.\n"
+ STRING_DELETE_REG_CLASS_FAILED, "regedit: Unable to delete the registry class '%1'.\n"
}
/* define language neutral resources */
diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index 353d5f9..eb56114 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -59,8 +59,7 @@ static HKEY reg_class_keys[] = {
#define CHECK_ENOUGH_MEMORY(p) \
if (!(p)) \
{ \
- fprintf(stderr, "regedit: file %s, line %d: Not enough memory\n", \
- __FILE__, __LINE__); \
+ output_message(STRING_OUT_OF_MEMORY, __FILE__, __LINE__); \
exit(NOT_ENOUGH_MEMORY); \
}
@@ -152,7 +151,7 @@ static BOOL convertHexToDWord(WCHAR* str, DWORD *dw)
WideCharToMultiByte(CP_ACP, 0, str, -1, buf, 9, NULL, NULL);
if (lstrlenW(str) > 8 || sscanf(buf, "%x%c", dw, &dummy) != 1) {
- fprintf(stderr, "regedit: ERROR, invalid hex value\n");
+ output_message(STRING_INVALID_HEX);
return FALSE;
}
return TRUE;
@@ -180,10 +179,8 @@ static BYTE* convertHexCSVToHex(WCHAR *str, DWORD *size)
wc = strtoulW(s,&end,16);
if (end == s || wc > 0xff || (*end && *end != ',')) {
- char* strA = GetMultiByteString(s);
- fprintf(stderr, "regedit: ERROR converting CSV hex stream. Invalid value at '%s'\n", strA);
+ output_message(STRING_CSV_HEX_ERROR, s);
HeapFree(GetProcessHeap(), 0, data);
- HeapFree(GetProcessHeap(), 0, strA);
return NULL;
}
*d++ =(BYTE)wc;
@@ -277,8 +274,7 @@ static int REGPROC_unescape_string(WCHAR* str)
str[val_idx] = str[str_idx];
break;
default:
- fprintf(stderr,"Warning! Unrecognized escape sequence: \\%c'\n",
- str[str_idx]);
+ output_message(STRING_ESCAPE_SEQUENCE, str[str_idx]);
str[val_idx] = str[str_idx];
break;
}
@@ -400,7 +396,7 @@ static LONG setValue(WCHAR* val_name, WCHAR* val_data, BOOL is_unicode)
}
else /* unknown format */
{
- fprintf(stderr, "regedit: ERROR, unknown data format\n");
+ output_message(STRING_UNKNOWN_DATA_FORMAT, dwDataType);
return ERROR_INVALID_DATA;
}
@@ -509,22 +505,17 @@ static void processSetValue(WCHAR* line, BOOL is_unicode)
}
while ( isspaceW(line[line_idx]) ) line_idx++;
if (!line[line_idx]) {
- fprintf(stderr, "regedit: warning: unexpected EOL\n");
+ output_message(STRING_UNEXPECTED_EOL, line);
return;
}
if (line[line_idx] != '=') {
- char* lineA;
line[line_idx] = '\"';
- lineA = GetMultiByteString(line);
- fprintf(stderr, "regedit: warning: unrecognized line: '%s'\n", lineA);
- HeapFree(GetProcessHeap(), 0, lineA);
+ output_message(STRING_UNRECOGNIZED_LINE, line);
return;
}
} else {
- char* lineA = GetMultiByteString(line);
- fprintf(stderr, "regedit: warning: unrecognized line: '%s'\n", lineA);
- HeapFree(GetProcessHeap(), 0, lineA);
+ output_message(STRING_UNRECOGNIZED_LINE, line);;
return;
}
line_idx++; /* skip the '=' character */
@@ -539,16 +530,7 @@ static void processSetValue(WCHAR* line, BOOL is_unicode)
REGPROC_unescape_string(val_name);
res = setValue(val_name, val_data, is_unicode);
if ( res != ERROR_SUCCESS )
- {
- char* val_nameA = GetMultiByteString(val_name);
- char* val_dataA = GetMultiByteString(val_data);
- fprintf(stderr, "regedit: ERROR Key %s not created. Value: %s, Data: %s\n",
- currentKeyName,
- val_nameA,
- val_dataA);
- HeapFree(GetProcessHeap(), 0, val_nameA);
- HeapFree(GetProcessHeap(), 0, val_dataA);
- }
+ output_message(STRING_SETVALUE_FAILED, val_name, currentKeyName);
}
/******************************************************************************
@@ -579,15 +561,10 @@ static void processRegEntry(WCHAR* stdInput, BOOL isUnicode)
*keyEnd='\0';
/* delete the key if we encounter '-' at the start of reg key */
- if ( stdInput[0] == '-')
- {
+ if (stdInput[0] == '-')
delete_registry_key(stdInput + 1);
- } else if ( openKeyW(stdInput) != ERROR_SUCCESS )
- {
- char* stdInputA = GetMultiByteString(stdInput);
- fprintf(stderr, "regedit: setValue failed to open key %s\n", stdInputA);
- HeapFree(GetProcessHeap(), 0, stdInputA);
- }
+ else if (openKeyW(stdInput) != ERROR_SUCCESS)
+ output_message(STRING_OPEN_KEY_FAILED, stdInput);
} else if( currentKeyHandle &&
(( stdInput[0] == '@') || /* reading a default @=data pair */
( stdInput[0] == '\"'))) /* reading a new value=data pair */
@@ -1199,14 +1176,8 @@ static void export_hkey(FILE *file, HKEY key,
default:
{
- char* key_nameA = GetMultiByteString(*reg_key_name_buf);
- char* value_nameA = GetMultiByteString(*val_name_buf);
- fprintf(stderr, "regedit: warning - unsupported registry format '%d', "
- "treat as binary\n", value_type);
- fprintf(stderr,"key name: \"%s\"\n", key_nameA);
- fprintf(stderr,"value name:\"%s\"\n\n", value_nameA);
- HeapFree(GetProcessHeap(), 0, key_nameA);
- HeapFree(GetProcessHeap(), 0, value_nameA);
+ output_message(STRING_UNSUPPORTED_TYPE, value_type, *reg_key_name_buf);
+ output_message(STRING_EXPORT_AS_BINARY, *val_name_buf);
}
/* falls through */
case REG_EXPAND_SZ:
@@ -1270,7 +1241,7 @@ static FILE *REGPROC_open_export_file(WCHAR *file_name, BOOL unicode)
file = fopen(file_nameA, "wb");
if (!file) {
perror("");
- fprintf(stderr, "regedit: Can't open file \"%s\"\n", file_nameA);
+ output_message(STRING_CANNOT_OPEN_FILE, file_name);
HeapFree(GetProcessHeap(), 0, file_nameA);
exit(1);
}
@@ -1330,9 +1301,7 @@ BOOL export_registry_key(WCHAR *file_name, WCHAR *reg_key_name, DWORD format)
/* open the specified key */
if (!parseKeyName(reg_key_name, ®_key_class, &branch_name)) {
- CHAR* key_nameA = GetMultiByteString(reg_key_name);
- fprintf(stderr, "regedit: Incorrect registry class specification in '%s'\n", key_nameA);
- HeapFree(GetProcessHeap(), 0, key_nameA);
+ output_message(STRING_INCORRECT_REG_CLASS, reg_key_name);
exit(1);
}
if (!branch_name[0]) {
@@ -1352,10 +1321,7 @@ BOOL export_registry_key(WCHAR *file_name, WCHAR *reg_key_name, DWORD format)
&line_buf_size, unicode);
RegCloseKey(key);
} else {
- CHAR* key_nameA = GetMultiByteString(reg_key_name);
- fprintf(stderr, "regedit: Can't export. Registry key '%s' does not exist!\n", key_nameA);
- HeapFree(GetProcessHeap(), 0, key_nameA);
- REGPROC_print_error();
+ output_message(STRING_REG_KEY_NOT_FOUND, reg_key_name);
}
} else {
unsigned int i;
@@ -1427,15 +1393,11 @@ void delete_registry_key(WCHAR *reg_key_name)
return;
if (!parseKeyName(reg_key_name, &key_class, &key_name)) {
- char* reg_key_nameA = GetMultiByteString(reg_key_name);
- fprintf(stderr, "regedit: Incorrect registry class specification in '%s'\n", reg_key_nameA);
- HeapFree(GetProcessHeap(), 0, reg_key_nameA);
+ output_message(STRING_INCORRECT_REG_CLASS, reg_key_name);
exit(1);
}
if (!*key_name) {
- char* reg_key_nameA = GetMultiByteString(reg_key_name);
- fprintf(stderr, "regedit: Can't delete registry class '%s'\n", reg_key_nameA);
- HeapFree(GetProcessHeap(), 0, reg_key_nameA);
+ output_message(STRING_DELETE_REG_CLASS_FAILED, reg_key_name);
exit(1);
}
diff --git a/programs/regedit/regproc.h b/programs/regedit/regproc.h
index 2104e5f..aff4bee 100644
--- a/programs/regedit/regproc.h
+++ b/programs/regedit/regproc.h
@@ -17,11 +17,15 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#include "resource.h"
+
#define KEY_MAX_LEN 1024
#define REG_FORMAT_5 1
#define REG_FORMAT_4 2
+void __cdecl output_message(unsigned int id, ...);
+
BOOL export_registry_key(WCHAR *file_name, WCHAR *reg_key_name, DWORD format);
BOOL import_registry_file(FILE *in);
void delete_registry_key(WCHAR *reg_key_name);
diff --git a/programs/regedit/resource.h b/programs/regedit/resource.h
index 37051d8..c3032a0 100644
--- a/programs/regedit/resource.h
+++ b/programs/regedit/resource.h
@@ -167,3 +167,17 @@
#define STRING_FILE_NOT_FOUND 3006
#define STRING_CANNOT_OPEN_FILE 3007
#define STRING_UNHANDLED_ACTION 3008
+#define STRING_OUT_OF_MEMORY 3009
+#define STRING_INVALID_HEX 3010
+#define STRING_CSV_HEX_ERROR 3011
+#define STRING_ESCAPE_SEQUENCE 3012
+#define STRING_UNKNOWN_DATA_FORMAT 3013
+#define STRING_UNEXPECTED_EOL 3014
+#define STRING_UNRECOGNIZED_LINE 3015
+#define STRING_SETVALUE_FAILED 3016
+#define STRING_OPEN_KEY_FAILED 3017
+#define STRING_UNSUPPORTED_TYPE 3018
+#define STRING_EXPORT_AS_BINARY 3019
+#define STRING_INCORRECT_REG_CLASS 3020
+#define STRING_REG_KEY_NOT_FOUND 3021
+#define STRING_DELETE_REG_CLASS_FAILED 3022
--
2.7.4
More information about the wine-patches
mailing list