]> Harvie.CZ GIT Repositories and Mirrors - mirrors/Programs.git/commitdiff
readline challenge master
authorTomas Mudrunka <tomas.mudrunka@gmail.com>
Wed, 24 Sep 2025 11:32:40 +0000 (13:32 +0200)
committerTomas Mudrunka <tomas.mudrunka@gmail.com>
Wed, 24 Sep 2025 11:32:40 +0000 (13:32 +0200)
c/readline_recursive.c [new file with mode: 0644]

diff --git a/c/readline_recursive.c b/c/readline_recursive.c
new file mode 100644 (file)
index 0000000..6bde074
--- /dev/null
@@ -0,0 +1,31 @@
+#include <stdio.h> //Pouze printf() pro debug
+#include <stdlib.h>
+#include <unistd.h>
+
+void readline_rec(int offset, int size, char **buffer) {
+       char *fragment = malloc(size); //Mohlo by byt i staticky, ale size by musela byt konstantni
+       int finished = 0;
+
+       for(int i=0; i<size; i++) {
+               size_t got = read(0, &fragment[i], 1);
+               if(got <= 0 || fragment[i] == '\n' || fragment[i] == '\r') {
+                       fragment[i]=0;
+                       *buffer = malloc(offset + size); //Mohlo by se pouzit +i misto +size, ale muselo by se zohlednit i pri kopirovani
+                       finished=1;
+                       break;
+               }
+       }
+
+       if(!finished) readline_rec(offset+size, size*2, buffer);
+       for(int j=0; j<size; j++) (*buffer)[offset+j] = fragment[j];
+       free(fragment);
+       return;
+}
+
+
+int main() {
+       char *out = NULL;
+       readline_rec(0, 1, &out);
+       printf("Precteno: %s\n", out);
+       free(out);
+}
This page took 0.140581 seconds and 4 git commands to generate.