summaryrefslogtreecommitdiff
path: root/dlfcn
diff options
context:
space:
mode:
Diffstat (limited to 'dlfcn')
-rw-r--r--dlfcn/dlerror.c5
-rw-r--r--dlfcn/errmsg1.c6
2 files changed, 8 insertions, 3 deletions
diff --git a/dlfcn/dlerror.c b/dlfcn/dlerror.c
index 6ce601d05b..59ee0b8c54 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 a7bb9b8272..b455ea97a5 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)
{