aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToni Uhlig <matzeton@googlemail.com>2019-10-14 08:08:25 +0200
committerToni Uhlig <matzeton@googlemail.com>2019-10-14 08:08:25 +0200
commit1b1c7bfbb3bdfda23602dea887b6462a17715791 (patch)
treeebe400742b85200f53ad19dd38c83c3f47f059b4
parent2e13536e0ba210f82ac24def1038ff73c5058b7b (diff)
parentec3f5d405ed8feacdfb86c10f9be3b91d010f0a4 (diff)
Merge branch 'master' of ssh://git.lan:/git/tools
-rw-r--r--Makefile17
-rw-r--r--ascii85.c (renamed from scrambler.c)0
-rw-r--r--dummyshell.c6
-rw-r--r--textify.c123
4 files changed, 138 insertions, 8 deletions
diff --git a/Makefile b/Makefile
index 425b765..080e814 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@ CFLAGS := -O2 -g -Wall -ffunction-sections -fdata-sections -ffast-math -fomit-fr
LDFLAGS :=
RM := rm -rf
-TARGETS := aes asciihexer dummyshell suidcmd scrambler progressbar
+TARGETS := aes asciihexer dummyshell suidcmd ascii85 textify progressbar
ifneq ($(strip $(MAKE_NCURSES)),)
TARGETS += gol
@@ -35,7 +35,14 @@ suidcmd: suidcmd.o
@echo 'Finished building target: $@'
@echo ' '
-scrambler: scrambler.o
+ascii85: ascii85.o
+ @echo 'Building target: $@'
+ @echo 'Invoking: GCC C Linker'
+ $(CC) $(LDFLAGS) -o "$@" "$<" -lm
+ @echo 'Finished building target: $@'
+ @echo ' '
+
+textify: textify.o
@echo 'Building target: $@'
@echo 'Invoking: GCC C Linker'
$(CC) $(LDFLAGS) -o "$@" "$<" -lm
@@ -74,9 +81,9 @@ strip:
strip -s $(TARGETS)
clean:
- -$(RM) aes.o asciihexer.o dummyshell.o gol.o suidcmd.o scrambler.o xidle.o xdiff.o
- -$(RM) aes.d asciihexer.d dummyshell.d gol.d suidcmd.d scrambler.d xidle.d xdiff.d
- -$(RM) aes asciihexer dummyshell gol suidcmd scrambler xidle xdiff
+ -$(RM) aes.o asciihexer.o dummyshell.o gol.o suidcmd.o ascii85.o textify.o xidle.o xdiff.o
+ -$(RM) aes.d asciihexer.d dummyshell.d gol.d suidcmd.d scrambler.d textify.d xidle.d xdiff.d
+ -$(RM) aes asciihexer dummyshell gol suidcmd scrambler textify xidle xdiff
-@echo ' '
install: $(TARGETS)
diff --git a/scrambler.c b/ascii85.c
index 340a34a..340a34a 100644
--- a/scrambler.c
+++ b/ascii85.c
diff --git a/dummyshell.c b/dummyshell.c
index eb43206..796f7e3 100644
--- a/dummyshell.c
+++ b/dummyshell.c
@@ -131,7 +131,7 @@ static char readInput(char* buf, size_t* siz, size_t szMax, int key, int flags)
#ifdef _HAS_CMD
#define NO_ARGS 0b00000001
#define NEED_ARGS 0b00000010
-struct __attribute__((__packed__)) cmd {
+struct cmd {
char* name;
char* path;
char* defargs;
@@ -264,13 +264,13 @@ static int init_msg(void)
return 0;
}
-struct __attribute__((__packed__)) msgHdr {
+struct msgHdr {
uint8_t szFrom;
uint8_t szMsg;
uint64_t timestamp; /* works for x86 and x64 */
};
-struct __attribute__((__packed__)) msg {
+struct msg {
char* from;
char* msg;
};
diff --git a/textify.c b/textify.c
new file mode 100644
index 0000000..a88de2c
--- /dev/null
+++ b/textify.c
@@ -0,0 +1,123 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+
+#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c"
+#define BYTE_TO_BINARY(byte) \
+ (byte & 0x80 ? '1' : '0'), \
+ (byte & 0x40 ? '1' : '0'), \
+ (byte & 0x20 ? '1' : '0'), \
+ (byte & 0x10 ? '1' : '0'), \
+ (byte & 0x08 ? '1' : '0'), \
+ (byte & 0x04 ? '1' : '0'), \
+ (byte & 0x02 ? '1' : '0'), \
+ (byte & 0x01 ? '1' : '0')
+
+
+void print_binary_hex(uint8_t *bin, size_t siz)
+{
+ size_t i;
+
+ for (i = 0; i < siz; ++i) {
+ printf("%8.02X ", bin[i]);
+ }
+ printf("\n");
+ for (i = 0; i < siz; ++i) {
+ printf("%8.d ", bin[i]);
+ }
+ printf("\n");
+ for (i = 0; i < siz; ++i) {
+ printf(BYTE_TO_BINARY_PATTERN " ", BYTE_TO_BINARY(bin[i]));
+ }
+ printf("\n");
+}
+
+ssize_t textify(uint8_t *bin, size_t siz, char *out, size_t outsiz)
+{
+ size_t i, j;
+
+ if (!bin || !out)
+ return -1;
+
+ for (i = 0, j = 0; i < siz && j < outsiz / 3; ++i, j += 3) {
+ uint8_t tmp0 = 32, tmp1 = 64, tmp2 = 64;
+
+ if (bin[i] < 32)
+ tmp1 = bin[i] + 32;
+ else if (bin[i] >= 127) {
+ if (bin[i] < 190)
+ tmp1 = bin[i] - 63;
+ else
+ tmp2 = bin[i] - 63*2;
+ } else {
+ tmp0 = bin[i];
+ }
+
+ out[j+0] = tmp0;
+ out[j+1] = tmp1;
+ out[j+2] = tmp2;
+ }
+
+ return j;
+}
+
+ssize_t untextify(uint8_t *text, size_t siz, char *out, size_t outsiz)
+{
+ size_t i, j;
+
+ if (!text || !out)
+ return -1;
+
+ for (i = 0, j = 0; i < siz / 3 && j < outsiz; i += 3, ++j) {
+ if (text[i+1] >= 32 && text[i+1] < 64) {
+ out[j] = text[i+1] - 32;
+ } else if (text[i+1] >= 64 && text[i+1] < 96) {
+ out[j] = text[i+1] + 63;
+ } else if (text[i+2] >= 96 && text[i+1] < 127) {
+ out[j] = text[i+2] + 63*2;
+ }
+ }
+
+ return j;
+}
+
+int main(int argc, char **argv)
+{
+ ssize_t ret;
+ char outbuf[BUFSIZ] = {0};
+ char orgbuf[BUFSIZ] = {0};
+
+ if (argc != 2) {
+ printf("usage: %s [DATA]\n", argv[0]);
+ return 1;
+ }
+
+ print_binary_hex((uint8_t *)argv[1], strnlen(argv[1], BUFSIZ));
+ printf("\n");
+
+ ret = textify((uint8_t *)argv[1], strnlen(argv[1], sizeof outbuf / 3),
+ outbuf, sizeof outbuf);
+ if (ret < 0)
+ {
+ printf("%s: textify failed\n", argv[0]);
+ return 1;
+ }
+
+ print_binary_hex((uint8_t *)outbuf, ret);
+ outbuf[BUFSIZ-1] = 0;
+ printf("%s result: '%s'\n\n", argv[0], outbuf);
+
+ ret = untextify((uint8_t *)outbuf, ret, orgbuf, sizeof orgbuf);
+ if (ret < 0)
+ {
+ printf("%s: untextify failed\n", outbuf);
+ return 1;
+ }
+
+ print_binary_hex((uint8_t *) orgbuf, ret);
+ orgbuf[BUFSIZ-1] = 0;
+ printf("%s result: '%s'\n", argv[0], orgbuf);
+
+ return 0;
+}