summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2004-04-17 17:55:45 +0000
committerWayne Davison <wayned@samba.org>2004-04-17 17:55:45 +0000
commit40d38dc0be7b1b5ef6d0ea4445b67f370d3d0f20 (patch)
treee656a2732c3d1ea12cd16a2777b8a5c94edb004c
parent33a2361cc243cc4206acfbf1a33153c408e04340 (diff)
downloadrsync-40d38dc0be7b1b5ef6d0ea4445b67f370d3d0f20.tar.gz
In add_exclude_file(), if we're word-splitting, stop reading a "line"
at any whitespace (so that we don't overflow the line buffer).
-rw-r--r--exclude.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/exclude.c b/exclude.c
index 3e6c4df9..d0653bec 100644
--- a/exclude.c
+++ b/exclude.c
@@ -27,6 +27,11 @@
#include "rsync.h"
extern int verbose;
+extern int eol_nulls;
+extern int list_only;
+extern int recurse;
+
+extern char curr_dir[];
struct exclude_list_struct exclude_list;
struct exclude_list_struct local_exclude_list;
@@ -125,7 +130,6 @@ static int check_one_exclude(char *name, struct exclude_struct *ex,
}
else if ((ex->match_flags & MATCHFLG_ABS_PATH) && *name != '/') {
static char full_name[MAXPATHLEN];
- extern char curr_dir[];
int plus = curr_dir[1] == '\0'? 1 : 0;
pathjoin(full_name, sizeof full_name, curr_dir+plus, name);
name = full_name;
@@ -311,7 +315,7 @@ void add_exclude_file(struct exclude_list_struct *listp, const char *fname,
FILE *fp;
char line[MAXPATHLEN];
char *eob = line + MAXPATHLEN - 1;
- extern int eol_nulls;
+ int word_split = xflags & XFLG_WORD_SPLIT;
if (!fname || !*fname)
return;
@@ -340,6 +344,8 @@ void add_exclude_file(struct exclude_list_struct *listp, const char *fname,
continue;
break;
}
+ if (word_split && isspace(ch))
+ break;
if (eol_nulls? !ch : (ch == '\n' || ch == '\r'))
break;
if (s < eob)
@@ -359,7 +365,6 @@ void add_exclude_file(struct exclude_list_struct *listp, const char *fname,
void send_exclude_list(int f)
{
struct exclude_struct *ent;
- extern int list_only, recurse;
/* This is a complete hack - blame Rusty.
*