From ff9767eb8f1bff378116718ce23acaeb600a9a54 Mon Sep 17 00:00:00 2001 From: Laurent MAZET Date: Mon, 13 May 2024 18:55:40 +0200 Subject: [PATCH] error managment --- cmd.c | 4 ++++ cmore.c | 25 ++++++++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/cmd.c b/cmd.c index 95d1718..7c3054a 100644 --- a/cmd.c +++ b/cmd.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "debug.h" @@ -33,7 +34,10 @@ char *exec_cmd (char *cmd) char *buffer = NULL; VERBOSE (DEBUG, fprintf (stdout, "exec command: %s\n", cmd)); + int saved_stderr = dup (STDERR_FILENO); + close (STDERR_FILENO); FILE *fp = popen (cmd, "r"); + dup2 (saved_stderr, STDERR_FILENO); if (fp != NULL) { buffer = _read_stream (fp); status = pclose(fp); diff --git a/cmore.c b/cmore.c index 475774b..460814b 100644 --- a/cmore.c +++ b/cmore.c @@ -20,6 +20,8 @@ char *command = NULL; char **lines = NULL; int second = 0; +#define MAX_LENGTH 48 + void display (char **lines, int xmax, int ymax, int keep_skip) { int stop = 0; @@ -134,9 +136,10 @@ void process (void) } if (buffer == NULL) { - cleanup (); - VERBOSE (ERROR, fprintf (stderr, "%s: %s\n", command ? "can't execute:" : input ? "can't load:" : "can't read", command ? command : input ? input : "stdin")); - exit (1); + char msg[MAX_LENGTH + 13 + 2 + 1] = {0}; + sprintf (msg, "%s: %s", command ? "can't execute" : input ? "can't load" : "can't read", command ? command : input ? input : "stdin"); + errormsg (msg); + return; } free_lines (lines); @@ -183,10 +186,14 @@ void about (void) void chcmd (void) { - char buffer[48 + 1] = {0}; + char buffer[MAX_LENGTH + 1] = {0}; char *desc[] = {"New command", NULL}; char *buf[] = {buffer, NULL}; - int c = getstrings (desc, buf, 48); + + if (command) { + strncpy (buffer, command, MAX_LENGTH); + } + int c = getstrings (desc, buf, MAX_LENGTH); if ((c == '\n') && (strlen (buffer) > 0)) { free (command); @@ -199,10 +206,14 @@ void chcmd (void) void chfile (void) { - char buffer[48 + 1] = {0}; + char buffer[MAX_LENGTH + 1] = {0}; char *desc[] = {"New file", NULL}; char *buf[] = {buffer, NULL}; - int c = getstrings (desc, buf, 48); + + if (input) { + strncpy (buffer, input, MAX_LENGTH); + } + int c = getstrings (desc, buf, MAX_LENGTH); if ((c == '\n') && (strlen (buffer) > 0)) { free (command); -- 2.30.2