From 707184fe4e9e5ffa99def9c868027c61f41249fc Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Mon, 11 Apr 2022 18:49:28 -0400 Subject: implement -i support --- ls.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/ls.c b/ls.c index fd6bfa4..cb4e201 100644 --- a/ls.c +++ b/ls.c @@ -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 **/ -- cgit v1.2.1