|
@@ -732,6 +732,7 @@ static void begin_spawn(struct spawn *sp)
|
|
}
|
|
}
|
|
|
|
|
|
#define NEXT_ARG(var, type) ((type) *(var)++)
|
|
#define NEXT_ARG(var, type) ((type) *(var)++)
|
|
|
|
+#define NEXT_ARG_INT(var) (int)((intptr_t) *(var)++)
|
|
|
|
|
|
static void parse_argvec(struct spawn *sp, const char **va)
|
|
static void parse_argvec(struct spawn *sp, const char **va)
|
|
{
|
|
{
|
|
@@ -744,32 +745,32 @@ static void parse_argvec(struct spawn *sp, const char **va)
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
else if (arg == SF_REDIRECT_FILE) {
|
|
else if (arg == SF_REDIRECT_FILE) {
|
|
- sp->redirects[sp->num_redirects].dst_fd = NEXT_ARG(va, int);
|
|
|
|
|
|
+ sp->redirects[sp->num_redirects].dst_fd = NEXT_ARG_INT(va);
|
|
|
|
|
|
sp->redirects[sp->num_redirects].src_fd = -1;
|
|
sp->redirects[sp->num_redirects].src_fd = -1;
|
|
- sp->redirects[sp->num_redirects].mode = NEXT_ARG(va, int);
|
|
|
|
|
|
+ sp->redirects[sp->num_redirects].mode = NEXT_ARG_INT(va);
|
|
sp->redirects[sp->num_redirects].file = NEXT_ARG(va, const char *);
|
|
sp->redirects[sp->num_redirects].file = NEXT_ARG(va, const char *);
|
|
|
|
|
|
sp->num_redirects++;
|
|
sp->num_redirects++;
|
|
}
|
|
}
|
|
else if (arg == SF_REDIRECT_DESCRIPTOR) {
|
|
else if (arg == SF_REDIRECT_DESCRIPTOR) {
|
|
- sp->redirects[sp->num_redirects].dst_fd = NEXT_ARG(va, int);
|
|
|
|
- sp->redirects[sp->num_redirects].src_fd = NEXT_ARG(va, int);
|
|
|
|
|
|
+ sp->redirects[sp->num_redirects].dst_fd = NEXT_ARG_INT(va);
|
|
|
|
+ sp->redirects[sp->num_redirects].src_fd = NEXT_ARG_INT(va);
|
|
|
|
|
|
sp->redirects[sp->num_redirects].file = NULL;
|
|
sp->redirects[sp->num_redirects].file = NULL;
|
|
sp->num_redirects++;
|
|
sp->num_redirects++;
|
|
}
|
|
}
|
|
else if (arg == SF_CLOSE_DESCRIPTOR) {
|
|
else if (arg == SF_CLOSE_DESCRIPTOR) {
|
|
- sp->redirects[sp->num_redirects].dst_fd = NEXT_ARG(va, int);
|
|
|
|
|
|
+ sp->redirects[sp->num_redirects].dst_fd = NEXT_ARG_INT(va);
|
|
|
|
|
|
sp->redirects[sp->num_redirects].src_fd = -1;
|
|
sp->redirects[sp->num_redirects].src_fd = -1;
|
|
sp->redirects[sp->num_redirects].file = NULL;
|
|
sp->redirects[sp->num_redirects].file = NULL;
|
|
sp->num_redirects++;
|
|
sp->num_redirects++;
|
|
}
|
|
}
|
|
else if (arg == SF_SIGNAL) {
|
|
else if (arg == SF_SIGNAL) {
|
|
- sp->signals[sp->num_signals].which = NEXT_ARG(va, int);
|
|
|
|
- sp->signals[sp->num_signals].action = NEXT_ARG(va, int);
|
|
|
|
- sp->signals[sp->num_signals].signum = NEXT_ARG(va, int);
|
|
|
|
|
|
+ sp->signals[sp->num_signals].which = NEXT_ARG_INT(va);
|
|
|
|
+ sp->signals[sp->num_signals].action = NEXT_ARG_INT(va);
|
|
|
|
+ sp->signals[sp->num_signals].signum = NEXT_ARG_INT(va);
|
|
|
|
|
|
sp->signals[sp->num_signals].valid = 0;
|
|
sp->signals[sp->num_signals].valid = 0;
|
|
sp->num_signals++;
|
|
sp->num_signals++;
|