summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2023-02-14 01:04:51 +0100
committerLouis Burda <quent.burda@gmail.com>2023-02-14 01:04:51 +0100
commit7c5179b792a8504564131d08692a838c5a019749 (patch)
treef77ae65c0be61e264212761c434bd2d915cdc857
downloadrevb-7c5179b792a8504564131d08692a838c5a019749.tar.gz
revb-7c5179b792a8504564131d08692a838c5a019749.zip
Initial version
-rw-r--r--.gitignore1
-rw-r--r--Makefile19
-rw-r--r--revb.c75
3 files changed, 95 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..481e027
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+revb
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..3d324fc
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,19 @@
+PREFIX ?= /usr/local
+BINDIR ?= /bin
+
+CFLAGS = -g
+
+all: revb
+
+clean:
+ rm -f revb
+
+revb: revb.c
+
+install:
+ install -m 755 revb -t "$(DESTDIR)$(PREFIX)$(BINDIR)"
+
+uninstall:
+ rm -f "$(DESTDIR)$(PREFIX)$(BINDIR)/revb"
+
+.PHONY: all clean install uninstall
diff --git a/revb.c b/revb.c
new file mode 100644
index 0000000..cb1752c
--- /dev/null
+++ b/revb.c
@@ -0,0 +1,75 @@
+#include <unistd.h>
+#include <fcntl.h>
+#include <err.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define CHUNKSIZE 4096
+
+uint8_t *
+load(FILE *file, uint8_t *data, ssize_t *datalen)
+{
+ ssize_t cap, len;
+ ssize_t nread;
+ int ret;
+
+ len = *datalen;
+ cap = len + CHUNKSIZE;
+ data = realloc(data, cap);
+ if (!data) err(1, "realloc");
+
+ while (1) {
+ if (len + CHUNKSIZE > cap) {
+ cap *= 2;
+ data = realloc(data, cap);
+ if (!data) err(1, "realloc");
+ }
+
+ nread = fread(data + len, 1, CHUNKSIZE, file);
+ if (nread <= 0) break;
+
+ len += nread;
+ }
+
+ *datalen = len;
+
+ return data;
+}
+
+int
+main(int argc, const char **argv)
+{
+ uint8_t *data, tmp;
+ ssize_t a, b, len;
+ FILE *file;
+ int i;
+
+ len = 0;
+ data = NULL;
+ if (argc > 1) {
+ for (i = 1; i < argc; i++) {
+ file = fopen(argv[i], "r");
+ if (!file) err(1, "fopen");
+ data = load(file, data, &len);
+ fclose(file);
+ }
+ } else {
+ data = load(stdin, data, &len);
+ }
+ if (!len) return 0;
+
+ a = 0;
+ b = len - 1;
+ while (a < b) {
+ tmp = data[a];
+ data[a] = data[b];
+ data[b] = tmp;
+ a++; b--;
+ }
+
+ if (!fwrite(data, len, 1, stdout))
+ err(1, "fwrite");
+
+ free(data);
+}