diff options
author | Damien Miller <djm@cvs.openbsd.org> | 2004-06-20 18:53:40 +0000 |
---|---|---|
committer | Damien Miller <djm@cvs.openbsd.org> | 2004-06-20 18:53:40 +0000 |
commit | 72951f25abbdf39776b532d4017546c7077ff21b (patch) | |
tree | b1a0e873fbacd5b5ad3066d60969d30d61311d7f | |
parent | 8908ae08ec12426bf0c946b2bb67e4b6a8825518 (diff) |
make "ls -l" listings print user/group names, add "ls -n" to show uid/gid
(like /bin/ls); idea & ok markus@
-rw-r--r-- | usr.bin/ssh/sftp.c | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/usr.bin/ssh/sftp.c b/usr.bin/ssh/sftp.c index dfce3090f53..167c009bc97 100644 --- a/usr.bin/ssh/sftp.c +++ b/usr.bin/ssh/sftp.c @@ -16,7 +16,7 @@ #include "includes.h" -RCSID("$OpenBSD: sftp.c,v 1.49 2004/06/18 06:13:25 dtucker Exp $"); +RCSID("$OpenBSD: sftp.c,v 1.50 2004/06/20 18:53:39 djm Exp $"); #include <glob.h> @@ -57,9 +57,11 @@ int remote_glob(struct sftp_conn *, const char *, int, /* Separators for interactive commands */ #define WHITESPACE " \t\r\n" -/* Define what type of ls view (0 - multi-column) */ -#define LONG_VIEW 1 /* Full view ala ls -l */ -#define SHORT_VIEW 2 /* Single row view ala ls -1 */ +/* Define what type of ls view */ +#define LONG_VIEW 1 /* Full view ala ls -l */ +#define SHORT_VIEW 2 /* Single row view ala ls -1 */ +#define NUMERIC_VIEW 4 /* Long view with numeric uid/gid */ +#define VIEW_FLAGS (LONG_VIEW|SHORT_VIEW|NUMERIC_VIEW) /* Commands for interactive mode */ #define I_CHDIR 1 @@ -335,10 +337,16 @@ parse_ls_flags(const char **cpp, int *lflag) for(; strchr(WHITESPACE, *cp) == NULL; cp++) { switch (*cp) { case 'l': - *lflag = LONG_VIEW; + *lflag &= ~VIEW_FLAGS; + *lflag |= LONG_VIEW; break; case '1': - *lflag = SHORT_VIEW; + *lflag &= ~VIEW_FLAGS; + *lflag |= SHORT_VIEW; + break; + case 'n': + *lflag &= ~VIEW_FLAGS; + *lflag |= NUMERIC_VIEW|LONG_VIEW; break; default: error("Invalid flag -%c", *cp); @@ -646,14 +654,17 @@ do_ls_dir(struct sftp_conn *conn, char *path, char *strip_path, int lflag) xfree(tmp); if (lflag & LONG_VIEW) { - char *lname; - struct stat sb; - - memset(&sb, 0, sizeof(sb)); - attrib_to_stat(&d[n]->a, &sb); - lname = ls_file(fname, &sb, 1); - printf("%s\n", lname); - xfree(lname); + if (lflag & NUMERIC_VIEW) { + char *lname; + struct stat sb; + + memset(&sb, 0, sizeof(sb)); + attrib_to_stat(&d[n]->a, &sb); + lname = ls_file(fname, &sb, 1); + printf("%s\n", lname); + xfree(lname); + } else + printf("%s\n", d[n]->longname); } else { printf("%-*s", colspace, fname); if (c >= columns) { |