Hi Stefan,
On 05/18/17 13:33, Stefan Dösinger wrote:
+/* ??_Open_dir@sys@tr2@std@@YAPAXPA_WPB_WAAHAAW4file_type@123@@Z */ +/* ??_Open_dir@sys@tr2@std@@YAPEAXPEA_WPEB_WAEAHAEAW4file_type@123@@Z */ +void* __cdecl tr2_sys__Open_dir_wchar(wchar_t* target, wchar_t const* dest, int* err_code, enum file_type* type) { HANDLE handle;
- WIN32_FIND_DATAA data;
- char temppath[MAX_PATH];
- TRACE("(%p %s %p %p)\n", target, debugstr_a(dest), err_code, type);
- if(strlen(dest) > MAX_PATH - 3) {
- WIN32_FIND_DATAW data;
- wchar_t temppath[MAX_PATH];
- static const wchar_t dot[] = {'.', 0};
- static const wchar_t dotdot[] = {'.', '.', 0};
- static const wchar_t asterisk[] = {'\', '*', 0};
- TRACE("(%p %s %p %p)\n", target, debugstr_w(dest), err_code, type);
- if(wcslen(dest) > MAX_PATH - 3) { *err_code = ERROR_BAD_PATHNAME; return NULL; }
Could you please check if there really is such a length limit in wchar version of the function?
+/* ?_Open_dir@sys@tr2@std@@YAPAXAAY0BAE@DPBDAAHAAW4file_type@123@@Z */ +/* ?_Open_dir@sys@tr2@std@@YAPEAXAEAY0BAE@DPEBDAEAHAEAW4file_type@123@@Z */ +void* __cdecl tr2_sys__Open_dir(char* target, char const* dest, int* err_code, enum file_type* type) +{
- void *handle;
- size_t len;
- wchar_t target_w[MAX_PATH];
- wchar_t *dest_w = NULL;
- TRACE("(%p %s %p %p)\n", target, debugstr_a(dest), err_code, type);
- if (dest)
- {
len = strlen(dest) + 1;
dest_w = malloc(sizeof(*dest_w) * len);
You don't need to allocate dest_w dynamically. Its length is limited to ~MAX_PATH anyway.
Thanks, Piotr