summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2022-04-11 18:49:28 -0400
committerJakob Kaivo <jkk@ung.org>2022-04-11 18:49:28 -0400
commit707184fe4e9e5ffa99def9c868027c61f41249fc (patch)
treefa41bdfb8c3621ce029877871be8c7af1d3d173d
parentdebc4714456ef403650e549b42642b9ade1fdfed (diff)
implement -i support
-rw-r--r--ls.c36
1 files 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 **/