we no longer use non-blocking IO, instead it uses select a lot more,
being careful to always allow for reading whenever a valid read fd is
available and chcking timeouts.
also split the file io calls into fileio.c
messages from the server when using the socket code.
I've doen a fair bit of testing and I don't seem to have broken
anything, but it is a very complex change. More testing needed!
had a fundamental flaw in the way it detected duplicate deletion
scanning (which is very important when -R is used). I now store
inode/device numbers and use those to do the detection. This should be
a much less fragile method.
as not being able to open a directory) this flag is set and propogated
to the other end. When this flag is set the --delete code is
disabled. This prevents the problem that io or permission errors could
cause files to be incorrectly deleted on the destination.
- added a --timeout option. This allows you to set an IO timeout in
seconds. If no io occurs in that time then rsync exits with a timeout
error.
- changed some FERROR fds to FINFO
files up to 2^64 bytes in size. Now I just need to find enough disk
space to test this :-)
The 64 bit offset code only works if off_t is 64 bits (or bigger!) on
both ends of the link. If one end tries to send a file greater than
2^31 in size and the other end doesn't support it then rsync will
abort.
This commit also cleans up some static declarations so they are in a
unitinitialised segment to save load time.
in 3 ways:
1) the realloc is done on a list of pointers, not a list of structures
2) only the basename of the file is now kept in the file struct an a
util function f_name() is now used to access the full name when
required.
3) pointers to directory names are re-used
hopefully I haven't broken anything. This will need lots of testing.
- handle directory ownership and permissions much better.
- fix bug where links caused the permissions of files to be
set incorrectly
- override the default umask in setting file permissions
- better handling -o and -D being passed to non-root users
- handle rsync to a destination of /
- fix the handling of mismatched file types at either end of the
link. For example, if the destination is a link and the source is not.