aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Seb <sbb@tuxfamily.org>2010-06-12 21:57:50 +0200
committerGravatar Denys Vlasenko <vda.linux@googlemail.com>2010-06-12 21:57:50 +0200
commitd2d327db6d38d5a6e8e253c54d3e97466ce3bc79 (patch)
tree38dbae3f18cedd293307a7389d22372d7601e047
parente2b41cfb4be2486d9f2d50a8d750eed15c29320e (diff)
downloadbusybox-d2d327db6d38d5a6e8e253c54d3e97466ce3bc79.tar.gz
busybox-d2d327db6d38d5a6e8e253c54d3e97466ce3bc79.tar.bz2
stat: make output more similar to GNU stat
Signed-off-by: Seb <sbb@tuxfamily.org> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--coreutils/stat.c41
1 files 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 <cr> at the end */
+ /* coreutils 6.3 always prints newline at the end */
/*fputs(b, stdout);*/
puts(b);
break;
}
- *p++ = '\0';
- fputs(b, stdout);
/* dest = "%<modifiers>" */
- 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",