# HG changeset patch # User Joseph Arceneaux # Date 713071447 0 # Node ID c519b70eb50b527724de7a3b4529e38f27fb3b8b # Parent eb8a7ea2798e99874b55d862f298b30cb49857ce Replaced fuctions egetenv, Fgetenv, getenv_internal, which had disappeared. diff -r eb8a7ea2798e -r c519b70eb50b src/callproc.c --- a/src/callproc.c Thu Aug 06 02:56:35 1992 +0000 +++ b/src/callproc.c Thu Aug 06 03:24:07 1992 +0000 @@ -128,7 +128,7 @@ CHECK_STRING (args[0], 0); - if (nargs <= 1 || NULL (args[1])) + if (nargs <= 1 || NILP (args[1])) args[1] = build_string ("/dev/null"); else args[1] = Fexpand_file_name (args[1], current_buffer->directory); @@ -169,7 +169,7 @@ } /* Search for program; barf if not found. */ openp (Vexec_path, args[0], "", &path, 1); - if (NULL (path)) + if (NILP (path)) { close (filefd); report_file_error ("Searching for program", Fcons (args[0], Qnil)); @@ -267,9 +267,9 @@ while ((nread = read (fd[0], buf, sizeof buf)) > 0) { immediate_quit = 0; - if (!NULL (buffer)) + if (!NILP (buffer)) insert (buf, nread); - if (!NULL (display) && INTERACTIVE) + if (!NILP (display) && INTERACTIVE) redisplay_preserve_echo_area (); immediate_quit = 1; QUIT; @@ -337,7 +337,7 @@ Fwrite_region (start, end, filename_string, Qnil, Qlambda); record_unwind_protect (delete_temp_file, filename_string); - if (!NULL (args[3])) + if (!NILP (args[3])) Fdelete_region (start, end); args[3] = filename_string; @@ -456,6 +456,66 @@ _exit (1); } +static int +getenv_internal (var, varlen, value, valuelen) + char *var; + int varlen; + char **value; + int *valuelen; +{ + Lisp_Object scan; + + for (scan = Vprocess_environment; CONSP (scan); scan = XCONS (scan)->cdr) + { + Lisp_Object entry = XCONS (scan)->car; + + if (XTYPE (entry) == Lisp_String + && XSTRING (entry)->size > varlen + && XSTRING (entry)->data[varlen] == '=' + && ! bcmp (XSTRING (entry)->data, var, varlen)) + { + *value = (char *) XSTRING (entry)->data + (varlen + 1); + *valuelen = XSTRING (entry)->size - (varlen + 1); + return 1; + } + } + + return 0; +} + +DEFUN ("getenv", Fgetenv, Sgetenv, 1, 2, 0, + "Return the value of environment variable VAR, as a string.\n\ +VAR should be a string. Value is nil if VAR is undefined in the environment.\n\ +This function consults the variable ``process-environment'' for its value.") + (var) + Lisp_Object var; +{ + char *value; + int valuelen; + + CHECK_STRING (var, 0); + if (getenv_internal (XSTRING (var)->data, XSTRING (var)->size, + &value, &valuelen)) + return make_string (value, valuelen); + else + return Qnil; +} + +/* A version of getenv that consults process_environment, easily + callable from C. */ +char * +egetenv (var) + char *var; +{ + char *value; + int valuelen; + + if (getenv_internal (var, strlen (var), &value, &valuelen)) + return value; + else + return 0; +} + #endif /* not VMS */ init_callproc () @@ -522,4 +582,5 @@ defsubr (&Scall_process); #endif defsubr (&Scall_process_region); + defsubr (&Sgetenv); }