extern int verbose;
-static char **exclude_list = NULL;
+static char **exclude_list;
static int is_regex(char *str)
{
static int check_one_exclude(char *name,char *pattern)
{
- char *str;
char *p;
if (!strchr(pattern,'/') && (p=strrchr(name,'/')))
if (!name[0]) return 0;
+ if (*pattern == '/' && *name != '/') pattern++;
+
if (is_regex(pattern)) {
if (fnmatch(pattern, name, 0) == 0)
return 1;
if (strcmp(pattern,"!") == 0) {
if (verbose > 2)
- fprintf(stderr,"clearing exclude list\n");
+ rprintf(FINFO,"clearing exclude list\n");
while ((len)--)
free((*list)[len]);
free((*list));
out_of_memory("add_exclude");
if (verbose > 2)
- fprintf(stderr,"add_exclude(%s)\n",pattern);
+ rprintf(FINFO,"add_exclude(%s)\n",pattern);
(*list)[len+1] = NULL;
}
char line[MAXPATHLEN];
if (!f) {
if (fatal) {
- fprintf(stderr,"%s : %s\n",fname,strerror(errno));
- exit(1);
+ rprintf(FERROR,"%s : %s\n",fname,strerror(errno));
+ exit_cleanup(1);
}
return list;
}
void add_exclude_file(char *fname,int fatal)
{
- exclude_list = make_exclude_list(fname,exclude_list,fatal);
+ if (!fname || !*fname) return;
+
+ exclude_list = make_exclude_list(fname,exclude_list,fatal);
}
char line[MAXPATHLEN];
int l;
while ((l=read_int(f))) {
- read_buf(f,line,l);
- line[l] = 0;
- add_exclude(line);
+ if (l >= MAXPATHLEN) overflow("recv_exclude_list");
+ read_sbuf(f,line,l);
+ add_exclude(line);
}
}
+void add_exclude_line(char *p)
+{
+ char *tok;
+ if (!p || !*p) return;
+ p = strdup(p);
+ if (!p) out_of_memory("add_exclude_line");
+ for (tok=strtok(p," "); tok; tok=strtok(NULL," "))
+ add_exclude(tok);
+ free(p);
+}
+
+
static char *cvs_ignore_list[] = {
"RCS","SCCS","CVS","CVS.adm","RCSLOG","cvslog.*",
"tags","TAGS",".make.state",".nse_depinfo",
for (i=0; cvs_ignore_list[i]; i++)
add_exclude(cvs_ignore_list[i]);
- if ((p=getenv("HOME"))) {
+ if ((p=getenv("HOME")) && strlen(p) < (MAXPATHLEN-12)) {
sprintf(fname,"%s/.cvsignore",p);
add_exclude_file(fname,0);
}
- if ((p=getenv("CVSIGNORE"))) {
- char *tok;
- for (tok=strtok(p," "); tok; tok=strtok(NULL," "))
- add_exclude(tok);
- }
+ add_exclude_line(getenv("CVSIGNORE"));
}