From: Paul Hänsch Date: Mon, 13 Jul 2026 15:48:38 +0000 (+0200) Subject: read arbitrarily long command lines + embedded line breaks X-Git-Url: https://git.plutz.net/?a=commitdiff_plain;h=1d989295a36dee4c2b63374b4e509c24745b5e2c;p=gladerunner read arbitrarily long command lines + embedded line breaks --- diff --git a/glade1.c b/glade1.c index 712c86d..de2a198 100644 --- a/glade1.c +++ b/glade1.c @@ -109,12 +109,23 @@ void a_command(char *cli) { gboolean idle_readline(gpointer d) { // GtkBuilder *bld = GTK_BUILDER(d); - static char buf[128]; - int len; - - if ( (len = read(0, &buf, 127)) > 0 ) { - buf[len] = 0; + static size_t s = 128; + static char *buf = NULL; + static int len = 0; int l; + if (!buf) buf = malloc(s); + + l = read(0, buf + len, s - len); + while ( l > 0 ) { + len += l; + if ( buf[len - 1] == '\n' && (len < 2 || buf[len - 2] != '\\') ) break; + else if (len >= 2) buf[--len - 1] = '\n'; + if ( len == s - 1 ) buf = realloc(buf, s+=128); + l = read(0, buf + len, s - len); + } + if ( l > 0 ) { + buf[len - 1] = 0; a_command(buf); + len = 0; } return 1; } diff --git a/glade1.glade b/glade1.glade index a09f50d..de6da82 100644 --- a/glade1.glade +++ b/glade1.glade @@ -9,11 +9,8 @@ True False - True mouse applications-science - True - True