Re: [PATCH] msvcrt: Add tmpnam_s() and _wtmpnam_s() with tests.
Hi, it this patch fixing any application or is it only letting it execute a little further? It doesn't compile: ../../../wine_src/dlls/msvcr71/msvcr71.spec:667: function 'MSVCRT_wtmpnam' not defined ../../../wine_src/dlls/msvcr70/msvcr70.spec:671: function 'MSVCRT_wtmpnam' not defined ... On 12/10/15 00:08, lejcik wrote:
/********************************************************************* + * tmpnam_s (MSVCRT.@) + */ +int CDECL MSVCRT_tmpnam_s(char *s, MSVCRT_size_t size) +{ + char tmpstr[16]; + char *p; + int count, tmpsize; + + if (!MSVCRT_CHECK_PMT(s != NULL)) + return MSVCRT_EINVAL; + + msvcrt_int_to_base32(GetCurrentProcessId(), tmpstr); + tmpsize = MSVCRT__snprintf(s, size, "\\s%s.", tmpstr); + if (tmpsize == -1) + return MSVCRT_ERANGE; + + p = s + tmpsize; You can reuse s variable here (s += tmpsize). + size -= tmpsize; + for (count = 0; count < MSVCRT_TMP_MAX; count++) According to MSDN TMP_MAX_S should be used here. It's different then TMP_MAX. + { + tmpsize = msvcrt_int_to_base32(tmpnam_unique++, tmpstr); + if ((MSVCRT_size_t) tmpsize > size) + return MSVCRT_ERANGE; Is invalid parameter handler called in this case?
char * CDECL MSVCRT_tmpnam(char *s) { ... + return MSVCRT_tmpnam_s(s, MAX_PATH) == 0 ? s : NULL; You can't use tmpnam_s here because of TMP_MAX and TMP_MAX_S inequality (unless MSDN is wrong here).
Thanks, Piotr
participants (1)
-
Piotr Caban