=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/scp.c,v retrieving revision 1.113.2.2 retrieving revision 1.114 diff -u -r1.113.2.2 -r1.114 --- src/usr.bin/ssh/scp.c 2005/03/10 17:15:04 1.113.2.2 +++ src/usr.bin/ssh/scp.c 2004/04/01 12:19:57 1.114 @@ -71,7 +71,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: scp.c,v 1.113.2.2 2005/03/10 17:15:04 brad Exp $"); +RCSID("$OpenBSD: scp.c,v 1.114 2004/04/01 12:19:57 markus Exp $"); #include "xmalloc.h" #include "atomicio.h" @@ -108,10 +108,8 @@ static void killchild(int signo) { - if (do_cmd_pid > 1) { + if (do_cmd_pid > 1) kill(do_cmd_pid, signo); - waitpid(do_cmd_pid, NULL, 0); - } _exit(1); } @@ -656,7 +654,7 @@ { static struct timeval bwstart, bwend; static int lamt, thresh = 16384; - u_int64_t waitlen; + u_int64_t wait; struct timespec ts, rm; if (!timerisset(&bwstart)) { @@ -674,10 +672,10 @@ return; lamt *= 8; - waitlen = (double)1000000L * lamt / limit_rate; + wait = (double)1000000L * lamt / limit_rate; - bwstart.tv_sec = waitlen / 1000000L; - bwstart.tv_usec = waitlen % 1000000L; + bwstart.tv_sec = wait / 1000000L; + bwstart.tv_usec = wait % 1000000L; if (timercmp(&bwstart, &bwend, >)) { timersub(&bwstart, &bwend, &bwend); @@ -723,7 +721,7 @@ #define atime tv[0] #define mtime tv[1] -#define SCREWUP(str) { why = str; goto screwup; } +#define SCREWUP(str) do { why = str; goto screwup; } while (0) setimes = targisdir = 0; mask = umask(0); @@ -895,8 +893,11 @@ amt = size - i; count += amt; do { - j = atomicio(read, remin, cp, amt); - if (j <= 0) { + j = read(remin, cp, amt); + if (j == -1 && (errno == EINTR || + errno == EAGAIN)) { + continue; + } else if (j <= 0) { run_err("%s", j ? strerror(errno) : "dropped connection"); exit(1); @@ -935,18 +936,14 @@ } if (pflag) { if (exists || omode != mode) - if (fchmod(ofd, omode)) { + if (fchmod(ofd, omode)) run_err("%s: set mode: %s", np, strerror(errno)); - wrerr = DISPLAYED; - } } else { if (!exists && omode != mode) - if (fchmod(ofd, omode & ~mask)) { + if (fchmod(ofd, omode & ~mask)) run_err("%s: set mode: %s", np, strerror(errno)); - wrerr = DISPLAYED; - } } if (close(ofd) == -1) { wrerr = YES;