diff options
Diffstat (limited to 'dlfcn')
-rw-r--r-- | dlfcn/dlerror.c | 5 | ||||
-rw-r--r-- | dlfcn/errmsg1.c | 6 |
2 files changed, 8 insertions, 3 deletions
diff --git a/dlfcn/dlerror.c b/dlfcn/dlerror.c index 6ce601d..59ee0b8 100644 --- a/dlfcn/dlerror.c +++ b/dlfcn/dlerror.c @@ -46,7 +46,7 @@ static void free_key_mem (void *mem); char * dlerror (void) { - char *buf; + char *buf = NULL; struct dl_action_result *result; /* Get error string. */ @@ -64,9 +64,8 @@ dlerror (void) free ((char *) result->errstring); result->errstring = NULL; } - buf = NULL; } - else + else if (result->errstring != NULL) { buf = (char *) result->errstring; if (__asprintf (&buf, result->errcode != 0 ? "%s: %s: %s" : "%s: %s", diff --git a/dlfcn/errmsg1.c b/dlfcn/errmsg1.c index a7bb9b8..b455ea9 100644 --- a/dlfcn/errmsg1.c +++ b/dlfcn/errmsg1.c @@ -27,6 +27,12 @@ main (void) void *h; const char *s; + /* Test that dlerror works initially. */ + s = dlerror (); + printf ("dlerror() without prior dl*() call returned: %s\n", s); + if (s != NULL) + return 1; + h = dlopen ("errmsg1mod.so", RTLD_NOW); if (h != NULL) { |