#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
#include "debug.h"
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);
char **lines = NULL;
int second = 0;
+#define MAX_LENGTH 48
+
void display (char **lines, int xmax, int ymax, int keep_skip)
{
int stop = 0;
}
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);
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);
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);