diff options
-rw-r--r-- | dlfcn.c | 6 | ||||
-rw-r--r-- | test.c | 15 |
2 files changed, 21 insertions, 0 deletions
@@ -431,6 +431,12 @@ end: | |||
431 | char *dlerror( void ) | 431 | char *dlerror( void ) |
432 | { | 432 | { |
433 | char *error_pointer = dlerror_buffer; | 433 | char *error_pointer = dlerror_buffer; |
434 | |||
435 | /* If this is the second consecutive call to dlerror, return NULL */ | ||
436 | if (current_error == NULL) | ||
437 | { | ||
438 | return NULL; | ||
439 | } | ||
434 | 440 | ||
435 | #ifdef UNICODE | 441 | #ifdef UNICODE |
436 | errno_t err = 0; | 442 | errno_t err = 0; |
@@ -304,6 +304,21 @@ int main() | |||
304 | error = dlerror( ); | 304 | error = dlerror( ); |
305 | printf( "SUCCESS\tCould not get nonexistent symbol from global handle: %s\n", | 305 | printf( "SUCCESS\tCould not get nonexistent symbol from global handle: %s\n", |
306 | error ? error : "" ); | 306 | error ? error : "" ); |
307 | |||
308 | /* Test that the second call to dlerror() returns null as in the specs | ||
309 | See https://github.com/dlfcn-win32/dlfcn-win32/issues/34 */ | ||
310 | error = dlerror( ); | ||
311 | if( error == NULL ) | ||
312 | { | ||
313 | printf( "SUCCESS\tSecond consecutive call to dlerror returned NULL\n"); | ||
314 | } | ||
315 | else | ||
316 | { | ||
317 | printf( "ERROR\tSecond consecutive call to dlerror returned a non-NULL pointer: %p\n", error ); | ||
318 | CLOSE_LIB; | ||
319 | CLOSE_GLOBAL; | ||
320 | RETURN_ERROR; | ||
321 | } | ||
307 | } | 322 | } |
308 | 323 | ||
309 | function = dlsym(global, "fwrite"); | 324 | function = dlsym(global, "fwrite"); |