X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=ssh-upload.c;h=20c35f03dd1fb468c7cecc71f91951657f229f5e;hb=fcd056a6d23bafb13f991ffb673fb87c7100b8f2;hp=0b52ae15cbd216bff5002c89e0c8af84ea68ed1a;hpb=e035ce939d7e26afee4936ed32f1db9428ac026e;p=git.git diff --git a/ssh-upload.c b/ssh-upload.c index 0b52ae15c..20c35f03d 100644 --- a/ssh-upload.c +++ b/ssh-upload.c @@ -21,42 +21,40 @@ static int serve_object(int fd_in, int fd_out) { ssize_t size; unsigned char sha1[20]; signed char remote; - int posn = 0; - do { - size = read(fd_in, sha1 + posn, 20 - posn); - if (size < 0) { - perror("git-ssh-upload: read "); - return -1; - } - if (!size) - return -1; - posn += size; - } while (posn < 20); - + + size = read_in_full(fd_in, sha1, 20); + if (size < 0) { + perror("git-ssh-upload: read "); + return -1; + } + if (!size) + return -1; + if (verbose) fprintf(stderr, "Serving %s\n", sha1_to_hex(sha1)); remote = 0; - + if (!has_sha1_file(sha1)) { fprintf(stderr, "git-ssh-upload: could not find %s\n", sha1_to_hex(sha1)); remote = -1; } - - write(fd_out, &remote, 1); - + + if (write_in_full(fd_out, &remote, 1) != 1) + return 0; + if (remote < 0) return 0; - + return write_sha1_to_fd(fd_out, sha1); } static int serve_version(int fd_in, int fd_out) { - if (read(fd_in, &remote_version, 1) < 1) + if (xread(fd_in, &remote_version, 1) < 1) return -1; - write(fd_out, &local_version, 1); + write_in_full(fd_out, &local_version, 1); return 0; } @@ -67,7 +65,7 @@ static int serve_ref(int fd_in, int fd_out) int posn = 0; signed char remote = 0; do { - if (read(fd_in, ref + posn, 1) < 1) + if (posn >= PATH_MAX || xread(fd_in, ref + posn, 1) < 1) return -1; posn++; } while (ref[posn - 1]); @@ -77,19 +75,20 @@ static int serve_ref(int fd_in, int fd_out) if (get_ref_sha1(ref, sha1)) remote = -1; - write(fd_out, &remote, 1); + if (write_in_full(fd_out, &remote, 1) != 1) + return 0; if (remote) return 0; - write(fd_out, sha1, 20); + write_in_full(fd_out, sha1, 20); return 0; } static void service(int fd_in, int fd_out) { char type; - int retval; + ssize_t retval; do { - retval = read(fd_in, &type, 1); + retval = xread(fd_in, &type, 1); if (retval < 1) { if (retval < 0) perror("git-ssh-upload: read ");