aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2021-06-06 13:00:20 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2021-06-06 13:01:25 +0200
commit4c4b02c290ce8d24c467964eb25f5bfc8fc98c8b (patch)
treeaf8d658dfc834b18594247f3731f5338c526cf42
parent457825f77a7c7286647ee888a1000a6bb12ca8fc (diff)
downloadbusybox-w32-4c4b02c290ce8d24c467964eb25f5bfc8fc98c8b.tar.gz
busybox-w32-4c4b02c290ce8d24c467964eb25f5bfc8fc98c8b.tar.bz2
busybox-w32-4c4b02c290ce8d24c467964eb25f5bfc8fc98c8b.zip
ash: save Ron's patch from oblivion
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/ash_remove_unnecessary_code_in_backquote_expansion.patch135
1 files changed, 135 insertions, 0 deletions
diff --git a/shell/ash_remove_unnecessary_code_in_backquote_expansion.patch b/shell/ash_remove_unnecessary_code_in_backquote_expansion.patch
new file mode 100644
index 000000000..06067dde0
--- /dev/null
+++ b/shell/ash_remove_unnecessary_code_in_backquote_expansion.patch
@@ -0,0 +1,135 @@
1From: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
2Date: Thu, 19 Apr 2018 18:16:12 +0800
3
4> ash originally had support for omitting the fork when expanding a
5> builtin in backquotes. dash has gradually been removing this support,
6> most recently in commit 66b614e29038e31745c4a5d296f64f8d64f5c377
7> ("[EVAL] Remove unused EV_BACKCMD flag").
8>
9> Some traces still remain, however. Remove:
10>
11> - the buf and nleft elements of the backcmd structure;
12> - a misleading comment regarding handling of builtins.
13>
14> Signed-off-by: Ron Yorston <rmy@xxxxxxxxxxxx>
15
16Unfortunately we may need this at some point in the future due
17to changes in POSIX. So let's keep it around for now until we
18get things such as `jobs -p` to work.
19
20*************************************
21
22From: Ron Yorston <rmy@xxxxxxxxxxxx>
23Date: Thu, 19 Apr 2018 17:18:47 +0100
24
25>Unfortunately we may need this at some point in the future due
26>to changes in POSIX. So let's keep it around for now until we
27>get things such as `jobs -p` to work.
28
29As you wish.
30
31Something even more trivial I noticed later: the TRACE at the end of
32expbackq incorrectly refers to the function as evalbackq.
33
34*************************************
35
36Date: Tue, 10 Apr 2018 13:23:35 +0100
37From: Ron Yorston <rmy@pobox.com>
38To: busybox@busybox.net
39Subject: [PATCH] ash: remove unnecessary code in backquote expansion
40
41Some traces remain of ash's ancient support for omitting the fork when
42expanding a builtin command in backquotes.
43
44Remove:
45
46- the buf and nleft elements of the backcmd structure;
47- a misleading comment regarding handling of builtins.
48
49I've submitted a similar patch to dash.
50
51Signed-off-by: Ron Yorston <rmy@pobox.com>
52---
53 shell/ash.c | 37 +++++++++----------------------------
54 1 file changed, 9 insertions(+), 28 deletions(-)
55
56diff --git a/shell/ash.c b/shell/ash.c
57index 45c747dbc..6f1458722 100644
58--- a/shell/ash.c
59+++ b/shell/ash.c
60@@ -6356,15 +6356,12 @@ exptilde(char *startp, char *p, int flags)
61 }
62
63 /*
64- * Execute a command inside back quotes. If it's a builtin command, we
65- * want to save its output in a block obtained from malloc. Otherwise
66- * we fork off a subprocess and get the output of the command via a pipe.
67- * Should be called with interrupts off.
68+ * Execute a command inside back quotes. We fork off a subprocess and
69+ * get the output of the command via a pipe. Should be called with
70+ * interrupts off.
71 */
72 struct backcmd { /* result of evalbackcmd */
73 int fd; /* file descriptor to read from */
74- int nleft; /* number of chars in buffer */
75- char *buf; /* buffer */
76 struct job *jp; /* job structure for command */
77 };
78
79@@ -6394,8 +6391,6 @@ evalbackcmd(union node *n, struct backcmd *result)
80 struct job *jp;
81
82 result->fd = -1;
83- result->buf = NULL;
84- result->nleft = 0;
85 result->jp = NULL;
86 if (n == NULL) {
87 goto out;
88@@ -6432,8 +6427,7 @@ evalbackcmd(union node *n, struct backcmd *result)
89 result->jp = jp;
90
91 out:
92- TRACE(("evalbackcmd done: fd=%d buf=0x%x nleft=%d jp=0x%x\n",
93- result->fd, result->buf, result->nleft, result->jp));
94+ TRACE(("evalbackcmd done: fd=%d jp=0x%x\n", result->fd, result->jp));
95 }
96
97 /*
98@@ -6445,7 +6439,6 @@ expbackq(union node *cmd, int flag)
99 struct backcmd in;
100 int i;
101 char buf[128];
102- char *p;
103 char *dest;
104 int startloc;
105 int syntax = flag & EXP_QUOTED ? DQSYNTAX : BASESYNTAX;
106@@ -6457,24 +6450,12 @@ expbackq(union node *cmd, int flag)
107 evalbackcmd(cmd, &in);
108 popstackmark(&smark);
109
110- p = in.buf;
111- i = in.nleft;
112- if (i == 0)
113- goto read;
114- for (;;) {
115- memtodest(p, i, syntax, flag & QUOTES_ESC);
116- read:
117- if (in.fd < 0)
118- break;
119- i = nonblock_immune_read(in.fd, buf, sizeof(buf));
120- TRACE(("expbackq: read returns %d\n", i));
121- if (i <= 0)
122- break;
123- p = buf;
124- }
125-
126- free(in.buf);
127 if (in.fd >= 0) {
128+ while ((i = nonblock_immune_read(in.fd, buf, sizeof(buf))) > 0) {
129+ TRACE(("expbackq: read returns %d\n", i));
130+ memtodest(buf, i, syntax, flag & QUOTES_ESC);
131+ }
132+
133 close(in.fd);
134 back_exitstatus = waitforjob(in.jp);
135 }