net: Remove an untranslatable string from the resources.
Francois Gouget
fgouget at codeweavers.com
Mon Aug 29 13:30:46 CDT 2011
Add some output_xxx() functions so we can print strings that don't come from resources.
Also protect against buffer overflows in output_vprintf() and constify the output_xxx() functions.
---
programs/net/net.c | 33 +++++++++++++++++++++++++++------
programs/net/net.rc | 1 -
programs/net/resources.h | 1 -
3 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/programs/net/net.c b/programs/net/net.c
index ed26b43..de83ccd 100644
--- a/programs/net/net.c
+++ b/programs/net/net.c
@@ -28,7 +28,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(net);
#define NET_START 0001
#define NET_STOP 0002
-static int output_write(WCHAR* str, int len)
+static int output_write(const WCHAR* str, int len)
{
DWORD ret, count;
ret = WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), str, len, &count, NULL);
@@ -55,17 +55,37 @@ static int output_write(WCHAR* str, int len)
return count;
}
-static int output_string(int msg, ...)
+static int output_vprintf(const WCHAR* fmt, va_list va_args)
{
- WCHAR fmt[8192];
WCHAR str[8192];
int len;
+
+ len = vsnprintfW(str, sizeof(str)/sizeof(*str), fmt, va_args);
+ if (len < 0)
+ WINE_FIXME("String too long.\n");
+ else
+ output_write(str, len);
+ return 0;
+}
+
+static int output_printf(const WCHAR* fmt, ...)
+{
+ va_list arguments;
+
+ va_start(arguments, fmt);
+ output_vprintf(fmt, arguments);
+ va_end(arguments);
+ return 0;
+}
+
+static int output_string(int msg, ...)
+{
+ WCHAR fmt[8192];
va_list arguments;
LoadStringW(GetModuleHandleW(NULL), msg, fmt, sizeof(fmt)/sizeof(fmt[0]));
va_start(arguments, msg);
- len = vsprintfW(str, fmt, arguments);
- output_write(str, len);
+ output_vprintf(fmt, arguments);
va_end(arguments);
return 0;
}
@@ -136,6 +156,7 @@ static BOOL net_use(int argc, const WCHAR* argv[])
static BOOL net_enum_services(void)
{
+ static const WCHAR runningW[]={' ',' ',' ',' ','%','s','\n',0};
SC_HANDLE SCManager;
LPENUM_SERVICE_STATUS_PROCESSW services;
DWORD size, i, count, resume;
@@ -164,7 +185,7 @@ static BOOL net_enum_services(void)
output_string(STRING_RUNNING_HEADER);
for(i = 0; i < count; i++)
{
- output_string(STRING_RUNNING, services[i].lpDisplayName);
+ output_printf(runningW, services[i].lpDisplayName);
WINE_TRACE("service=%s state=%d controls=%x\n",
wine_dbgstr_w(services[i].lpServiceName),
services[i].ServiceStatusProcess.dwCurrentState,
diff --git a/programs/net/net.rc b/programs/net/net.rc
index 10bb678..baadbfb 100644
--- a/programs/net/net.rc
+++ b/programs/net/net.rc
@@ -38,7 +38,6 @@ STRINGTABLE
STRING_STOP_SVC_SUCCESS, "The %s service was stopped successfully.\n"
STRING_STOP_SVC_FAIL, "The %s service failed to stop.\n"
STRING_RUNNING_HEADER, "The following services are running:\n"
- STRING_RUNNING, " %s\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"
diff --git a/programs/net/resources.h b/programs/net/resources.h
index 35aebe3..ad72142 100644
--- a/programs/net/resources.h
+++ b/programs/net/resources.h
@@ -41,4 +41,3 @@
#define STRING_CONN 122
#define STRING_RECONN 123
#define STRING_RUNNING_HEADER 124
-#define STRING_RUNNING 125
--
1.7.5.4
More information about the wine-patches
mailing list