diff options
author | lns <matzeton@googlemail.com> | 2019-10-14 00:53:39 +0200 |
---|---|---|
committer | lns <matzeton@googlemail.com> | 2019-10-14 00:53:39 +0200 |
commit | 320e2466a8bbcbdc75c5fc1f8221e7f86094c93a (patch) | |
tree | 8acea27ed121b4036d06c84fb72e0ea18ee4c32c | |
parent | 876377ea633f5edfff2b217b6d65dbaea1f059db (diff) |
added textify Makefile targets and untextify feature
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | textify.c | 58 |
2 files changed, 50 insertions, 14 deletions
@@ -73,9 +73,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 scrambler.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) @@ -20,7 +20,11 @@ void print_binary_hex(uint8_t *bin, size_t siz) size_t i; for (i = 0; i < siz; ++i) { - printf("%s%02X ", " ", bin[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) { @@ -39,15 +43,13 @@ ssize_t textify(uint8_t *bin, size_t siz, char *out, size_t outsiz) for (i = 0, j = 0; i < siz && j < outsiz / 3; ++i, j += 3) { uint8_t tmp0 = 32, tmp1 = 64, tmp2 = 64; - if (bin[i] >= 127 || bin[i] < 32) { - 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; - } + 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]; } @@ -60,10 +62,31 @@ ssize_t textify(uint8_t *bin, size_t siz, char *out, size_t outsiz) 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]); @@ -71,6 +94,7 @@ int main(int argc, char **argv) } 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); @@ -81,7 +105,19 @@ int main(int argc, char **argv) } print_binary_hex((uint8_t *)outbuf, ret); - printf("%s result: '%s'\n", argv[0], outbuf); + 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; } |