From b3f619412216a87e707be86005557176bde87d0b Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Thu, 18 May 2023 22:33:46 +0200 Subject: [PATCH] Fix Hurd build It does not have a PATH_MAX compile-time limitation. Instead of using it we can just allocate dynamically. Signed-off-by: Samuel Thibault Reviewed-by: Norbert Pocs Reviewed-by: Jakub Jelen --- examples/ssh_client.c | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/examples/ssh_client.c b/examples/ssh_client.c index b0b44aa2..cc249183 100644 --- a/examples/ssh_client.c +++ b/examples/ssh_client.c @@ -297,25 +297,41 @@ static void shell(ssh_session session) static void batch_shell(ssh_session session) { ssh_channel channel; - char buffer[PATH_MAX]; - size_t i; - int s = 0; - - for (i = 0; i < MAXCMD && cmds[i]; ++i) { - s += snprintf(buffer + s, sizeof(buffer) - s, "%s ", cmds[i]); - } + char *buffer = NULL; + size_t i, s, n; channel = ssh_channel_new(session); if (channel == NULL) { return; } - ssh_channel_open_session(channel); - if (ssh_channel_request_exec(channel, buffer)) { - printf("Error executing '%s' : %s\n", buffer, ssh_get_error(session)); + n = 0; + for (i = 0; i < MAXCMD && cmds[i]; ++i) { + /* Including space after cmds[i] */ + n += strlen(cmds[i]) + 1; + } + /* Trailing \0 */ + n += 1; + + buffer = malloc(n); + if (buffer == NULL) { ssh_channel_free(channel); return; } + + s = 0; + for (i = 0; i < MAXCMD && cmds[i]; ++i) { + s += snprintf(buffer + s, n - s, "%s ", cmds[i]); + } + + ssh_channel_open_session(channel); + if (ssh_channel_request_exec(channel, buffer)) { + printf("Error executing '%s' : %s\n", buffer, ssh_get_error(session)); + free(buffer); + ssh_channel_free(channel); + return; + } + free(buffer); select_loop(session, channel); ssh_channel_free(channel); }