From b14a08f38819d8e799525a08024a2a18746c5c7a Mon Sep 17 00:00:00 2001 From: Detlef Riekenberg Date: Thu, 11 Feb 2010 22:57:21 +0100 Subject: [PATCH] shlwapi: Return the correct length from GetAcceptLanguagesA. --- dlls/shlwapi/ordinal.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/dlls/shlwapi/ordinal.c b/dlls/shlwapi/ordinal.c index 60ce0d1b4f9..315208c1614 100644 --- a/dlls/shlwapi/ordinal.c +++ b/dlls/shlwapi/ordinal.c @@ -526,6 +526,8 @@ HRESULT WINAPI GetAcceptLanguagesA( LPSTR langbuf, LPDWORD buflen) DWORD buflenW, convlen; HRESULT retval; + TRACE("(%p, %p) *%p: %d\n", langbuf, buflen, buflen, buflen ? *buflen : -1); + if(!langbuf || !buflen || !*buflen) return E_FAIL; buflenW = *buflen; @@ -535,11 +537,20 @@ HRESULT WINAPI GetAcceptLanguagesA( LPSTR langbuf, LPDWORD buflen) if (retval == S_OK) { convlen = WideCharToMultiByte(CP_ACP, 0, langbufW, -1, langbuf, *buflen, NULL, NULL); + convlen--; /* do not count the terminating 0 */ } else /* copy partial string anyway */ { convlen = WideCharToMultiByte(CP_ACP, 0, langbufW, *buflen, langbuf, *buflen, NULL, NULL); - if (convlen < *buflen) langbuf[convlen] = 0; + if (convlen < *buflen) + { + langbuf[convlen] = 0; + convlen--; /* do not count the terminating 0 */ + } + else + { + convlen = *buflen; + } } *buflen = buflenW ? convlen : 0; -- 2.11.4.GIT