-
-/*
- * arglist.c -- Routines for handling argument lists for execvp() and friends
+/* arglist.c -- Routines for handling argument lists for execvp() and friends
*
* This code is Copyright (c) 2013, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
* complete copyright information.
*/
-#include <h/mh.h>
-#include <h/utils.h>
+#include "h/mh.h"
+#include "r1bindex.h"
+#include "brkstring.h"
+#include "error.h"
+#include "arglist.h"
+#include "h/utils.h"
/*
* Split up a command into an appropriate array to pass to execvp()
argsplit(char *command, char **file, int *argp)
{
char **argvarray, *p;
- int space = 0, metachar = 0, i;
+ int i;
+ bool space = false;
+ bool metachar = false;
for (p = command; *p; p++) {
if (*p == ' ' || *p == '\t') {
- space = 1;
+ space = true;
} else if (strchr(METACHARS, *p)) {
- metachar = 1;
+ metachar = true;
break;
}
}
- argvarray = (char **) mh_xmalloc((sizeof(char **) * (MAXARGS + 5)));
+ argvarray = mh_xmalloc(sizeof *argvarray * (MAXARGS + 5));
/*
* The simple case - no spaces or shell metacharacters
*/
if (!space && !metachar) {
- argvarray[0] = getcpy(r1bindex(command, '/'));
+ argvarray[0] = mh_xstrdup(r1bindex(command, '/'));
argvarray[1] = NULL;
- *file = getcpy(command);
+ *file = mh_xstrdup(command);
if (argp)
*argp = 1;
return argvarray;
if (space && !metachar) {
char **split;
- p = getcpy(command);
+ p = mh_xstrdup(command);
split = brkstring(p, " \t", NULL);
if (split[0] == NULL) {
- adios(NULL, "Invalid blank command found");
+ die("Invalid blank command found");
}
- argvarray[0] = getcpy(r1bindex(split[0], '/'));
+ argvarray[0] = mh_xstrdup(r1bindex(split[0], '/'));
for (i = 1; split[i] != NULL; i++) {
if (i > MAXARGS) {
- adios(NULL, "Command exceeded argument limit");
+ die("Command exceeded argument limit");
}
- argvarray[i] = getcpy(split[i]);
+ argvarray[i] = mh_xstrdup(split[i]);
}
argvarray[i] = NULL;
- *file = getcpy(split[0]);
+ *file = mh_xstrdup(split[0]);
if (argp)
*argp = i;
free(p);
*file = mh_xstrdup("/bin/sh");
argvarray[0] = mh_xstrdup("sh");
argvarray[1] = mh_xstrdup("-c");
- argvarray[2] = getcpy(command);
+ argvarray[2] = mh_xstrdup(command);
argvarray[2] = add(" \"$@\"", argvarray[2]);
argvarray[3] = mh_xstrdup("/bin/sh");
argvarray[4] = NULL;
{
int i;
- if (command != NULL)
- free(command);
+ free(command);
if (argvarray != NULL) {
for (i = 0; argvarray[i] != NULL; i++)
*/
if (msgs->size + argp >= msgs->max) {
- msgs->max += MAXMSGS > argp ? MAXMSGS : argp;
- msgs->msgs = mh_xrealloc(msgs->msgs, msgs->max * sizeof(*msgs->msgs));
+ msgs->max += max(MAXMSGS, argp);
+ msgs->msgs = mh_xrealloc(msgs->msgs, msgs->max * sizeof(*msgs->msgs));
}
for (i = msgs->size - 1; i >= 0; i--)