diff options
author | Gintautas Miliauskas <gintautas.miliauskas@gmail.com> | 2014-10-29 23:13:31 -0500 |
---|---|---|
committer | Austin Seipp <austin@well-typed.com> | 2014-10-29 23:13:32 -0500 |
commit | 5ce1266a7d323fd4fe4262f07be908d65e5b5b43 (patch) | |
tree | 0da3dfd51956fd6b9f75f4ee17aa1598c52554f3 /rts | |
parent | 257cbec2f605c31d335a6709b43754a88f184d9d (diff) | |
download | haskell-5ce1266a7d323fd4fe4262f07be908d65e5b5b43.tar.gz |
Use snwprintf instead of swprintf in rts/Linker.c.
Summary:
swprintf has different signatures in mingw32, where it does not include the
buffer size, and in mingw-w64, where it does. That of course breaks the code
as mingw-w64 treats the pointer to the format string as a size_t.
snwprintf is available in both environments and is consistent, so use that
instead.
Reviewers: simonmar, austin
Reviewed By: austin
Subscribers: #ghc_windows_task_force, thomie, carter, simonmar
Differential Revision: https://phabricator.haskell.org/D372
GHC Trac Issues: #9726
Diffstat (limited to 'rts')
-rw-r--r-- | rts/Linker.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/rts/Linker.c b/rts/Linker.c index 35cee2c44c..7d029c62ac 100644 --- a/rts/Linker.c +++ b/rts/Linker.c @@ -1968,18 +1968,19 @@ addDLL( pathchar *dll_name ) point character (.) to indicate that the module name has no extension. */ - buf = stgMallocBytes((pathlen(dll_name) + 10) * sizeof(wchar_t), "addDLL"); - swprintf(buf, L"%s.DLL", dll_name); + size_t bufsize = pathlen(dll_name) + 10; + buf = stgMallocBytes(bufsize * sizeof(wchar_t), "addDLL"); + snwprintf(buf, bufsize, L"%s.DLL", dll_name); instance = LoadLibraryW(buf); if (instance == NULL) { if (GetLastError() != ERROR_MOD_NOT_FOUND) goto error; // KAA: allow loading of drivers (like winspool.drv) - swprintf(buf, L"%s.DRV", dll_name); + snwprintf(buf, bufsize, L"%s.DRV", dll_name); instance = LoadLibraryW(buf); if (instance == NULL) { if (GetLastError() != ERROR_MOD_NOT_FOUND) goto error; // #1883: allow loading of unix-style libfoo.dll DLLs - swprintf(buf, L"lib%s.DLL", dll_name); + snwprintf(buf, bufsize, L"lib%s.DLL", dll_name); instance = LoadLibraryW(buf); if (instance == NULL) { goto error; |