Merge branch 'v0.10' into v1.x
This commit is contained in:
commit
eb986397c1
3
.gitignore
vendored
3
.gitignore
vendored
@ -49,7 +49,10 @@ Makefile.in
|
|||||||
/test/run-benchmarks.dSYM
|
/test/run-benchmarks.dSYM
|
||||||
|
|
||||||
*.sln
|
*.sln
|
||||||
|
*.sln.cache
|
||||||
|
*.ncb
|
||||||
*.vcproj
|
*.vcproj
|
||||||
|
*.vcproj*.user
|
||||||
*.vcxproj
|
*.vcxproj
|
||||||
*.vcxproj.filters
|
*.vcxproj.filters
|
||||||
*.vcxproj.user
|
*.vcxproj.user
|
||||||
|
|||||||
35
src/win/dl.c
35
src/win/dl.c
@ -69,17 +69,44 @@ const char* uv_dlerror(const uv_lib_t* lib) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void uv__format_fallback_error(uv_lib_t* lib, int errorno){
|
||||||
|
DWORD_PTR args[1] = { (DWORD_PTR) errorno };
|
||||||
|
LPSTR fallback_error = "error: %1!d!";
|
||||||
|
|
||||||
|
FormatMessageA(FORMAT_MESSAGE_FROM_STRING |
|
||||||
|
FORMAT_MESSAGE_ARGUMENT_ARRAY |
|
||||||
|
FORMAT_MESSAGE_ALLOCATE_BUFFER,
|
||||||
|
fallback_error, 0, 0,
|
||||||
|
(LPSTR) &lib->errmsg,
|
||||||
|
0, (va_list*) args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int uv__dlerror(uv_lib_t* lib, int errorno) {
|
static int uv__dlerror(uv_lib_t* lib, int errorno) {
|
||||||
|
DWORD res;
|
||||||
|
|
||||||
if (lib->errmsg) {
|
if (lib->errmsg) {
|
||||||
LocalFree((void*)lib->errmsg);
|
LocalFree((void*)lib->errmsg);
|
||||||
lib->errmsg = NULL;
|
lib->errmsg = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (errorno) {
|
if (errorno) {
|
||||||
FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
|
res = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
||||||
FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errorno,
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
||||||
MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
|
FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errorno,
|
||||||
(LPSTR)&lib->errmsg, 0, NULL);
|
MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
|
||||||
|
(LPSTR) &lib->errmsg, 0, NULL);
|
||||||
|
if (!res && GetLastError() == ERROR_MUI_FILE_NOT_FOUND) {
|
||||||
|
res = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
||||||
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
||||||
|
FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errorno,
|
||||||
|
0, (LPSTR) &lib->errmsg, 0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!res) {
|
||||||
|
uv__format_fallback_error(lib, errorno);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return errorno ? -1 : 0;
|
return errorno ? -1 : 0;
|
||||||
|
|||||||
@ -26,31 +26,28 @@
|
|||||||
|
|
||||||
TEST_IMPL(dlerror) {
|
TEST_IMPL(dlerror) {
|
||||||
const char* path = "test/fixtures/load_error.node";
|
const char* path = "test/fixtures/load_error.node";
|
||||||
|
const char* dlerror_no_error = "no error";
|
||||||
const char* msg;
|
const char* msg;
|
||||||
uv_lib_t lib;
|
uv_lib_t lib;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
#ifdef __linux__
|
lib.errmsg = NULL;
|
||||||
const char* dlerror_desc = "file too short";
|
lib.handle = NULL;
|
||||||
#elif defined (__sun__)
|
msg = uv_dlerror(&lib);
|
||||||
const char* dlerror_desc = "unknown file type";
|
ASSERT(msg != NULL);
|
||||||
#elif defined (_WIN32)
|
ASSERT(strstr(msg, dlerror_no_error) != NULL);
|
||||||
const char* dlerror_desc = "%1 is not a valid Win32 application";
|
|
||||||
#else
|
|
||||||
const char* dlerror_desc = "";
|
|
||||||
#endif
|
|
||||||
|
|
||||||
r = uv_dlopen(path, &lib);
|
r = uv_dlopen(path, &lib);
|
||||||
ASSERT(r == -1);
|
ASSERT(r == -1);
|
||||||
|
|
||||||
msg = uv_dlerror(&lib);
|
msg = uv_dlerror(&lib);
|
||||||
ASSERT(msg != NULL);
|
ASSERT(msg != NULL);
|
||||||
ASSERT(strstr(msg, dlerror_desc) != NULL);
|
ASSERT(strstr(msg, dlerror_no_error) == NULL);
|
||||||
|
|
||||||
/* Should return the same error twice in a row. */
|
/* Should return the same error twice in a row. */
|
||||||
msg = uv_dlerror(&lib);
|
msg = uv_dlerror(&lib);
|
||||||
ASSERT(msg != NULL);
|
ASSERT(msg != NULL);
|
||||||
ASSERT(strstr(msg, dlerror_desc) != NULL);
|
ASSERT(strstr(msg, dlerror_no_error) == NULL);
|
||||||
|
|
||||||
uv_dlclose(&lib);
|
uv_dlclose(&lib);
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user