ash,hush: set $HOSTNAME is bash compat. Closes 7028

function                                             old     new   delta
hush_main                                           1056    1128     +72
ash_main                                            1442    1487     +45

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2014-04-15 11:43:29 +02:00
parent ad16741ccd
commit 3fa97af7cc
2 changed files with 16 additions and 1 deletions

View File

@ -41,6 +41,7 @@
#include <setjmp.h> #include <setjmp.h>
#include <fnmatch.h> #include <fnmatch.h>
#include <sys/times.h> #include <sys/times.h>
#include <sys/utsname.h> /* for setting $HOSTNAME */
#include "busybox.h" /* for applet_names */ #include "busybox.h" /* for applet_names */
#include "unicode.h" #include "unicode.h"
@ -13018,6 +13019,11 @@ init(void)
#if ENABLE_ASH_BASH_COMPAT #if ENABLE_ASH_BASH_COMPAT
p = lookupvar("SHLVL"); p = lookupvar("SHLVL");
setvar("SHLVL", utoa((p ? atoi(p) : 0) + 1), VEXPORT); setvar("SHLVL", utoa((p ? atoi(p) : 0) + 1), VEXPORT);
if (!lookupvar("HOSTNAME")) {
struct utsname uts;
uname(&uts);
setvar2("HOSTNAME", uts.nodename);
}
#endif #endif
p = lookupvar("PWD"); p = lookupvar("PWD");
if (p) { if (p) {

View File

@ -91,6 +91,7 @@
#if ENABLE_HUSH_CASE #if ENABLE_HUSH_CASE
# include <fnmatch.h> # include <fnmatch.h>
#endif #endif
#include <sys/utsname.h> /* for setting $HOSTNAME */
#include "busybox.h" /* for APPLET_IS_NOFORK/NOEXEC */ #include "busybox.h" /* for APPLET_IS_NOFORK/NOEXEC */
#include "unicode.h" #include "unicode.h"
@ -7786,6 +7787,14 @@ int hush_main(int argc, char **argv)
/* Export PWD */ /* Export PWD */
set_pwd_var(/*exp:*/ 1); 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 _, /* bash also exports SHLVL and _,
* and sets (but doesn't export) the following variables: * and sets (but doesn't export) the following variables:
* BASH=/bin/bash * BASH=/bin/bash
@ -7794,7 +7803,6 @@ int hush_main(int argc, char **argv)
* HOSTTYPE=i386 * HOSTTYPE=i386
* MACHTYPE=i386-pc-linux-gnu * MACHTYPE=i386-pc-linux-gnu
* OSTYPE=linux-gnu * OSTYPE=linux-gnu
* HOSTNAME=<xxxxxxxxxx>
* PPID=<NNNNN> - we also do it elsewhere * PPID=<NNNNN> - we also do it elsewhere
* EUID=<NNNNN> * EUID=<NNNNN>
* UID=<NNNNN> * UID=<NNNNN>
@ -7822,6 +7830,7 @@ int hush_main(int argc, char **argv)
* PS2='> ' * PS2='> '
* PS4='+ ' * PS4='+ '
*/ */
#endif
#if ENABLE_FEATURE_EDITING #if ENABLE_FEATURE_EDITING
G.line_input_state = new_line_input_t(FOR_SHELL); G.line_input_state = new_line_input_t(FOR_SHELL);