Restart by calling execvp() directly
Before this, we used a_exec() with started a shell and used it to parse our glued-together command line. That only asks for escaping trouble (think: Path to the config file is given on the command line and contains a space), so use execvp() directly. Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
84080c64c5
commit
d799eea2cf
20
awesome.c
20
awesome.c
|
@ -59,7 +59,7 @@
|
||||||
awesome_t globalconf;
|
awesome_t globalconf;
|
||||||
|
|
||||||
/** argv used to run awesome */
|
/** argv used to run awesome */
|
||||||
static char *awesome_argv;
|
static char **awesome_argv;
|
||||||
|
|
||||||
/** time of last main loop wakeup */
|
/** time of last main loop wakeup */
|
||||||
static struct timeval last_wakeup;
|
static struct timeval last_wakeup;
|
||||||
|
@ -465,7 +465,8 @@ void
|
||||||
awesome_restart(void)
|
awesome_restart(void)
|
||||||
{
|
{
|
||||||
awesome_atexit(true);
|
awesome_atexit(true);
|
||||||
a_exec(awesome_argv);
|
execvp(awesome_argv[0], awesome_argv);
|
||||||
|
fatal("execv() failed: %s", strerror(errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Function to restart awesome on some signals.
|
/** Function to restart awesome on some signals.
|
||||||
|
@ -513,8 +514,7 @@ main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *confpath = NULL;
|
char *confpath = NULL;
|
||||||
string_array_t searchpath;
|
string_array_t searchpath;
|
||||||
int xfd, i, opt;
|
int xfd, opt;
|
||||||
ssize_t cmdlen = 1;
|
|
||||||
xdgHandle xdg;
|
xdgHandle xdg;
|
||||||
bool no_argb = false;
|
bool no_argb = false;
|
||||||
bool run_test = false;
|
bool run_test = false;
|
||||||
|
@ -545,17 +545,7 @@ main(int argc, char **argv)
|
||||||
string_array_init(&searchpath);
|
string_array_init(&searchpath);
|
||||||
|
|
||||||
/* save argv */
|
/* save argv */
|
||||||
for(i = 0; i < argc; i++)
|
awesome_argv = argv;
|
||||||
cmdlen += a_strlen(argv[i]) + 1;
|
|
||||||
|
|
||||||
awesome_argv = p_new(char, cmdlen);
|
|
||||||
a_strcpy(awesome_argv, cmdlen, argv[0]);
|
|
||||||
|
|
||||||
for(i = 1; i < argc; i++)
|
|
||||||
{
|
|
||||||
a_strcat(awesome_argv, cmdlen, " ");
|
|
||||||
a_strcat(awesome_argv, cmdlen, argv[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Text won't be printed correctly otherwise */
|
/* Text won't be printed correctly otherwise */
|
||||||
setlocale(LC_CTYPE, "");
|
setlocale(LC_CTYPE, "");
|
||||||
|
|
Loading…
Reference in New Issue