diff options
author | Jakob Kaivo <jkk@ung.org> | 2022-04-11 18:49:28 -0400 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2022-04-11 18:49:28 -0400 |
commit | 707184fe4e9e5ffa99def9c868027c61f41249fc (patch) | |
tree | fa41bdfb8c3621ce029877871be8c7af1d3d173d | |
parent | debc4714456ef403650e549b42642b9ade1fdfed (diff) |
implement -i support
-rw-r--r-- | ls.c | 36 |
1 files changed, 34 insertions, 2 deletions
@@ -64,6 +64,7 @@ static enum { GROUP_NAME, GROUP_ID, GROUP_NONE } ls_group = GROUP_NAME; static enum { OWNER_NAME, OWNER_ID, OWNER_NONE } ls_owner = OWNER_NAME; static enum { MARK_NONE, MARK_DIRS, MARK_ALL } ls_mark = MARK_NONE; static enum { BLOCKS_NONE, BLOCKS_POSIX, BLOCKS_KIBI } ls_blocks = BLOCKS_NONE; +static int ls_print_inodes = 0; static int recurse = 0; static int reverse = 0; @@ -334,7 +335,13 @@ static void ls_print_long(size_t n, struct file_info files[static n]) { for (size_t i = 0; i < n; i++) { struct stat st = files[i].st; + + if (ls_print_inodes) { + printf("%*ju ", SIZEWIDTH, (uintmax_t)st.st_ino); + } + printf("%s ", ls_file_mode(st)); + printf("%ju ", (uintmax_t)st.st_nlink); if (ls_owner != OWNER_NONE) { @@ -379,6 +386,9 @@ static void ls_print_long(size_t n, struct file_info files[static n]) static void ls_print_single(size_t n, struct file_info files[static n]) { for (size_t i = 0; i < n; i++) { + if (ls_print_inodes) { + printf("%ju ", (uintmax_t)files[i].st.st_ino); + } printf("%s\n", ls_filename(files + i)); } } @@ -414,8 +424,14 @@ static void ls_print_serial(size_t n, struct file_info files[static n]) printf("\n"); at = 0; } + if (ls_print_inodes) { + at += printf("%ju ", (uintmax_t)files[i].st.st_ino); + } at += printf("%s, ", ls_filename(files + i)); } + if (ls_print_inodes) { + printf("%ju ", (uintmax_t)files[n - 1].st.st_ino); + } printf("%s\n", ls_filename(files + n - 1)); } @@ -424,17 +440,25 @@ static void ls_print_columns(size_t n, struct file_info files[static n]) size_t widest = ls_find_widest(n, files); size_t columns = ls_get_columns(); size_t ncolumns = columns / widest; + if (ls_print_inodes) { + ncolumns /= 2; + } size_t nrows = n / ncolumns; - /* FIXME: partial columns */ + /* account for partial columns */ nrows++; char format[32] = ""; snprintf(format, sizeof(format), "%%-%zds", widest); + for (size_t i = 0; i < nrows; i++) { for (size_t j = 0; j < ncolumns; j++) { size_t fn = i + (nrows * j); if (fn < n) { + if (ls_print_inodes) { + printf("%ju ", + (uintmax_t)files[fn].st.st_ino); + } printf(format, ls_filename(files + fn)); } } @@ -447,9 +471,17 @@ static void ls_print_rows(size_t n, struct file_info files[static n]) size_t widest = ls_find_widest(n, files); size_t columns = ls_get_columns(); size_t ncolumns = columns / widest; + if (ls_print_inodes) { + ncolumns /= 2; + } + char format[32] = ""; snprintf(format, sizeof(format), "%%-%zds", widest); + for (size_t i = 0; i < n; i++) { + if (ls_print_inodes) { + printf("%ju ", (uintmax_t)files[i].st.st_ino); + } printf(format, ls_filename(files + i)); if (i % ncolumns == ncolumns - 1) { printf("\n"); @@ -555,7 +587,7 @@ int main(int argc, char *argv[]) break; case 'i': /** include file serial numbers **/ - //format |= INODES; + ls_print_inodes = 1; break; case 'k': /** use a blocksize of 1024 **/ |