mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-03-01 14:38:29 +00:00
The termios::c_cc field turned out to be incorrectly defined on Linux due to some confusion between the glibc and kernel definitions. We'll be using the kernel definition, since it has the strongest consensus. Fields have been have been added to struct stat for BSD compatibility such as st_birthtim, plus the GLIBC compatibility of isystem/sys/stat has been improved.
64 lines
2.4 KiB
C
64 lines
2.4 KiB
C
#if 0
|
|
/*─────────────────────────────────────────────────────────────────╗
|
|
│ To the extent possible under law, Justine Tunney has waived │
|
|
│ all copyright and related or neighboring rights to this file, │
|
|
│ as it is written in the following disclaimers: │
|
|
│ • http://unlicense.org/ │
|
|
│ • http://creativecommons.org/publicdomain/zero/1.0/ │
|
|
╚─────────────────────────────────────────────────────────────────*/
|
|
#endif
|
|
#include "libc/calls/calls.h"
|
|
#include "libc/calls/struct/stat.h"
|
|
#include "libc/errno.h"
|
|
#include "libc/fmt/fmt.h"
|
|
#include "libc/log/check.h"
|
|
#include "libc/log/log.h"
|
|
#include "libc/runtime/gc.h"
|
|
#include "libc/stdio/stdio.h"
|
|
#include "libc/x/x.h"
|
|
|
|
/**
|
|
* @fileoverview File metadata viewer.
|
|
*
|
|
* This demonstrates the more powerful aspects of the printf() DSL.
|
|
*/
|
|
|
|
void PrintFileMetadata(const char *pathname, struct stat *st) {
|
|
printf("\n%s:", pathname);
|
|
CHECK_NE(-1, stat(pathname, st));
|
|
printf("\n"
|
|
"%-32s%,ld\n"
|
|
"%-32s%,ld\n"
|
|
"%-32s%#lx\n"
|
|
"%-32s%#lx\n"
|
|
"%-32s%ld\n"
|
|
"%-32s%#o\n"
|
|
"%-32s%d\n"
|
|
"%-32s%d\n"
|
|
"%-32s%d\n"
|
|
"%-32s%d\n"
|
|
"%-32s%ld\n"
|
|
"%-32s%ld\n"
|
|
"%-32s%s\n"
|
|
"%-32s%s\n"
|
|
"%-32s%s\n"
|
|
"%-32s%s\n",
|
|
"bytes in file", st->st_size, "physical bytes", st->st_blocks * 512,
|
|
"device id w/ file", st->st_dev, "inode", st->st_ino,
|
|
"hard link count", st->st_nlink, "mode / permissions", st->st_mode,
|
|
"owner id", st->st_uid, "group id", st->st_gid, "flags", st->st_flags,
|
|
"gen", st->st_gen, "device id (if special)", st->st_rdev, "block size",
|
|
st->st_blksize, "access time", _gc(xiso8601(&st->st_atim)),
|
|
"modified time", _gc(xiso8601(&st->st_mtim)), "c[omplicated]time",
|
|
_gc(xiso8601(&st->st_ctim)), "birthtime",
|
|
_gc(xiso8601(&st->st_birthtim)));
|
|
}
|
|
|
|
int main(int argc, char *argv[]) {
|
|
size_t i;
|
|
struct stat st;
|
|
for (i = 1; i < argc; ++i) {
|
|
PrintFileMetadata(argv[i], &st);
|
|
}
|
|
return 0;
|
|
}
|