From 1d989295a36dee4c2b63374b4e509c24745b5e2c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Mon, 13 Jul 2026 17:48:38 +0200 Subject: [PATCH] read arbitrarily long command lines + embedded line breaks --- glade1.c | 21 ++++++++++++++++----- glade1.glade | 3 --- 2 files changed, 16 insertions(+), 8 deletions(-) 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 -- 2.47.3