author | Stefan Teleman <stefan.teleman@oracle.com> |
Tue, 11 Nov 2014 14:04:02 -0800 | |
branch | s11-update |
changeset 3462 | 3fbdd7a202d6 |
permissions | -rw-r--r-- |
3462
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1 |
BASH PATCH REPORT |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
2 |
================= |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
3 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
4 |
Bash-Release: 4.1 |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
5 |
Patch-ID: bash41-014 |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
6 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
7 |
Bug-Reported-by: Florian Weimer <[email protected]> |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
8 |
Bug-Reference-ID: |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
9 |
Bug-Reference-URL: |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
10 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
11 |
Bug-Description: |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
12 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
13 |
This patch changes the encoding bash uses for exported functions to avoid |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
14 |
clashes with shell variables and to avoid depending only on an environment |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
15 |
variable's contents to determine whether or not to interpret it as a shell |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
16 |
function. |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
17 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
18 |
Patch (apply with `patch -p0'): |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
19 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
20 |
*** ../bash-4.1.13/variables.c 2014-09-16 19:27:38.000000000 -0400 |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
21 |
--- variables.c 2014-09-27 20:57:46.000000000 -0400 |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
22 |
*************** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
23 |
*** 80,83 **** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
24 |
--- 80,88 ---- |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
25 |
#define ifsname(s) ((s)[0] == 'I' && (s)[1] == 'F' && (s)[2] == 'S' && (s)[3] == '\0') |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
26 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
27 |
+ #define BASHFUNC_PREFIX "BASH_FUNC_" |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
28 |
+ #define BASHFUNC_PREFLEN 10 /* == strlen(BASHFUNC_PREFIX */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
29 |
+ #define BASHFUNC_SUFFIX "%%" |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
30 |
+ #define BASHFUNC_SUFFLEN 2 /* == strlen(BASHFUNC_SUFFIX) */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
31 |
+ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
32 |
extern char **environ; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
33 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
34 |
*************** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
35 |
*** 269,273 **** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
36 |
static void dispose_temporary_env __P((sh_free_func_t *)); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
37 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
38 |
! static inline char *mk_env_string __P((const char *, const char *)); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
39 |
static char **make_env_array_from_var_list __P((SHELL_VAR **)); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
40 |
static char **make_var_export_array __P((VAR_CONTEXT *)); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
41 |
--- 274,278 ---- |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
42 |
static void dispose_temporary_env __P((sh_free_func_t *)); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
43 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
44 |
! static inline char *mk_env_string __P((const char *, const char *, int)); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
45 |
static char **make_env_array_from_var_list __P((SHELL_VAR **)); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
46 |
static char **make_var_export_array __P((VAR_CONTEXT *)); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
47 |
*************** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
48 |
*** 339,357 **** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
49 |
/* If exported function, define it now. Don't import functions from |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
50 |
the environment in privileged mode. */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
51 |
! if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4)) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
52 |
{ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
53 |
string_length = strlen (string); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
54 |
! temp_string = (char *)xmalloc (3 + string_length + char_index); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
55 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
56 |
! strcpy (temp_string, name); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
57 |
! temp_string[char_index] = ' '; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
58 |
! strcpy (temp_string + char_index + 1, string); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
59 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
60 |
/* Don't import function names that are invalid identifiers from the |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
61 |
environment. */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
62 |
! if (legal_identifier (name)) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
63 |
! parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
64 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
65 |
! if (temp_var = find_function (name)) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
66 |
{ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
67 |
VSETATTR (temp_var, (att_exported|att_imported)); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
68 |
--- 344,373 ---- |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
69 |
/* If exported function, define it now. Don't import functions from |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
70 |
the environment in privileged mode. */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
71 |
! if (privmode == 0 && read_but_dont_execute == 0 && |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
72 |
! STREQN (BASHFUNC_PREFIX, name, BASHFUNC_PREFLEN) && |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
73 |
! STREQ (BASHFUNC_SUFFIX, name + char_index - BASHFUNC_SUFFLEN) && |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
74 |
! STREQN ("() {", string, 4)) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
75 |
{ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
76 |
+ size_t namelen; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
77 |
+ char *tname; /* desired imported function name */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
78 |
+ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
79 |
+ namelen = char_index - BASHFUNC_PREFLEN - BASHFUNC_SUFFLEN; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
80 |
+ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
81 |
+ tname = name + BASHFUNC_PREFLEN; /* start of func name */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
82 |
+ tname[namelen] = '\0'; /* now tname == func name */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
83 |
+ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
84 |
string_length = strlen (string); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
85 |
! temp_string = (char *)xmalloc (namelen + string_length + 2); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
86 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
87 |
! memcpy (temp_string, tname, namelen); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
88 |
! temp_string[namelen] = ' '; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
89 |
! memcpy (temp_string + namelen + 1, string, string_length + 1); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
90 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
91 |
/* Don't import function names that are invalid identifiers from the |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
92 |
environment. */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
93 |
! if (absolute_program (tname) == 0 && (posixly_correct == 0 || legal_identifier (tname))) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
94 |
! parse_and_execute (temp_string, tname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
95 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
96 |
! if (temp_var = find_function (tname)) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
97 |
{ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
98 |
VSETATTR (temp_var, (att_exported|att_imported)); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
99 |
*************** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
100 |
*** 359,363 **** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
101 |
} |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
102 |
else |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
103 |
! report_error (_("error importing function definition for `%s'"), name); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
104 |
} |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
105 |
#if defined (ARRAY_VARS) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
106 |
--- 375,382 ---- |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
107 |
} |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
108 |
else |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
109 |
! report_error (_("error importing function definition for `%s'"), tname); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
110 |
! |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
111 |
! /* Restore original suffix */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
112 |
! tname[namelen] = BASHFUNC_SUFFIX[0]; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
113 |
} |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
114 |
#if defined (ARRAY_VARS) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
115 |
*************** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
116 |
*** 2520,2524 **** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
117 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
118 |
INVALIDATE_EXPORTSTR (var); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
119 |
! var->exportstr = mk_env_string (name, value); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
120 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
121 |
array_needs_making = 1; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
122 |
--- 2539,2543 ---- |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
123 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
124 |
INVALIDATE_EXPORTSTR (var); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
125 |
! var->exportstr = mk_env_string (name, value, 0); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
126 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
127 |
array_needs_making = 1; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
128 |
*************** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
129 |
*** 3339,3357 **** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
130 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
131 |
static inline char * |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
132 |
! mk_env_string (name, value) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
133 |
const char *name, *value; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
134 |
{ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
135 |
! int name_len, value_len; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
136 |
! char *p; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
137 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
138 |
name_len = strlen (name); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
139 |
value_len = STRLEN (value); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
140 |
! p = (char *)xmalloc (2 + name_len + value_len); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
141 |
! strcpy (p, name); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
142 |
! p[name_len] = '='; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
143 |
if (value && *value) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
144 |
! strcpy (p + name_len + 1, value); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
145 |
else |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
146 |
! p[name_len + 1] = '\0'; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
147 |
return (p); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
148 |
} |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
149 |
--- 3358,3397 ---- |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
150 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
151 |
static inline char * |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
152 |
! mk_env_string (name, value, isfunc) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
153 |
const char *name, *value; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
154 |
+ int isfunc; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
155 |
{ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
156 |
! size_t name_len, value_len; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
157 |
! char *p, *q; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
158 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
159 |
name_len = strlen (name); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
160 |
value_len = STRLEN (value); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
161 |
! |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
162 |
! /* If we are exporting a shell function, construct the encoded function |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
163 |
! name. */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
164 |
! if (isfunc && value) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
165 |
! { |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
166 |
! p = (char *)xmalloc (BASHFUNC_PREFLEN + name_len + BASHFUNC_SUFFLEN + value_len + 2); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
167 |
! q = p; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
168 |
! memcpy (q, BASHFUNC_PREFIX, BASHFUNC_PREFLEN); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
169 |
! q += BASHFUNC_PREFLEN; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
170 |
! memcpy (q, name, name_len); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
171 |
! q += name_len; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
172 |
! memcpy (q, BASHFUNC_SUFFIX, BASHFUNC_SUFFLEN); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
173 |
! q += BASHFUNC_SUFFLEN; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
174 |
! } |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
175 |
! else |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
176 |
! { |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
177 |
! p = (char *)xmalloc (2 + name_len + value_len); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
178 |
! memcpy (p, name, name_len); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
179 |
! q = p + name_len; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
180 |
! } |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
181 |
! |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
182 |
! q[0] = '='; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
183 |
if (value && *value) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
184 |
! memcpy (q + 1, value, value_len + 1); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
185 |
else |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
186 |
! q[1] = '\0'; |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
187 |
! |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
188 |
return (p); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
189 |
} |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
190 |
*************** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
191 |
*** 3439,3443 **** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
192 |
using the cached exportstr... */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
193 |
list[list_index] = USE_EXPORTSTR ? savestring (value) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
194 |
! : mk_env_string (var->name, value); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
195 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
196 |
if (USE_EXPORTSTR == 0) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
197 |
--- 3479,3483 ---- |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
198 |
using the cached exportstr... */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
199 |
list[list_index] = USE_EXPORTSTR ? savestring (value) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
200 |
! : mk_env_string (var->name, value, function_p (var)); |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
201 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
202 |
if (USE_EXPORTSTR == 0) |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
203 |
*** ../bash-4.1-patched/patchlevel.h 2009-10-01 16:39:22.000000000 -0400 |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
204 |
--- patchlevel.h 2010-01-14 09:38:08.000000000 -0500 |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
205 |
*************** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
206 |
*** 26,30 **** |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
207 |
looks for to find the patch level (for the sccs version string). */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
208 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
209 |
! #define PATCHLEVEL 13 |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
210 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
211 |
#endif /* _PATCHLEVEL_H_ */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
212 |
--- 26,30 ---- |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
213 |
looks for to find the patch level (for the sccs version string). */ |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
214 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
215 |
! #define PATCHLEVEL 14 |
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
216 |
|
3fbdd7a202d6
19701904 problem in UTILITY/BASH
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
217 |
#endif /* _PATCHLEVEL_H_ */ |