summaryrefslogtreecommitdiff
path: root/Src/builtin.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2006-12-10 23:27:01 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2006-12-10 23:27:01 +0000
commit25134bc34190cfc184fc1214dc04c3d5782a74a3 (patch)
tree86d3c7c3826fbfe69b235586b03db7aea112e27b /Src/builtin.c
parent4ea03291a8beb1487cbe31664a991d776bca19a0 (diff)
downloadzsh-25134bc34190cfc184fc1214dc04c3d5782a74a3.tar.gz
zsh-25134bc34190cfc184fc1214dc04c3d5782a74a3.zip
unposted: improve CUTBUFFER and killring documentation
23044: print -c and print -C didn't handle unmetafied input
Diffstat (limited to 'Src/builtin.c')
-rw-r--r--Src/builtin.c44
1 files changed, 24 insertions, 20 deletions
diff --git a/Src/builtin.c b/Src/builtin.c
index e567675ff..d756b28bb 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -3603,6 +3603,13 @@ bin_print(char *name, char **args, Options ops, int func)
}
/* -o and -O -- sort the arguments */
+ /*
+ * TODO: this appears to be yet another of the endless
+ * chunks of code that didn't get fixed up properly
+ * to reflect the fact that args contains unmetafied
+ * strings that may contain NULs with the lengths in
+ * len.
+ */
if (OPT_ISSET(ops,'o')) {
if (fmt && !*args) return 0;
if (OPT_ISSET(ops,'i'))
@@ -3624,7 +3631,6 @@ bin_print(char *name, char **args, Options ops, int func)
/* -c -- output in columns */
if (!fmt && (OPT_ISSET(ops,'c') || OPT_ISSET(ops,'C'))) {
int l, nc, nr, sc, n, t, i;
- char **ap;
if (OPT_ISSET(ops,'C')) {
char *eptr, *argptr = OPT_ARG(ops,'C');
@@ -3647,13 +3653,12 @@ bin_print(char *name, char **args, Options ops, int func)
/*
* i: loop counter
- * ap: array iterator
* l: maximum length seen
*
* Ignore lengths in last column since they don't affect
* the separation.
*/
- for (i = l = 0, ap = args; *ap; ap++, i++) {
+ for (i = l = 0; i < argc; i++) {
if (OPT_ISSET(ops, 'a')) {
if ((i % nc) == nc - 1)
continue;
@@ -3661,8 +3666,8 @@ bin_print(char *name, char **args, Options ops, int func)
if (i >= nr * (nc - 1))
break;
}
- if (l < (t = strlen(*ap)))
- l = t;
+ if (l < len[i])
+ l = len[i];
}
sc = l + 2;
}
@@ -3670,12 +3675,11 @@ bin_print(char *name, char **args, Options ops, int func)
{
/*
* n: loop counter
- * ap: array iterator
* l: maximum length seen
*/
- for (n = l = 0, ap = args; *ap; ap++, n++)
- if (l < (t = strlen(*ap)))
- l = t;
+ for (n = l = 0; n < argc; n++)
+ if (l < len[n])
+ l = len[n];
/*
* sc: column width
@@ -3689,31 +3693,31 @@ bin_print(char *name, char **args, Options ops, int func)
}
if (OPT_ISSET(ops,'a')) /* print across, i.e. columns first */
- ap = args;
+ n = 0;
for (i = 0; i < nr; i++) {
if (OPT_ISSET(ops,'a'))
{
int ic;
- for (ic = 0; ic < nc && *ap; ic++, ap++)
+ for (ic = 0; ic < nc && n < argc; ic++, n++)
{
- l = strlen(*ap);
- fprintf(fout, "%s", *ap);
- if (*ap)
+ l = len[n];
+ fwrite(args[n], l, 1, fout);
+ if (n < argc)
for (; l < sc; l++)
fputc(' ', fout);
}
}
else
{
- ap = args + i;
+ n = i;
do {
- l = strlen(*ap);
- fprintf(fout, "%s", *ap);
- for (t = nr; t && *ap; t--, ap++);
- if (*ap)
+ l = len[n];
+ fwrite(args[n], l, 1, fout);
+ for (t = nr; t && n < argc; t--, n++);
+ if (n < argc)
for (; l < sc; l++)
fputc(' ', fout);
- } while (*ap);
+ } while (n < argc);
}
fputc(OPT_ISSET(ops,'N') ? '\0' : '\n', fout);
}