X-Git-Url: https://pd.if.org/git/?p=zpackage;a=blobdiff_plain;f=zpm-stat.c;h=d9f5aa115a8985ab24beaffc8cc58f50f63254e8;hp=b8cb9d767cb906746aae7f4bc78626360f2dee18;hb=bd21f0a1265b43ad5f05353a39db31c16826f05c;hpb=62f6ff407bc4f2cf03d1fa7cf3dc9a3f4026624a diff --git a/zpm-stat.c b/zpm-stat.c index b8cb9d7..d9f5aa1 100644 --- a/zpm-stat.c +++ b/zpm-stat.c @@ -60,7 +60,8 @@ char *format_string_parse(char *s, struct format_string *f) { return s; } -void stat_one(char *fmt, char *timefmt, char *filename, struct stat *buf) { +void stat_one(char *fmt, char *timefmt, int zeroterm, char *filename, struct + stat *buf) { struct tm *tm; char timestr[1024]; struct format_string f; @@ -71,6 +72,21 @@ void stat_one(char *fmt, char *timefmt, char *filename, struct stat *buf) { fmt = format_string_parse(fmt, &f); if (!f.found) break; /* done */ if (!f.flags) { + if (f.found == '\\') { + switch (*fmt) { + case 0: + continue; break; + case 'n': + putchar('\n'); break; + case 't': + putchar('\t'); break; + default: + putchar(*fmt); + break; + } + fmt++; + continue; + } /* literal/noformat */ putchar(f.found); /* or whatever */ continue; @@ -126,6 +142,8 @@ void stat_one(char *fmt, char *timefmt, char *filename, struct stat *buf) { case 'n': printf("%s", filename); break; + case 'z': + putchar(0); break; case '%': putchar('%'); break; @@ -134,7 +152,15 @@ void stat_one(char *fmt, char *timefmt, char *filename, struct stat *buf) { break; } } - putchar('\n'); + if (zeroterm & 2) { + return; + } + + if (zeroterm & 1 ) { + putchar(0); + } else { + putchar('\n'); + } } int main(int ac, char *av[]) { @@ -143,8 +169,9 @@ int main(int ac, char *av[]) { int errflg = 0; int c; int uselstat = 0; + int zeroterm = 0; - while ((c = getopt(ac, av, "lf:t:")) != -1) { + while ((c = getopt(ac, av, "lf:t:0")) != -1) { switch(c) { case 'f': fmt = optarg; @@ -157,6 +184,11 @@ int main(int ac, char *av[]) { "Option -%c requires an operand\n", optopt); errflg++; break; + case 'z': + zeroterm |= 2; + case '0': + zeroterm |= 1; + break; case 'l': uselstat = 1; break; @@ -177,7 +209,7 @@ int main(int ac, char *av[]) { } else { stat(av[optind], &buf); } - stat_one(fmt, timefmt, av[optind], &buf); + stat_one(fmt, timefmt, zeroterm, av[optind], &buf); } return 0; }