Changed the arg-splitting code so that it can handle a literal
authorWayne Davison <wayned@samba.org>
Thu, 23 Jun 2005 15:58:57 +0000 (15:58 +0000)
committerWayne Davison <wayned@samba.org>
Thu, 23 Jun 2005 15:58:57 +0000 (15:58 +0000)
backslash prior to whitespace without treating it as escaped
whitespace (e.g. if we receive "foo\\ bar", it is two args,
while "foo\ bar" and "foo\\\ bar" are each just one).

support/rrsync

index 1c314eeb42134f2484c8e0c7e0633fa825a8a1c0..54503d8e6ab3af4aff976874c3aece4d15718121 100644 (file)
@@ -45,7 +45,7 @@ die "$0 -ro: sending to read-only server not allowed\n" if $ro && !$am_sender;
 ### START of options data produced by the cull_options script. ###
 
 # These options are the only options that rsync might send to the server,
-# and only in the option/arg format that the stock rsync produces.
+# and only in the option format that the stock rsync produces.
 
 # To disable a short-named option, add its letter to this string:
 our $short_disabled = '';
@@ -117,7 +117,8 @@ my(@opts, @args);
 my $in_options = 1;
 my $last_opt = '';
 my $check_type;
-foreach (split(/(?<!\\)\s+/, $command)) {
+while ($command =~ /((?:[^\s\\]+|\\.[^\s\\]*)+)/g) {
+  $_ = $1;
   if ($check_type) {
     push(@opts, check_arg($last_opt, $_, $check_type));
     $check_type = 0;