handle relative symlinks properly, and that has not yet been fixed
in this modified version.
---- orig/flist.c 2005-03-16 02:19:29
-+++ flist.c 2004-07-16 16:58:04
-@@ -45,6 +45,7 @@ extern int filesfrom_fd;
- extern int one_file_system;
+To use this patch, run these commands for a successful build:
+
+ patch -p1 <patches/links-depth.diff
+ ./configure (optional if already run)
+ make
+
+--- old/flist.c
++++ new/flist.c
+@@ -43,6 +43,7 @@ extern int one_file_system;
+ extern int copy_dirlinks;
extern int keep_dirlinks;
extern int preserve_links;
+extern int follow_links_depth;
extern int preserve_hard_links;
- extern int preserve_perms;
extern int preserve_devices;
-@@ -730,6 +731,30 @@ static struct file_struct *receive_file_
+ extern int preserve_specials;
+@@ -852,6 +853,30 @@ static struct file_struct *recv_file_ent
+ return file;
}
-
+#if SUPPORT_LINKS
+static int links_depth(char *linkname, STRUCT_STAT *st_ptr)
+{
/**
* Create a file_struct for a named file by reading its stat()
* information and performing extensive checks against global
-@@ -855,7 +880,13 @@ skip_filters:
+@@ -994,7 +1019,13 @@ struct file_struct *make_file(const char
basename_len = strlen(basename) + 1; /* count the '\0' */
#ifdef SUPPORT_LINKS
#else
linkname_len = 0;
#endif
---- orig/options.c 2005-03-28 20:56:55
-+++ options.c 2005-01-28 19:33:24
-@@ -43,6 +43,7 @@ int archive_mode = 0;
- int keep_dirlinks = 0;
+--- old/options.c
++++ new/options.c
+@@ -46,6 +46,7 @@ int keep_dirlinks = 0;
+ int copy_dirlinks = 0;
int copy_links = 0;
int preserve_links = 0;
+int follow_links_depth = 0;
int preserve_hard_links = 0;
int preserve_perms = 0;
- int preserve_devices = 0;
-@@ -275,6 +276,7 @@ void usage(enum logcode F)
- rprintf(F," --inplace update destination files in-place (SEE MAN PAGE)\n");
+ int preserve_executability = 0;
+@@ -293,6 +294,7 @@ void usage(enum logcode F)
+ rprintf(F," --append append data onto shorter files\n");
rprintf(F," -d, --dirs transfer directories without recursing\n");
rprintf(F," -l, --links copy symlinks as symlinks\n");
+ rprintf(F," --links-depth=NUM follow symlinks up to NUM depth\n");
rprintf(F," -L, --copy-links transform symlink into referent file/dir\n");
rprintf(F," --copy-unsafe-links only \"unsafe\" symlinks are transformed\n");
rprintf(F," --safe-links ignore symlinks that point outside the source tree\n");
-@@ -399,6 +401,7 @@ static struct poptOption long_options[]
- {"inplace", 0, POPT_ARG_NONE, &inplace, 0, 0, 0 },
- {"dirs", 'd', POPT_ARG_VAL, &xfer_dirs, 2, 0, 0 },
- {"links", 'l', POPT_ARG_NONE, &preserve_links, 0, 0, 0 },
+@@ -444,6 +446,7 @@ static struct poptOption long_options[]
+ {"links", 'l', POPT_ARG_VAL, &preserve_links, 1, 0, 0 },
+ {"no-links", 0, POPT_ARG_VAL, &preserve_links, 0, 0, 0 },
+ {"no-l", 0, POPT_ARG_VAL, &preserve_links, 0, 0, 0 },
+ {"links-depth", 0, POPT_ARG_INT, &follow_links_depth , 0, 0, 0 },
{"copy-links", 'L', POPT_ARG_NONE, ©_links, 0, 0, 0 },
- {"keep-dirlinks", 'K', POPT_ARG_NONE, &keep_dirlinks, 0, 0, 0 },
- {"whole-file", 'W', POPT_ARG_VAL, &whole_file, 1, 0, 0 },
---- orig/rsync.yo 2005-03-28 20:56:55
-+++ rsync.yo 2005-01-28 19:33:40
-@@ -310,6 +310,7 @@ to the detailed description below for a
- --inplace update destination files in-place
+ {"copy-unsafe-links",0, POPT_ARG_NONE, ©_unsafe_links, 0, 0, 0 },
+ {"safe-links", 0, POPT_ARG_NONE, &safe_symlinks, 0, 0, 0 },
+--- old/rsync.yo
++++ new/rsync.yo
+@@ -314,6 +314,7 @@ to the detailed description below for a
+ --append append data onto shorter files
-d, --dirs transfer directories without recursing
-l, --links copy symlinks as symlinks
+ --links-depth=NUM follow symlinks up to NUM depth