summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2019-07-19 13:47:40 -0400
committerJakob Kaivo <jkk@ung.org>2019-07-19 13:47:40 -0400
commit512def0747a237976b045175d271d41280de8b15 (patch)
tree7831251ada4b6da1e14e7050a8cb0a8d5f5d01e2
parentfdf655797bbff965d93beb7e51c025eb3fc20526 (diff)
on second thought, an AWK script is fine
-rwxr-xr-xtac12
-rw-r--r--tac.c45
2 files changed, 12 insertions, 45 deletions
diff --git a/tac b/tac
new file mode 100755
index 0000000..d4261a7
--- /dev/null
+++ b/tac
@@ -0,0 +1,12 @@
+cat "$@" | awk "$(tail -n +3 $0)"
+exit $?
+
+{
+ lines[NR] = $0;
+}
+
+END {
+ for (i = NR; i > 0; i--) {
+ print lines[i]
+ }
+}
diff --git a/tac.c b/tac.c
deleted file mode 100644
index 088ebda..0000000
--- a/tac.c
+++ /dev/null
@@ -1,45 +0,0 @@
-#define _POSIX_C_SOURCE 200809L
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-struct line {
- struct line *prev;
- struct line *next;
- char *line;
-};
-
-int tac(const char *path)
-{
- FILE *f = stdin;
- if (path && strcmp(path, "-") != 0) {
- f = fopen(path, "r");
- if (f == NULL) {
- perror("tac:fopen");
- }
- }
-
- /* read lines into doubly-linked list */
- /* print lines in reverse order */
-
- if (f != stdin) {
- fclose(f);
- }
-
- return 0;
-}
-
-int main(int argc, char *argv[])
-{
- while (getopt(argc, argv, "") != -1) {
- /* no options supported */
- return 1;
- }
-
- int ret = 0;
- do {
- ret |= tac(argv[optind]);
- } while (argv[++optind]);
- return 1;
-}