From d2d327db6d38d5a6e8e253c54d3e97466ce3bc79 Mon Sep 17 00:00:00 2001 From: Seb Date: Sat, 12 Jun 2010 21:57:50 +0200 Subject: stat: make output more similar to GNU stat Signed-off-by: Seb Signed-off-by: Denys Vlasenko --- coreutils/stat.c | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/coreutils/stat.c b/coreutils/stat.c index 57f1f145a..e7c24e642 100644 --- a/coreutils/stat.c +++ b/coreutils/stat.c @@ -216,10 +216,7 @@ static void FAST_FUNC print_stat(char *pformat, const char m, char *linkname = xmalloc_readlink_or_warn(filename); if (linkname == NULL) return; - /*printf("\"%s\" -> \"%s\"", filename, linkname); */ - printf(pformat, filename); - printf(" -> "); - printf(pformat, linkname); + printf("'%s' -> '%s'", filename, linkname); free(linkname); } else { printf(pformat, filename); @@ -320,24 +317,28 @@ static void print_it(const char *masterformat, b = format; while (b) { + /* Each iteration finds next %spec, + * prints preceding string and handles found %spec + */ size_t len; char *p = strchr(b, '%'); if (!p) { - /* coreutils 6.3 always prints at the end */ + /* coreutils 6.3 always prints newline at the end */ /*fputs(b, stdout);*/ puts(b); break; } - *p++ = '\0'; - fputs(b, stdout); /* dest = "%" */ - len = strspn(p, "#-+.I 0123456789"); - dest[0] = '%'; - memcpy(dest + 1, p, len); - dest[1 + len] = '\0'; - p += len; + len = 1 + strspn(p + 1, "#-+.I 0123456789"); + memcpy(dest, p, len); + dest[len] = '\0'; + /* print preceding string */ + *p = '\0'; + fputs(b, stdout); + + p += len; b = p + 1; switch (*p) { case '\0': @@ -508,7 +509,7 @@ static bool do_stat(const char *filename, const char *format) } else { if (S_ISBLK(statbuf.st_mode) || S_ISCHR(statbuf.st_mode)) { format = - " File: \"%N\"\n" + " File: %N\n" " Size: %-10s\tBlocks: %-10b IO Block: %-6o %F\n" "Device: %Dh/%dd\tInode: %-10i Links: %-5h" " Device type: %t,%T\n" @@ -516,7 +517,7 @@ static bool do_stat(const char *filename, const char *format) "Access: %x\n" "Modify: %y\n" "Change: %z\n"; } else { format = - " File: \"%N\"\n" + " File: %N\n" " Size: %-10s\tBlocks: %-10b IO Block: %-6o %F\n" "Device: %Dh/%dd\tInode: %-10i Links: %h\n" "Access: (%04a/%10.10A) Uid: (%5u/%8U) Gid: (%5g/%8G)\n" @@ -531,14 +532,14 @@ static bool do_stat(const char *filename, const char *format) } else { if (S_ISBLK(statbuf.st_mode) || S_ISCHR(statbuf.st_mode)) { format = (option_mask32 & OPT_SELINUX ? - " File: \"%N\"\n" + " File: %N\n" " Size: %-10s\tBlocks: %-10b IO Block: %-6o %F\n" "Device: %Dh/%dd\tInode: %-10i Links: %-5h" " Device type: %t,%T\n" "Access: (%04a/%10.10A) Uid: (%5u/%8U) Gid: (%5g/%8G)\n" " S_Context: %C\n" "Access: %x\n" "Modify: %y\n" "Change: %z\n": - " File: \"%N\"\n" + " File: %N\n" " Size: %-10s\tBlocks: %-10b IO Block: %-6o %F\n" "Device: %Dh/%dd\tInode: %-10i Links: %-5h" " Device type: %t,%T\n" @@ -546,13 +547,13 @@ static bool do_stat(const char *filename, const char *format) "Access: %x\n" "Modify: %y\n" "Change: %z\n"); } else { format = (option_mask32 & OPT_SELINUX ? - " File: \"%N\"\n" + " File: %N\n" " Size: %-10s\tBlocks: %-10b IO Block: %-6o %F\n" "Device: %Dh/%dd\tInode: %-10i Links: %h\n" "Access: (%04a/%10.10A) Uid: (%5u/%8U) Gid: (%5g/%8G)\n" "S_Context: %C\n" "Access: %x\n" "Modify: %y\n" "Change: %z\n": - " File: \"%N\"\n" + " File: %N\n" " Size: %-10s\tBlocks: %-10b IO Block: %-6o %F\n" "Device: %Dh/%dd\tInode: %-10i Links: %h\n" "Access: (%04a/%10.10A) Uid: (%5u/%8U) Gid: (%5g/%8G)\n" @@ -601,9 +602,9 @@ static bool do_stat(const char *filename, const char *format) if (S_ISLNK(statbuf.st_mode)) linkname = xmalloc_readlink_or_warn(filename); if (linkname) - printf(" File: \"%s\" -> \"%s\"\n", filename, linkname); + printf(" File: '%s' -> '%s'\n", filename, linkname); else - printf(" File: \"%s\"\n", filename); + printf(" File: '%s'\n", filename); printf(" Size: %-10llu\tBlocks: %-10llu IO Block: %-6lu %s\n" "Device: %llxh/%llud\tInode: %-10llu Links: %-5lu", -- cgit v1.2.3