X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/87ee248169774a0589e0ca3a87f088ea5ab400ca..b35d0d8e9ae9c5407c9f781b545f8a66b9caa9d0:/io.c diff --git a/io.c b/io.c index 3c0b7902..ed6a70c3 100644 --- a/io.c +++ b/io.c @@ -2,7 +2,7 @@ Copyright (C) 1996-2001 by Andrew Tridgell Copyright (C) Paul Mackerras 1996 - Copyright (C) 2001 by Martin Pool + Copyright (C) 2001, 2002 by Martin Pool This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,7 +20,6 @@ */ /** - * * @file io.c * * Socket and pipe IO utilities used in rsync. @@ -454,8 +453,11 @@ static void writefd_unbuffered(int fd,char *buf,size_t len) } if (ret <= 0) { - rprintf(FERROR, - "error writing %d unbuffered bytes" + /* Don't try to write errors back + * across the stream */ + io_multiplexing_close(); + rprintf(FERROR, RSYNC_NAME + ": error writing %d unbuffered bytes" " - exiting: %s\n", len, strerror(errno)); exit_cleanup(RERR_STREAMIO); @@ -621,12 +623,19 @@ void write_byte(int f,unsigned char c) +/** + * Read a line of up to @p maxlen characters into @p buf. Does not + * contain a trailing newline or carriage return. + * + * @return 1 for success; 0 for io error or truncation. + **/ int read_line(int f, char *buf, size_t maxlen) { while (maxlen) { buf[0] = 0; read_buf(f, buf, 1); - if (buf[0] == 0) return 0; + if (buf[0] == 0) + return 0; if (buf[0] == '\n') { buf[0] = 0; break;