#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS /* for __sys_errlist, __sys_nerr, _open(),
_wfopen(), _wopen(), fopen(), freopen(),
- getenv(), gmtime(), mbstowcs(), sprintf(),
- strcpy(), wcstombs(),
+ getenv(), gmtime(), sprintf(), strcpy(),
in tests: localtime(), open(), sscanf() */
#endif
#endif /* _MSC_VER */
#ifndef _UNICODE
/* convert multibyte input to unicode */
- needed = mbstowcs(NULL, in, 0);
- if(needed == (size_t)-1 || needed >= max_path_len)
+ if(mbstowcs_s(&needed, NULL, 0, in, 0))
+ goto cleanup;
+ if(!needed || needed >= max_path_len)
goto cleanup;
- ++needed; /* for NUL */
ibuf = (malloc)(needed * sizeof(wchar_t));
if(!ibuf)
goto cleanup;
- count = mbstowcs(ibuf, in, needed);
- if(count == (size_t)-1 || count >= needed)
+ if(mbstowcs_s(&count, ibuf, needed, in, needed - 1))
+ goto cleanup;
+ if(count != needed)
goto cleanup;
in_w = ibuf;
#else
#ifndef _UNICODE
/* convert unicode full path to multibyte output */
- needed = wcstombs(NULL, fbuf, 0);
- if(needed == (size_t)-1 || needed >= max_path_len)
+ if(wcstombs_s(&needed, NULL, 0, fbuf, 0))
+ goto cleanup;
+ if(!needed || needed >= max_path_len)
goto cleanup;
- ++needed; /* for NUL */
obuf = (malloc)(needed);
if(!obuf)
goto cleanup;
- count = wcstombs(obuf, fbuf, needed);
- if(count == (size_t)-1 || count >= needed)
+ if(wcstombs_s(&count, obuf, needed, fbuf, needed - 1))
+ goto cleanup;
+ if(count != needed)
goto cleanup;
*out = obuf;
obuf = NULL;
{
char *p;
wchar_t wbuf[256];
+ DWORD wlen;
if(!buflen)
return NULL;
/* We return the local codepage version of the error string because if it is
output to the user's terminal it will likely be with functions which
expect the local codepage (eg fprintf, failf, infof). */
- if(FormatMessageW((FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS), NULL, err,
- LANG_NEUTRAL, wbuf, CURL_ARRAYSIZE(wbuf), NULL)) {
- size_t written = wcstombs(buf, wbuf, buflen - 1);
- if(written != (size_t)-1)
- buf[written] = '\0';
- else
- *buf = '\0';
- }
-
- /* Truncate multiple lines */
- p = strchr(buf, '\n');
- if(p) {
- if(p > buf && *(p-1) == '\r')
- *(p-1) = '\0';
- else
- *p = '\0';
+ wlen = FormatMessageW((FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS), NULL, err,
+ LANG_NEUTRAL, wbuf, CURL_ARRAYSIZE(wbuf), NULL);
+ if(wlen && !wcstombs_s(NULL, buf, buflen, wbuf, wlen)) {
+ /* Truncate multiple lines */
+ p = strchr(buf, '\n');
+ if(p) {
+ if(p > buf && *(p-1) == '\r')
+ *(p-1) = '\0';
+ else
+ *p = '\0';
+ }
}
return *buf ? buf : NULL;
"wcsdup" => 1,
"wcscpy" => 1,
"wcsncpy" => 1,
+ "mbstowcs" => 1,
+ "wcstombs" => 1,
"LoadLibrary" => 1,
"LoadLibraryA" => 1,
"LoadLibraryW" => 1,