From 55fba9cfd29755cfe47eb9f5c2c3ba7be663b12b Mon Sep 17 00:00:00 2001 From: Dimitri Lozeve Date: Wed, 3 Jun 2020 21:50:31 +0200 Subject: [PATCH] Solve challenge 5 --- ex05/input.txt | 2 ++ ex05/main.c | 41 +++++++++++++++++++++++++++++++++++++++++ meson.build | 1 + 3 files changed, 44 insertions(+) create mode 100644 ex05/input.txt create mode 100644 ex05/main.c diff --git a/ex05/input.txt b/ex05/input.txt new file mode 100644 index 0000000..ea4dafe --- /dev/null +++ b/ex05/input.txt @@ -0,0 +1,2 @@ +Burning 'em, if you ain't quick and nimble +I go crazy when I hear a cymbal \ No newline at end of file diff --git a/ex05/main.c b/ex05/main.c new file mode 100644 index 0000000..c89215d --- /dev/null +++ b/ex05/main.c @@ -0,0 +1,41 @@ +#include "utils.h" +#include +#include +#include + +int main(int argc, char *argv[]) { + if (argc < 3) { + printf("Usage: %s \n", argv[0]); + return EXIT_FAILURE; + } + + const char *key = argv[1]; + const char *filename = argv[2]; + + FILE *fp = fopen(filename, "r"); + if (fp == NULL) { + printf("Error opening file %s\n", filename); + return EXIT_FAILURE; + } + + unsigned int key_length = strlen(key); + + char buf[1024]; + size_t nread = 0; + size_t counter = 0; + while ((nread = fread(buf, 1, sizeof buf, fp)) > 0) { + for (size_t i = 0; i < nread; ++i) { + printf("%02x", buf[i] ^ key[counter % key_length]); + counter++; + } + } + + putchar('\n'); + + if (fclose(fp)) { + printf("Error closing file %s\n", filename); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/meson.build b/meson.build index 065f428..cb25814 100644 --- a/meson.build +++ b/meson.build @@ -7,3 +7,4 @@ executable('ex01', ['ex01/main.c', 'utils.c'], dependencies: m_dep) executable('ex02', ['ex02/main.c', 'utils.c'], dependencies: m_dep) executable('ex03', ['ex03/main.c', 'utils.c'], dependencies: m_dep) executable('ex04', ['ex04/main.c', 'utils.c'], dependencies: m_dep) +executable('ex05', ['ex05/main.c', 'utils.c'], dependencies: m_dep)