[hackers] [ubase] Import stat(1) from sbase || sin

From: <git_AT_suckless.org>
Date: Thu, 30 Jan 2014 17:24:07 +0100

commit 9dbc997058e31d1e06395761008826a0bde5b05a
Author: sin <sin_AT_2f30.org>
Date: Thu Jan 30 16:20:27 2014 +0000

    Import stat(1) from sbase
    
    This utility uses major()/minor() which are not portable. It
    belongs in ubase.

diff --git a/Makefile b/Makefile
index 959dd1a..1c12d07 100644
--- a/Makefile
+++ b/Makefile
_AT_@ -39,6 +39,7 @@ SRC = \
         ps.c \
         rmmod.c \
         su.c \
+ stat.c \
         swapoff.c \
         swapon.c \
         truncate.c \
diff --git a/stat.1 b/stat.1
new file mode 100644
index 0000000..7e79ecf
--- /dev/null
+++ b/stat.1
_AT_@ -0,0 +1,17 @@
+.TH STAT 1 ubase\-VERSION
+.SH NAME
+stat \- display file status
+.SH SYNOPSIS
+.B stat
+.RB [ \-L ]
+.RI [ file ...]
+.SH DESCRIPTION
+.B stat
+displays information about the given files or stdin if no files
+are specified.
+.SH OPTIONS
+.TP
+.B \-L
+follow links
+.SH SEE ALSO
+.IR stat (2)
diff --git a/stat.c b/stat.c
new file mode 100644
index 0000000..7b55966
--- /dev/null
+++ b/stat.c
_AT_@ -0,0 +1,75 @@
+/* See LICENSE file for copyright and license details. */
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <errno.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include "util.h"
+
+static void show_stat(const char *file, struct stat *st);
+
+static void
+usage(void)
+{
+ eprintf("usage: %s [-L] [file...]
", argv0);
+}
+
+int
+main(int argc, char *argv[])
+{
+ struct stat st;
+ int i, ret = EXIT_SUCCESS;
+ int Lflag = 0;
+ int (*fn)(const char *, struct stat *);
+
+ ARGBEGIN {
+ case 'L':
+ Lflag = 1;
+ break;
+ default:
+ usage();
+ } ARGEND;
+
+ if (argc == 0) {
+ if (fstat(STDIN_FILENO, &st) < 0)
+ eprintf("stat <stdin>:");
+ show_stat("<stdin>", &st);
+ }
+
+ for (i = 0; i < argc; i++) {
+ fn = Lflag ? stat : lstat;
+ if (fn(argv[i], &st) == -1) {
+ fprintf(stderr, "%s %s: %s
", Lflag ? "stat" : "lstat",
+ argv[i], strerror(errno));
+ ret = EXIT_FAILURE;
+ continue;
+ }
+ show_stat(argv[i], &st);
+ }
+
+ return ret;
+}
+
+static void
+show_stat(const char *file, struct stat *st)
+{
+ char buf[100];
+
+ printf(" File: ā€˜%sā€™
", file);
+ printf(" Size: %lu Blocks: %lu IO Block: %lu
", (unsigned long)st->st_size,
+ (unsigned long)st->st_blocks, (unsigned long)st->st_blksize);
+ printf("Device: %xh/%ud Inode: %lu Links %lu
", major(st->st_dev),
+ minor(st->st_dev), (unsigned long)st->st_ino, (unsigned long)st->st_nlink);
+ printf("Access: %04o Uid: %u Gid: %u
", st->st_mode & 0777, st->st_uid, st->st_gid);
+ strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", localtime(&st->st_atime));
+ printf("Access: %s
", buf);
+ strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", localtime(&st->st_mtime));
+ printf("Modify: %s
", buf);
+ strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", localtime(&st->st_ctime));
+ printf("Change: %s
", buf);
+}
Received on Thu Jan 30 2014 - 17:24:07 CET

This archive was generated by hypermail 2.3.0 : Thu Jan 30 2014 - 17:36:10 CET