Mercurial > dropbear
diff scp.c @ 666:0ad95abf8d3c
check for fork() and not __uClinux__
author | Mike Frysinger <vapier@gentoo.org> |
---|---|
date | Sun, 08 Apr 2012 01:50:52 -0400 |
parents | cf5a167776c3 |
children | fc7ae88e63b3 |
line wrap: on
line diff
--- a/scp.c Sun Apr 08 02:06:54 2012 -0400 +++ b/scp.c Sun Apr 08 01:50:52 2012 -0400 @@ -130,22 +130,22 @@ fprintf(stderr, " %s", a->list[i]); fprintf(stderr, "\n"); } -#ifdef __uClinux__ +#ifndef HAVE_FORK pid = vfork(); #else pid = fork(); -#endif /* __uClinux__ */ +#endif if (pid == -1) fatal("do_local_cmd: fork: %s", strerror(errno)); if (pid == 0) { execvp(a->list[0], a->list); perror(a->list[0]); -#ifdef __uClinux__ +#ifndef HAVE_FORK _exit(1); #else exit(1); -#endif /* __uClinux__ */ +#endif } do_cmd_pid = pid; @@ -171,6 +171,16 @@ * assigns the input and output file descriptors on success. */ +static void +arg_setup(char *host, char *remuser, char *cmd) +{ + replacearg(&args, 0, "%s", ssh_program); + if (remuser != NULL) + addargs(&args, "-l%s", remuser); + addargs(&args, "%s", host); + addargs(&args, "%s", cmd); +} + int do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout, int argc) { @@ -198,22 +208,18 @@ close(reserved[0]); close(reserved[1]); - /* uClinux needs to build the args here before vforking, - otherwise we do it later on. */ -#ifdef __uClinux__ - replacearg(&args, 0, "%s", ssh_program); - if (remuser != NULL) - addargs(&args, "-l%s", remuser); - addargs(&args, "%s", host); - addargs(&args, "%s", cmd); -#endif /* __uClinux__ */ + /* uClinux needs to build the args here before vforking, + otherwise we do it later on. */ +#ifndef HAVE_FORK + arg_setup(host, remuser, cmd); +#endif /* Fork a child to execute the command on the remote host using ssh. */ -#ifdef __uClinux__ +#ifndef HAVE_FORK do_cmd_pid = vfork(); #else do_cmd_pid = fork(); -#endif /* __uClinux__ */ +#endif if (do_cmd_pid == 0) { /* Child. */ @@ -224,27 +230,22 @@ close(pin[0]); close(pout[1]); -#ifndef __uClinux__ - replacearg(&args, 0, "%s", ssh_program); - if (remuser != NULL) - addargs(&args, "-l%s", remuser); - addargs(&args, "%s", host); - addargs(&args, "%s", cmd); -#endif /* __uClinux__ */ +#ifndef HAVE_FORK + arg_setup(host, remuser, cmd); +#endif execvp(ssh_program, args.list); perror(ssh_program); -#ifndef __uClinux__ - exit(1); +#ifndef HAVE_FORK + _exit(1); #else - _exit(1); -#endif /* __uClinux__ */ + exit(1); +#endif } else if (do_cmd_pid == -1) { fatal("fork: %s", strerror(errno)); } - -#ifdef __uClinux__ +#ifndef HAVE_FORK /* clean up command */ /* pop cmd */ xfree(args.list[args.num-1]); @@ -260,7 +261,7 @@ args.list[args.num-1]=NULL; args.num--; } -#endif /* __uClinux__ */ +#endif /* Parent. Close the other side, and return the local side. */ close(pin[0]);