--- ls.c | 54 +++++++++++++++++++++++++----------------------------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/ls.c b/ls.c index 7c97558..5476e91 100644 --- a/ls.c +++ b/ls.c _AT_@ -119,35 +119,17 @@ output(const struct entry *ent) struct group *gr; struct passwd *pw; ssize_t len; - size_t l; - char *name, *c, *u, *fmt, buf[BUFSIZ], + char *fmt, buf[BUFSIZ], pwname[_SC_LOGIN_NAME_MAX], grname[_SC_LOGIN_NAME_MAX], mode[] = "----------"; + const char * c; 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", name, indicator(ent->mode)); - goto cleanup; - } + if (!lflag) + goto outputname; + if (S_ISREG(ent->mode)) mode[0] = '-'; else if (S_ISBLK(ent->mode)) _AT_@ -203,18 +185,32 @@ output(const struct entry *ent) printf("%10s ", humansize(ent->size)); else printf("%10lu ", (unsigned long)ent->size); - printf("%s %s%s", buf, ent->name, indicator(ent->mode)); - if (S_ISLNK(ent->mode)) { + + printf("%s ", buf); + +outputname: + if (!qflag) { + printf("%s", ent->name); + } else { + for (c = ent->name; *c; c += len) { + len = chartorune(&r, c); + if (isprintrune(r)) + printf("%.*s", (int)len, c); + else + printf("?"); + } + } + + printf("%s", indicator(ent->mode)); + + if (lflag && S_ISLNK(ent->mode)) { if ((len = readlink(ent->name, buf, sizeof(buf) - 1)) < 0) eprintf("readlink %s:", ent->name); buf[len] = '\0'; printf(" -> %s%s", buf, indicator(ent->tmode)); } - putchar('\n'); -cleanup: - if (qflag) - free(name); + putchar('\n'); } static int -- 2.1.4Received on Fri Feb 19 2016 - 00:51:15 CET
This archive was generated by hypermail 2.3.0 : Fri Feb 19 2016 - 05:00:17 CET