about summary refs log tree commit diff
path: root/lr.c
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2015-10-23 12:16:05 +0200
committerChristian Neukirchen <chneukirchen@gmail.com>2015-10-23 12:16:05 +0200
commitc5e5927aceb9293312b2b4b5cf98e84c769f8c99 (patch)
tree0c1c13d8e6894ec71f94ad6d32691519551fa6c5 /lr.c
parent965dd233a23347d6fcdc7a582509470343f64c04 (diff)
downloadlr-c5e5927aceb9293312b2b4b5cf98e84c769f8c99.tar.gz
lr-c5e5927aceb9293312b2b4b5cf98e84c769f8c99.tar.xz
lr-c5e5927aceb9293312b2b4b5cf98e84c769f8c99.zip
mtime is %T like in find, add %m %M
Diffstat (limited to 'lr.c')
-rw-r--r--lr.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/lr.c b/lr.c
index 91974e7..3863603 100644
--- a/lr.c
+++ b/lr.c
@@ -610,6 +610,24 @@ intlen(int i)
 }
 
 void
+print_mode(int mode)
+{
+	putchar("0pcCd?bB-?l?s???"[(mode >> 12) & 0x0f]);
+	putchar(mode & 00400 ? 'r' : '-');
+	putchar(mode & 00200 ? 'w' : '-');
+	putchar(mode & 04000 ? (mode & 00100 ? 's' : 'S')
+	                     : (mode & 00100 ? 'x' : '-'));
+	putchar(mode & 00040 ? 'r' : '-');
+	putchar(mode & 00020 ? 'w' : '-');
+	putchar(mode & 02000 ? (mode & 00010 ? 's' : 'S')
+	                     : (mode & 00010 ? 'x' : '-'));
+	putchar(mode & 00004 ? 'r' : '-');
+	putchar(mode & 00002 ? 'w' : '-');
+	putchar(mode & 01000 ? (mode & 00001 ? 'T' : 't')
+	                     : (mode & 00001 ? 'x' : '-'));
+}
+
+void
 print(const void *nodep, const VISIT which, const int depth)
 {
 	if (which == postorder || which == leaf) {
@@ -666,7 +684,7 @@ print(const void *nodep, const VISIT which, const int depth)
 				case 'f': printf("%s", basenam(fi->fpath)); break;
 				case 'A':
 				case 'C':
-				case 'M':
+				case 'T':
 					{
 					char tfmt[3] = "%\0\0";
 					char buf[256];
@@ -682,6 +700,13 @@ print(const void *nodep, const VISIT which, const int depth)
 					break;
 					}
 
+				case 'm':
+					printf("%04o", fi->sb.st_mode & 07777);
+					break;
+				case 'M':
+					print_mode(fi->sb.st_mode);
+					break;
+
 				case 'g':
 					{
 						char *s = groupname(fi->sb.st_gid);
@@ -859,7 +884,7 @@ main(int argc, char *argv[])
 		case 'l':
 			lflag++;
 			// "%M %2n %u %g %9s %TY-%Tm-%Td %TH:%TM %p%F\n"; break;
-			format = "%M %n %u %g %s %MY-%Mm-%Md %MH:%MM %p%F%l\n"; break;
+			format = "%M %n %u %g %s %TY-%Tm-%Td %TH:%TM %p%F%l\n"; break;
 		case 'F': format = "%p%F\\n"; break;
 		default:
 			fprintf(stderr, "Usage: %s [-oxL] PATH...\n", argv[0]);