net: Use FormatMessageW() for better internationalization support. (try2)
Francois Gouget
fgouget at free.fr
Fri Oct 21 02:43:20 CDT 2011
This makes it possible to reorder the format string placeholders in message translations.
Also the last argument to STRING_USE_ENTRY is a DWORD, that is a regular unsigned int, not a long.
---
Using __ms_va_list this time.
programs/net/net.c | 24 +++++++++++++-----------
programs/net/net.rc | 18 +++++++++---------
2 files changed, 22 insertions(+), 20 deletions(-)
diff --git a/programs/net/net.c b/programs/net/net.c
index de83ccd..f626b0a 100644
--- a/programs/net/net.c
+++ b/programs/net/net.c
@@ -55,14 +55,16 @@ static int output_write(const WCHAR* str, int len)
return count;
}
-static int output_vprintf(const WCHAR* fmt, va_list va_args)
+static int output_vprintf(const WCHAR* fmt, __ms_va_list va_args)
{
WCHAR str[8192];
int len;
- len = vsnprintfW(str, sizeof(str)/sizeof(*str), fmt, va_args);
- if (len < 0)
- WINE_FIXME("String too long.\n");
+ SetLastError(NO_ERROR);
+ len = FormatMessageW(FORMAT_MESSAGE_FROM_STRING, fmt, 0, 0, str,
+ sizeof(str)/sizeof(*str), &va_args);
+ if (len == 0 && GetLastError() != NO_ERROR)
+ WINE_FIXME("Could not format string: le=%u, fmt=%s\n", GetLastError(), wine_dbgstr_w(fmt));
else
output_write(str, len);
return 0;
@@ -70,23 +72,23 @@ static int output_vprintf(const WCHAR* fmt, va_list va_args)
static int output_printf(const WCHAR* fmt, ...)
{
- va_list arguments;
+ __ms_va_list arguments;
- va_start(arguments, fmt);
+ __ms_va_start(arguments, fmt);
output_vprintf(fmt, arguments);
- va_end(arguments);
+ __ms_va_end(arguments);
return 0;
}
static int output_string(int msg, ...)
{
WCHAR fmt[8192];
- va_list arguments;
+ __ms_va_list arguments;
LoadStringW(GetModuleHandleW(NULL), msg, fmt, sizeof(fmt)/sizeof(fmt[0]));
- va_start(arguments, msg);
+ __ms_va_start(arguments, msg);
output_vprintf(fmt, arguments);
- va_end(arguments);
+ __ms_va_end(arguments);
return 0;
}
@@ -156,7 +158,7 @@ static BOOL net_use(int argc, const WCHAR* argv[])
static BOOL net_enum_services(void)
{
- static const WCHAR runningW[]={' ',' ',' ',' ','%','s','\n',0};
+ static const WCHAR runningW[]={' ',' ',' ',' ','%','1','\n',0};
SC_HANDLE SCManager;
LPENUM_SERVICE_STATUS_PROCESSW services;
DWORD size, i, count, resume;
diff --git a/programs/net/net.rc b/programs/net/net.rc
index eb0adc9..1ed0498 100644
--- a/programs/net/net.rc
+++ b/programs/net/net.rc
@@ -27,20 +27,20 @@ STRINGTABLE
STRING_USAGE, "The syntax of this command is:\n\nNET command [arguments]\n -or-\nNET command /HELP\n\nWhere 'command' is one of HELP, START, STOP or USE.\n"
STRING_START_USAGE, "The syntax of this command is:\n\nNET START [service]\n\nDisplays the list of running services if 'service' is omitted. Otherwise 'service' is the name of the service to start.\n"
STRING_STOP_USAGE, "The syntax of this command is:\n\nNET STOP service\n\nWhere 'service' is the name of the service to stop.\n"
- STRING_STOP_DEP, "Stopping dependent service: %s\n"
- STRING_CANT_STOP, "Could not stop service %s\n"
+ STRING_STOP_DEP, "Stopping dependent service: %1\n"
+ STRING_CANT_STOP, "Could not stop service %1\n"
STRING_NO_SCM, "Could not get handle to service control manager.\n"
STRING_NO_SVCHANDLE, "Could not get handle to service.\n"
- STRING_START_SVC, "The %s service is starting.\n"
- STRING_START_SVC_SUCCESS, "The %s service was started successfully.\n"
- STRING_START_SVC_FAIL, "The %s service failed to start.\n"
- STRING_STOP_SVC, "The %s service is stopping.\n"
- STRING_STOP_SVC_SUCCESS, "The %s service was stopped successfully.\n"
- STRING_STOP_SVC_FAIL, "The %s service failed to stop.\n"
+ STRING_START_SVC, "The %1 service is starting.\n"
+ STRING_START_SVC_SUCCESS, "The %1 service was started successfully.\n"
+ STRING_START_SVC_FAIL, "The %1 service failed to start.\n"
+ STRING_STOP_SVC, "The %1 service is stopping.\n"
+ STRING_STOP_SVC_SUCCESS, "The %1 service was stopped successfully.\n"
+ STRING_STOP_SVC_FAIL, "The %1 service failed to stop.\n"
STRING_RUNNING_HEADER, "The following services are running:\n"
STRING_NO_ENTRIES, "There are no entries in the list.\n"
STRING_USE_HEADER, "\nStatus Local Remote\n---------------------------------------------------------------\n"
- STRING_USE_ENTRY, "%s %s %s Open resources: %lu\n"
+ STRING_USE_ENTRY, "%1 %2 %3 Open resources: %4!u!\n"
STRING_OK, "OK"
STRING_PAUSED, "Paused"
STRING_SESSLOST, "Disconnected"
--
1.7.6.3
More information about the wine-patches
mailing list