Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Tweaked set_allow_inc_recurse() a bit more.
[rsync/rsync.git]
/
io.c
diff --git
a/io.c
b/io.c
index
1899cb9
..
3faf83d
100644
(file)
--- a/
io.c
+++ b/
io.c
@@
-28,6
+28,7
@@
* io_start_multiplex_out() and io_start_multiplex_in(). */
#include "rsync.h"
* io_start_multiplex_out() and io_start_multiplex_in(). */
#include "rsync.h"
+#include "ifuncs.h"
/** If no timeout is specified then use a 60 second select timeout */
#define SELECT_TIMEOUT 60
/** If no timeout is specified then use a 60 second select timeout */
#define SELECT_TIMEOUT 60
@@
-52,7
+53,7
@@
extern int protocol_version;
extern int remove_source_files;
extern int preserve_hard_links;
extern struct stats stats;
extern int remove_source_files;
extern int preserve_hard_links;
extern struct stats stats;
-extern struct file_list *cur_flist
, *first_flist
;
+extern struct file_list *cur_flist;
#ifdef ICONV_OPTION
extern int filesfrom_convert;
extern iconv_t ic_send, ic_recv;
#ifdef ICONV_OPTION
extern int filesfrom_convert;
extern iconv_t ic_send, ic_recv;
@@
-387,6
+388,12
@@
static void read_msg_fd(void)
goto invalid_msg;
flist_eof = 1;
break;
goto invalid_msg;
flist_eof = 1;
break;
+ case MSG_IO_ERROR:
+ if (len != 4)
+ goto invalid_msg;
+ readfd(fd, buf, len);
+ io_error |= IVAL(buf, 0);
+ break;
case MSG_DELETED:
if (len >= (int)sizeof buf || !am_generator)
goto invalid_msg;
case MSG_DELETED:
if (len >= (int)sizeof buf || !am_generator)
goto invalid_msg;
@@
-674,7
+681,11
@@
static int read_timeout(int fd, char *buf, size_t len)
}
} else if (io_filesfrom_f_in >= 0) {
if (FD_ISSET(io_filesfrom_f_in, &r_fds)) {
}
} else if (io_filesfrom_f_in >= 0) {
if (FD_ISSET(io_filesfrom_f_in, &r_fds)) {
+#ifdef ICONV_OPTION
xbuf *ibuf = filesfrom_convert ? &iconv_buf : &ff_buf;
xbuf *ibuf = filesfrom_convert ? &iconv_buf : &ff_buf;
+#else
+ xbuf *ibuf = &ff_buf;
+#endif
int l = read(io_filesfrom_f_in, ibuf->buf, ibuf->size);
if (l <= 0) {
if (l == 0 || errno != EINTR) {
int l = read(io_filesfrom_f_in, ibuf->buf, ibuf->size);
if (l <= 0) {
if (l == 0 || errno != EINTR) {
@@
-685,6
+696,7
@@
static int read_timeout(int fd, char *buf, size_t len)
io_filesfrom_f_in = -1;
}
} else {
io_filesfrom_f_in = -1;
}
} else {
+#ifdef ICONV_OPTION
if (filesfrom_convert) {
iconv_buf.pos = 0;
iconv_buf.len = l;
if (filesfrom_convert) {
iconv_buf.pos = 0;
iconv_buf.len = l;
@@
-692,6
+704,7
@@
static int read_timeout(int fd, char *buf, size_t len)
ICB_EXPAND_OUT|ICB_INCLUDE_BAD|ICB_INCLUDE_INCOMPLETE);
l = ff_buf.len;
}
ICB_EXPAND_OUT|ICB_INCLUDE_BAD|ICB_INCLUDE_INCOMPLETE);
l = ff_buf.len;
}
+#endif
if (!eol_nulls) {
char *s = ff_buf.buf + l;
/* Transform CR and/or LF into '\0' */
if (!eol_nulls) {
char *s = ff_buf.buf + l;
/* Transform CR and/or LF into '\0' */
@@
-771,7
+784,11
@@
int read_line(int fd, char *buf, size_t bufsiz, int flags)
#endif
start:
#endif
start:
+#ifdef ICONV_OPTION
s = flags & RL_CONVERT ? iconv_buf.buf : buf;
s = flags & RL_CONVERT ? iconv_buf.buf : buf;
+#else
+ s = buf;
+#endif
eob = s + bufsiz - 1;
while (1) {
cnt = read(fd, &ch, 1);
eob = s + bufsiz - 1;
while (1) {
cnt = read(fd, &ch, 1);
@@
-830,8
+847,11
@@
int read_args(int f_in, char *mod_name, char *buf, size_t bufsiz, int rl_nulls,
int dot_pos = 0;
int argc = 0;
char **argv, *p;
int dot_pos = 0;
int argc = 0;
char **argv, *p;
- int rl_flags = (rl_nulls ? RL_EOL_NULLS : 0)
- | (protect_args && ic_recv != (iconv_t)-1 ? RL_CONVERT : 0);
+ int rl_flags = (rl_nulls ? RL_EOL_NULLS : 0);
+
+#ifdef ICONV_OPTION
+ rl_flags |= (protect_args && ic_recv != (iconv_t)-1 ? RL_CONVERT : 0);
+#endif
if (!(argv = new_array(char *, maxargs)))
out_of_memory("read_args");
if (!(argv = new_array(char *, maxargs)))
out_of_memory("read_args");
@@
-1027,6
+1047,7
@@
static int readfd_unbuffered(int fd, char *buf, size_t len)
if (msg_bytes != 4)
goto invalid_msg;
read_loop(fd, line, msg_bytes);
if (msg_bytes != 4)
goto invalid_msg;
read_loop(fd, line, msg_bytes);
+ send_msg_int(MSG_IO_ERROR, IVAL(line, 0));
io_error |= IVAL(line, 0);
break;
case MSG_DELETED:
io_error |= IVAL(line, 0);
break;
case MSG_DELETED:
@@
-1840,6
+1861,8
@@
void start_write_batch(int fd)
* actual communication so far depends on whether a daemon
* is involved. */
write_int(batch_fd, protocol_version);
* actual communication so far depends on whether a daemon
* is involved. */
write_int(batch_fd, protocol_version);
+ if (protocol_version >= 30)
+ write_byte(batch_fd, inc_recurse);
write_int(batch_fd, checksum_seed);
if (am_sender)
write_int(batch_fd, checksum_seed);
if (am_sender)