summaryrefslogtreecommitdiff
path: root/elf/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'elf/eval.c')
-rw-r--r--elf/eval.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/elf/eval.c b/elf/eval.c
index 91415bb6b6..59eb234166 100644
--- a/elf/eval.c
+++ b/elf/eval.c
@@ -1,6 +1,7 @@
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
+#include <unistd.h>
#include <dlfcn.h>
static void *funcall (char **stringp);
@@ -27,6 +28,13 @@ funcall (char **stringp)
/* Swallow closing paren. */
++*stringp;
+ if (args[0] == NULL)
+ {
+ static const char unknown[] = "Unknown function\n";
+ write (1, unknown, sizeof unknown - 1);
+ return NULL;
+ }
+
/* Do it to it. */
__builtin_return (__builtin_apply (args[0],
&argcookie,
@@ -81,7 +89,7 @@ eval (char **stringp)
value = p;
do
++p;
- while (*p != '\0' && !isspace (*p) && !ispunct (*p));
+ while (*p != '\0' && !isspace (*p) && (!ispunct (*p) || *p == '_'));
c = *p;
*p = '\0';
value = dlsym (NULL, value);