From 1fde10d2f563daaf2e2eb2cc974f21bc7861e66c Mon Sep 17 00:00:00 2001 From: Roland W-H Date: Sat, 19 Nov 2022 16:50:53 +0000 Subject: [PATCH] implement handling of maxsize param --- src/dyninput.c | 59 ++++++++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/src/dyninput.c b/src/dyninput.c index e53500b..2a0f5b3 100644 --- a/src/dyninput.c +++ b/src/dyninput.c @@ -15,37 +15,44 @@ char* dyninput_str(int_least64_t maxsize) { - char* str = malloc(3 * sizeof(char)); - if (!str) - { - puts("\nError allocating memory!"); - return NULL; - } + char* str = malloc(3 * sizeof(char)); + if (!str) + { + puts("\nError allocating memory!"); + return NULL; + } - int_least64_t size = 3, i = 0; - char c = 0; + int_least64_t size = 3, i = 0; + char c = 0; + + do + { + if (size == maxsize) + { + printf("Character limit of %lld reached!\n", maxsize); + break; + } - do - { - c = getchar(); - if (i + 2 == size) c = (char)getchar(); if (i + 1 == size) - { + { char* tmp = realloc(str, size + 1); - if (!tmp) - { - puts("Error (re)allocating memory!"); - return NULL; - } - str = tmp; - size++; - } + if (!tmp) + { + puts("Error (re)allocating memory!"); + return NULL; + } + str = tmp; + size++; + } - str[i] = c; - i++; - } while (c && c != '\n'); - str[i] = '\0'; + str[i] = c; + i++; + } while (c && c != '\n'); + if (str[i - 1] != '\n') str[i - 1] = '\n'; + str[i] = '\0'; - return str; + // Sanitise stdin + while (c != '\n') c = (char)getchar(); + return str; }