sh: Code size optimizations to buffered output.
This is mainly less use of the outc macro. No functional change is intended, but code size is about 2K less on i386.
This commit is contained in:
parent
8987b01ea9
commit
aeb5d06504
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=215567
@ -699,13 +699,13 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd)
|
|||||||
for (sp = varlist.list ; sp ; sp = sp->next) {
|
for (sp = varlist.list ; sp ; sp = sp->next) {
|
||||||
if (sep != 0)
|
if (sep != 0)
|
||||||
out2c(' ');
|
out2c(' ');
|
||||||
p = sp->text;
|
p = strchr(sp->text, '=');
|
||||||
while (*p != '=' && *p != '\0')
|
if (p != NULL) {
|
||||||
out2c(*p++);
|
p++;
|
||||||
if (*p != '\0') {
|
outbin(sp->text, p - sp->text, out2);
|
||||||
out2c(*p++);
|
|
||||||
out2qstr(p);
|
out2qstr(p);
|
||||||
}
|
} else
|
||||||
|
out2qstr(sp->text);
|
||||||
sep = ' ';
|
sep = ' ';
|
||||||
}
|
}
|
||||||
for (sp = arglist.list ; sp ; sp = sp->next) {
|
for (sp = arglist.list ; sp ; sp = sp->next) {
|
||||||
|
@ -1592,9 +1592,7 @@ wordexpcmd(int argc, char **argv)
|
|||||||
for (i = 1, len = 0; i < argc; i++)
|
for (i = 1, len = 0; i < argc; i++)
|
||||||
len += strlen(argv[i]);
|
len += strlen(argv[i]);
|
||||||
out1fmt("%08x", (int)len);
|
out1fmt("%08x", (int)len);
|
||||||
for (i = 1; i < argc; i++) {
|
for (i = 1; i < argc; i++)
|
||||||
out1str(argv[i]);
|
outbin(argv[i], strlen(argv[i]) + 1, out1);
|
||||||
out1c('\0');
|
|
||||||
}
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -128,10 +128,8 @@ main(int argc, char *argv[])
|
|||||||
exitshell(exitstatus);
|
exitshell(exitstatus);
|
||||||
}
|
}
|
||||||
reset();
|
reset();
|
||||||
if (exception == EXINT) {
|
if (exception == EXINT)
|
||||||
out2c('\n');
|
out2fmt_flush("\n");
|
||||||
flushout(&errout);
|
|
||||||
}
|
|
||||||
popstackmark(&smark);
|
popstackmark(&smark);
|
||||||
FORCEINTON; /* enable interrupts */
|
FORCEINTON; /* enable interrupts */
|
||||||
if (state == 1)
|
if (state == 1)
|
||||||
|
@ -261,13 +261,12 @@ minus_o(char *name, int val)
|
|||||||
optlist[i].val ? "on" : "off");
|
optlist[i].val ? "on" : "off");
|
||||||
} else {
|
} else {
|
||||||
/* Output suitable for re-input to shell. */
|
/* Output suitable for re-input to shell. */
|
||||||
for (i = 0; i < NOPTS; i++) {
|
for (i = 0; i < NOPTS; i++)
|
||||||
if (i % 6 == 0)
|
out1fmt("%s %co %s%s",
|
||||||
out1str(i == 0 ? "set" : "\nset");
|
i % 6 == 0 ? "set" : "",
|
||||||
out1fmt(" %co %s", optlist[i].val ? '-' : '+',
|
optlist[i].val ? '-' : '+',
|
||||||
optlist[i].name);
|
optlist[i].name,
|
||||||
}
|
i % 6 == 5 || i == NOPTS - 1 ? "\n" : "");
|
||||||
out1c('\n');
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < NOPTS; i++)
|
for (i = 0; i < NOPTS; i++)
|
||||||
|
@ -95,6 +95,12 @@ RESET {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
outcslow(int c, struct output *file)
|
||||||
|
{
|
||||||
|
outc(c, file);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
out1str(const char *p)
|
out1str(const char *p)
|
||||||
{
|
{
|
||||||
@ -149,19 +155,19 @@ outqstr(const char *p, struct output *file)
|
|||||||
case '\'':
|
case '\'':
|
||||||
/* Can't quote single quotes inside single quotes. */
|
/* Can't quote single quotes inside single quotes. */
|
||||||
if (inquotes)
|
if (inquotes)
|
||||||
outc('\'', file);
|
outcslow('\'', file);
|
||||||
inquotes = 0;
|
inquotes = 0;
|
||||||
outstr("\\'", file);
|
outstr("\\'", file);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (!inquotes)
|
if (!inquotes)
|
||||||
outc('\'', file);
|
outcslow('\'', file);
|
||||||
inquotes = 1;
|
inquotes = 1;
|
||||||
outc(ch, file);
|
outc(ch, file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (inquotes)
|
if (inquotes)
|
||||||
outc('\'', file);
|
outcslow('\'', file);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -54,6 +54,7 @@ extern struct output *out1; /* &memout if backquote, otherwise &output */
|
|||||||
extern struct output *out2; /* &memout if backquote with 2>&1, otherwise
|
extern struct output *out2; /* &memout if backquote with 2>&1, otherwise
|
||||||
&errout */
|
&errout */
|
||||||
|
|
||||||
|
void outcslow(int, struct output *);
|
||||||
void out1str(const char *);
|
void out1str(const char *);
|
||||||
void out1qstr(const char *);
|
void out1qstr(const char *);
|
||||||
void out2str(const char *);
|
void out2str(const char *);
|
||||||
@ -74,7 +75,7 @@ int xwrite(int, const char *, int);
|
|||||||
|
|
||||||
#define outc(c, file) (--(file)->nleft < 0? (emptyoutbuf(file), *(file)->nextc++ = (c)) : (*(file)->nextc++ = (c)))
|
#define outc(c, file) (--(file)->nleft < 0? (emptyoutbuf(file), *(file)->nextc++ = (c)) : (*(file)->nextc++ = (c)))
|
||||||
#define out1c(c) outc(c, out1);
|
#define out1c(c) outc(c, out1);
|
||||||
#define out2c(c) outc(c, out2);
|
#define out2c(c) outcslow(c, out2);
|
||||||
|
|
||||||
#define OUTPUT_INCL
|
#define OUTPUT_INCL
|
||||||
#endif
|
#endif
|
||||||
|
21
bin/sh/var.c
21
bin/sh/var.c
@ -633,10 +633,10 @@ showvarscmd(int argc __unused, char **argv __unused)
|
|||||||
|
|
||||||
qsort(vars, n, sizeof(*vars), var_compare);
|
qsort(vars, n, sizeof(*vars), var_compare);
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
for (s = vars[i]; *s != '='; s++)
|
s = strchr(vars[i], '=');
|
||||||
out1c(*s);
|
s++;
|
||||||
out1c('=');
|
outbin(vars[i], s - vars[i], out1);
|
||||||
out1qstr(s + 1);
|
out1qstr(s);
|
||||||
out1c('\n');
|
out1c('\n');
|
||||||
}
|
}
|
||||||
ckfree(vars);
|
ckfree(vars);
|
||||||
@ -710,12 +710,15 @@ found:;
|
|||||||
out1str(cmdname);
|
out1str(cmdname);
|
||||||
out1c(' ');
|
out1c(' ');
|
||||||
}
|
}
|
||||||
for (p = vp->text ; *p != '=' ; p++)
|
p = strchr(vp->text, '=');
|
||||||
out1c(*p);
|
|
||||||
if (values && !(vp->flags & VUNSET)) {
|
if (values && !(vp->flags & VUNSET)) {
|
||||||
out1c('=');
|
p++;
|
||||||
out1qstr(p + 1);
|
outbin(vp->text, p - vp->text,
|
||||||
}
|
out1);
|
||||||
|
out1qstr(p);
|
||||||
|
} else
|
||||||
|
outbin(vp->text, p - vp->text,
|
||||||
|
out1);
|
||||||
out1c('\n');
|
out1c('\n');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user