about summary refs log tree commit diff
path: root/elf/eval.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1996-09-07 23:56:19 +0000
committerUlrich Drepper <drepper@redhat.com>1996-09-07 23:56:19 +0000
commit499e7464ed5c42246134fe708d783bf44a472c98 (patch)
tree785f6ad88c02bb872deac4e2034275689287e077 /elf/eval.c
parentedf5b2d7168982e1725f41e142b77e5ec88d7bf2 (diff)
downloadglibc-499e7464ed5c42246134fe708d783bf44a472c98.tar.gz
glibc-499e7464ed5c42246134fe708d783bf44a472c98.tar.xz
glibc-499e7464ed5c42246134fe708d783bf44a472c98.zip
update from main archive 960907
Sat Sep  7 14:00:33 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* catgets/catgets.c (catopen): Allocate sizeof(*result) bytes
	instead of sizeof(nl_catd) (which is just a pointer!).

Sat Sep  7 19:39:19 1996  Ulrich Drepper  <drepper@cygnus.com>

	* Makefile ($(objpfx)version-info.h): Generate from Banner files.
	* version.c (banner): Add contents of version-info.h to string.

	* Makerules: If $($(subdir)-version) is available name versioned
	shared library according to this value instead of glibc's version.

	* libio/Banner: New file.

	* elf/eval.c (funcall): Write error message in case function is
	not found.
	(eval): Recognize `_' in names.
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);