diff options
Diffstat (limited to 'sftp.c')
-rw-r--r-- | sftp.c | 39 |
1 files changed, 22 insertions, 17 deletions
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: sftp.c,v 1.118 2010/01/09 11:13:02 dtucker Exp $ */ | 1 | /* $OpenBSD: sftp.c,v 1.119 2010/01/13 01:40:16 djm Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org> | 3 | * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org> |
4 | * | 4 | * |
@@ -110,16 +110,17 @@ extern char *__progname; | |||
110 | #define WHITESPACE " \t\r\n" | 110 | #define WHITESPACE " \t\r\n" |
111 | 111 | ||
112 | /* ls flags */ | 112 | /* ls flags */ |
113 | #define LS_LONG_VIEW 0x01 /* Full view ala ls -l */ | 113 | #define LS_LONG_VIEW 0x0001 /* Full view ala ls -l */ |
114 | #define LS_SHORT_VIEW 0x02 /* Single row view ala ls -1 */ | 114 | #define LS_SHORT_VIEW 0x0002 /* Single row view ala ls -1 */ |
115 | #define LS_NUMERIC_VIEW 0x04 /* Long view with numeric uid/gid */ | 115 | #define LS_NUMERIC_VIEW 0x0004 /* Long view with numeric uid/gid */ |
116 | #define LS_NAME_SORT 0x08 /* Sort by name (default) */ | 116 | #define LS_NAME_SORT 0x0008 /* Sort by name (default) */ |
117 | #define LS_TIME_SORT 0x10 /* Sort by mtime */ | 117 | #define LS_TIME_SORT 0x0010 /* Sort by mtime */ |
118 | #define LS_SIZE_SORT 0x20 /* Sort by file size */ | 118 | #define LS_SIZE_SORT 0x0020 /* Sort by file size */ |
119 | #define LS_REVERSE_SORT 0x40 /* Reverse sort order */ | 119 | #define LS_REVERSE_SORT 0x0040 /* Reverse sort order */ |
120 | #define LS_SHOW_ALL 0x80 /* Don't skip filenames starting with '.' */ | 120 | #define LS_SHOW_ALL 0x0080 /* Don't skip filenames starting with '.' */ |
121 | 121 | #define LS_SI_UNITS 0x0100 /* Display sizes as K, M, G, etc. */ | |
122 | #define VIEW_FLAGS (LS_LONG_VIEW|LS_SHORT_VIEW|LS_NUMERIC_VIEW) | 122 | |
123 | #define VIEW_FLAGS (LS_LONG_VIEW|LS_SHORT_VIEW|LS_NUMERIC_VIEW|LS_SI_UNITS) | ||
123 | #define SORT_FLAGS (LS_NAME_SORT|LS_TIME_SORT|LS_SIZE_SORT) | 124 | #define SORT_FLAGS (LS_NAME_SORT|LS_TIME_SORT|LS_SIZE_SORT) |
124 | 125 | ||
125 | /* Commands for interactive mode */ | 126 | /* Commands for interactive mode */ |
@@ -383,7 +384,7 @@ parse_ls_flags(char **argv, int argc, int *lflag) | |||
383 | opterr = 0; | 384 | opterr = 0; |
384 | 385 | ||
385 | *lflag = LS_NAME_SORT; | 386 | *lflag = LS_NAME_SORT; |
386 | while ((ch = getopt(argc, argv, "1Saflnrt")) != -1) { | 387 | while ((ch = getopt(argc, argv, "1Safhlnrt")) != -1) { |
387 | switch (ch) { | 388 | switch (ch) { |
388 | case '1': | 389 | case '1': |
389 | *lflag &= ~VIEW_FLAGS; | 390 | *lflag &= ~VIEW_FLAGS; |
@@ -399,12 +400,15 @@ parse_ls_flags(char **argv, int argc, int *lflag) | |||
399 | case 'f': | 400 | case 'f': |
400 | *lflag &= ~SORT_FLAGS; | 401 | *lflag &= ~SORT_FLAGS; |
401 | break; | 402 | break; |
403 | case 'h': | ||
404 | *lflag |= LS_SI_UNITS; | ||
405 | break; | ||
402 | case 'l': | 406 | case 'l': |
403 | *lflag &= ~VIEW_FLAGS; | 407 | *lflag &= ~LS_SHORT_VIEW; |
404 | *lflag |= LS_LONG_VIEW; | 408 | *lflag |= LS_LONG_VIEW; |
405 | break; | 409 | break; |
406 | case 'n': | 410 | case 'n': |
407 | *lflag &= ~VIEW_FLAGS; | 411 | *lflag &= ~LS_SHORT_VIEW; |
408 | *lflag |= LS_NUMERIC_VIEW|LS_LONG_VIEW; | 412 | *lflag |= LS_NUMERIC_VIEW|LS_LONG_VIEW; |
409 | break; | 413 | break; |
410 | case 'r': | 414 | case 'r': |
@@ -716,13 +720,14 @@ do_ls_dir(struct sftp_conn *conn, char *path, char *strip_path, int lflag) | |||
716 | xfree(tmp); | 720 | xfree(tmp); |
717 | 721 | ||
718 | if (lflag & LS_LONG_VIEW) { | 722 | if (lflag & LS_LONG_VIEW) { |
719 | if (lflag & LS_NUMERIC_VIEW) { | 723 | if (lflag & (LS_NUMERIC_VIEW|LS_SI_UNITS)) { |
720 | char *lname; | 724 | char *lname; |
721 | struct stat sb; | 725 | struct stat sb; |
722 | 726 | ||
723 | memset(&sb, 0, sizeof(sb)); | 727 | memset(&sb, 0, sizeof(sb)); |
724 | attrib_to_stat(&d[n]->a, &sb); | 728 | attrib_to_stat(&d[n]->a, &sb); |
725 | lname = ls_file(fname, &sb, 1); | 729 | lname = ls_file(fname, &sb, 1, |
730 | (lflag & LS_SI_UNITS)); | ||
726 | printf("%s\n", lname); | 731 | printf("%s\n", lname); |
727 | xfree(lname); | 732 | xfree(lname); |
728 | } else | 733 | } else |
@@ -824,7 +829,7 @@ do_globbed_ls(struct sftp_conn *conn, char *path, char *strip_path, | |||
824 | a = do_lstat(conn, g.gl_pathv[i], 1); | 829 | a = do_lstat(conn, g.gl_pathv[i], 1); |
825 | if (a != NULL) | 830 | if (a != NULL) |
826 | attrib_to_stat(a, &sb); | 831 | attrib_to_stat(a, &sb); |
827 | lname = ls_file(fname, &sb, 1); | 832 | lname = ls_file(fname, &sb, 1, (lflag & LS_SI_UNITS)); |
828 | printf("%s\n", lname); | 833 | printf("%s\n", lname); |
829 | xfree(lname); | 834 | xfree(lname); |
830 | } else { | 835 | } else { |