ash,hush: set $HOSTNAME is bash compat. Closes 7028
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 15 Apr 2014 09:43:29 +0000 (11:43 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 15 Apr 2014 09:43:29 +0000 (11:43 +0200)
function                                             old     new   delta
hush_main                                           1056    1128     +72
ash_main                                            1442    1487     +45

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash.c
shell/hush.c

index 7a097c814c309777cf1cd6b2f925cd8c925d8401..cabeb40c5668df83a12b11b2c45d32832dde0dd1 100644 (file)
@@ -41,6 +41,7 @@
 #include <setjmp.h>
 #include <fnmatch.h>
 #include <sys/times.h>
+#include <sys/utsname.h> /* for setting $HOSTNAME */
 
 #include "busybox.h" /* for applet_names */
 #include "unicode.h"
@@ -13018,6 +13019,11 @@ init(void)
 #if ENABLE_ASH_BASH_COMPAT
                p = lookupvar("SHLVL");
                setvar("SHLVL", utoa((p ? atoi(p) : 0) + 1), VEXPORT);
+               if (!lookupvar("HOSTNAME")) {
+                       struct utsname uts;
+                       uname(&uts);
+                       setvar2("HOSTNAME", uts.nodename);
+               }
 #endif
                p = lookupvar("PWD");
                if (p) {
index 7b0ea8b0c1d4c1445637dbfc10e46644b8fe3b63..e1d0ece29f7b9732a57f60a61c7bcad1aae99f0b 100644 (file)
@@ -91,6 +91,7 @@
 #if ENABLE_HUSH_CASE
 # include <fnmatch.h>
 #endif
+#include <sys/utsname.h> /* for setting $HOSTNAME */
 
 #include "busybox.h"  /* for APPLET_IS_NOFORK/NOEXEC */
 #include "unicode.h"
@@ -7786,6 +7787,14 @@ int hush_main(int argc, char **argv)
 
        /* Export PWD */
        set_pwd_var(/*exp:*/ 1);
+
+#if ENABLE_HUSH_BASH_COMPAT
+       /* Set (but not export) HOSTNAME unless already set */
+       if (!get_local_var_value("HOSTNAME")) {
+               struct utsname uts;
+               uname(&uts);
+               set_local_var_from_halves("HOSTNAME", uts.nodename);
+       }
        /* bash also exports SHLVL and _,
         * and sets (but doesn't export) the following variables:
         * BASH=/bin/bash
@@ -7794,7 +7803,6 @@ int hush_main(int argc, char **argv)
         * HOSTTYPE=i386
         * MACHTYPE=i386-pc-linux-gnu
         * OSTYPE=linux-gnu
-        * HOSTNAME=<xxxxxxxxxx>
         * PPID=<NNNNN> - we also do it elsewhere
         * EUID=<NNNNN>
         * UID=<NNNNN>
@@ -7822,6 +7830,7 @@ int hush_main(int argc, char **argv)
         * PS2='> '
         * PS4='+ '
         */
+#endif
 
 #if ENABLE_FEATURE_EDITING
        G.line_input_state = new_line_input_t(FOR_SHELL);