---
ls.c | 50 +++++++++++++++++++++++++++++---------------------
1 file changed, 29 insertions(+), 21 deletions(-)
diff --git a/ls.c b/ls.c
index cdfce4d..3034e6b 100644
--- a/ls.c
+++ b/ls.c
_AT_@ -102,15 +102,34 @@ output(const struct entry *ent)
struct group *gr;
struct passwd *pw;
ssize_t len;
- char buf[BUFSIZ], *fmt,
+ size_t l;
+ char *name, *c, *u, *fmt, buf[BUFSIZ],
pwname[_SC_LOGIN_NAME_MAX], grname[_SC_LOGIN_NAME_MAX],
mode[] = "----------";
+ Rune r;
+
+ if (qflag) {
+ name = emalloc(strlen(ent->name) + 1);
+
+ for (c = name, u = ent->name; *u; u += l) {
+ l = chartorune(&r, u);
+ if (isprintrune(r)) {
+ memcpy(c, u, l);
+ c += l;
+ } else {
+ *c++ = '?';
+ }
+ }
+ *c = '\0';
+ } else {
+ name = ent->name;
+ }
if (iflag)
printf("%lu ", (unsigned long)ent->ino);
if (!lflag) {
- printf("%s%s\n", ent->name, indicator(ent->mode));
- return;
+ printf("%s%s\n", name, indicator(ent->mode));
+ goto cleanup;
}
if (S_ISREG(ent->mode))
mode[0] = '-';
_AT_@ -173,6 +192,10 @@ output(const struct entry *ent)
printf(" -> %s%s", buf, indicator(ent->tmode));
}
putchar('\n');
+
+cleanup:
+ if (qflag)
+ free(name);
}
static int
_AT_@ -193,11 +216,10 @@ static void
lsdir(const char *path)
{
DIR *dp;
- Rune r;
struct entry ent, *ents = NULL;
struct dirent *d;
- size_t i, n = 0, len;
- char cwd[PATH_MAX], *p, *q, *name;
+ size_t i, n = 0;
+ char cwd[PATH_MAX], *name;
if (!getcwd(cwd, sizeof(cwd)))
eprintf("getcwd:");
_AT_@ -224,21 +246,7 @@ lsdir(const char *path)
ls(&ent, Rflag);
} else {
ents = ereallocarray(ents, ++n, sizeof(*ents));
- name = p = estrdup(d->d_name);
- if (qflag) {
- q = d->d_name;
- while (*q) {
- len = chartorune(&r, q);
- if (isprintrune(r)) {
- memcpy(p, q, len);
- p += len, q += len;
- } else {
- *p++ = '?';
- q += len;
- }
- }
- *p = '\0';
- }
+ name = estrdup(d->d_name);
mkent(&ents[n - 1], name, tflag || Sflag || Fflag || iflag || lflag || pflag || Rflag, Lflag);
}
}
--
2.4.3
--FcDMekJBvgbQ11GR
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="0002-ls-list-operands-in-correct-order.patch"
Received on Mon Sep 17 2001 - 00:00:00 CEST
This archive was generated by hypermail 2.3.0 : Thu Jun 18 2015 - 17:34:31 CEST