Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package tree for openSUSE:Factory checked in at 2026-05-06 19:17:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/tree (Old) and /work/SRC/openSUSE:Factory/.tree.new.30200 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "tree" Wed May 6 19:17:19 2026 rev:34 rq:1350874 version:2.3.2 Changes: -------- --- /work/SRC/openSUSE:Factory/tree/tree.changes 2026-02-12 17:25:03.685421917 +0100 +++ /work/SRC/openSUSE:Factory/.tree.new.30200/tree.changes 2026-05-06 19:17:34.264278667 +0200 @@ -1,0 +2,14 @@ +Mon May 4 21:43:48 UTC 2026 - Dirk Müller <[email protected]> + +- update to 2.3.2: + * Whitelist characters instead of blacklisting (had an + incomplete blacklist somehow,) in url_encode() (M. Richardson) + * Wrong path was being used to allocate a path string. + * Symbolic link name might be printed incorrectly when -f and + -l were used at the same time. (Masaki Hasegawa) + * Use EXIT_FAILURE / EXIT_SUCCESS instead of 1 / 0 in exit(), + supposedly more portable, but I am not sure I'm convinced. + * Fix regression (maybe) in --gitignore for paths that are + relative to the .gitignore file broken by using realpath to + +------------------------------------------------------------------- Old: ---- tree-2.3.1.tgz New: ---- tree-2.3.2.tgz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ tree.spec ++++++ --- /var/tmp/diff_new_pack.5mbD1l/_old 2026-05-06 19:17:36.400366694 +0200 +++ /var/tmp/diff_new_pack.5mbD1l/_new 2026-05-06 19:17:36.408367023 +0200 @@ -17,7 +17,7 @@ Name: tree -Version: 2.3.1 +Version: 2.3.2 Release: 0 Summary: File listing as a tree License: GPL-2.0-or-later ++++++ tree-2.3.1.tgz -> tree-2.3.2.tgz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tree-2.3.1/.gitignore new/tree-2.3.2/.gitignore --- old/tree-2.3.1/.gitignore 2024-11-24 16:38:18.000000000 +0100 +++ new/tree-2.3.2/.gitignore 2026-03-16 22:59:04.000000000 +0100 @@ -2,3 +2,4 @@ *.o tree *~ +/work diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tree-2.3.1/CHANGES new/tree-2.3.2/CHANGES --- old/tree-2.3.1/CHANGES 2026-01-31 15:27:00.000000000 +0100 +++ new/tree-2.3.2/CHANGES 2026-03-16 23:38:08.000000000 +0100 @@ -1,4 +1,17 @@ -Version 2.3.1 (1/31/26) +Version 2.3.2 (3/16/2026) + - Whitelist characters instead of blacklisting (had an incomplete blacklist + somehow,) in url_encode() (M. Richardson) + - Wrong path was being used to allocate a path string. (Masaki Hasegawa) + - Symbolic link name might be printed incorrectly when -f and -l were used + at the same time. (Masaki Hasegawa) + - Use EXIT_FAILURE / EXIT_SUCCESS instead of 1 / 0 in exit(), supposedly more + portable, but I am not sure I'm convinced. (polluks@github) + - Fix regression (maybe) in --gitignore for paths that are relative to the + .gitignore file broken by using realpath to to the .gitignore. Relative + patterns in ignore files above the tree'd root will likely not work w/o + some more work on this. (Merlin04@github) + +Version 2.3.1 (1/31/2026) - The "something always slips through" release. - Completely #include guard selinux context output for non-Linux as well as the stddata_fd variable declared outside of an include guard. @@ -315,7 +328,7 @@ Version 1.8.0 (11/16/2018) - Added an experimental --fromfile option (suggested by several people.) - This may eventually be replaced or supplimented by a --fromjson option. + This may eventually be replaced or supplemented by a --fromjson option. - Added support for BSD's CLICOLOR and CLICOLOR_FORCE environment variables. (Suggested by Alyssa Ross) - Use strftime() exclusively when formatting date/time to respect locale. @@ -432,8 +445,8 @@ - Added -v option for version sorting (also called natural sorting) ala ls. Version 1.5.1.2 (06/04/08) - - Fixed compile issues related to MB_CUR_MAX on non-linux machines. - - Removed unecessary features.h + - Fixed compile issues related to MB_CUR_MAX on non-Linux machines. + - Removed unnecessary features.h Version 1.5.1.1 (06/11/07) - Regression in HTML output, fixed formatting issues. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tree-2.3.1/Makefile new/tree-2.3.2/Makefile --- old/tree-2.3.1/Makefile 2026-01-31 23:24:45.000000000 +0100 +++ new/tree-2.3.2/Makefile 2026-03-16 23:37:51.000000000 +0100 @@ -22,7 +22,7 @@ CC ?= gcc INSTALL ?= install -VERSION=2.3.1 +VERSION=2.3.2 TREE_DEST=tree DESTDIR=${PREFIX}/bin MAN=tree.1 @@ -34,10 +34,11 @@ # Uncomment options below for your particular OS: # Linux defaults: -LDFLAGS?=-s -#CFLAGS?=-ggdb +#LDFLAGS?=-s +CFLAGS?=-ggdb CFLAGS?=-O3 -CFLAGS+=-std=c11 -Wpedantic -Wall -Wextra -Wstrict-prototypes -Wshadow -Wconversion +CFLAGS+=-std=c11 -Wpedantic -Wall -Wextra -Wstrict-prototypes -Wshadow -Wconversion \ + -Wdiscarded-qualifiers # _LARGEFILE64_SOURCE may be considered obsolete CPPFLAGS+=-DLARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tree-2.3.1/README new/tree-2.3.2/README --- old/tree-2.3.1/README 2026-01-31 01:14:00.000000000 +0100 +++ new/tree-2.3.2/README 2026-03-16 23:35:52.000000000 +0100 @@ -28,12 +28,12 @@ - Added options -o, -L and -R. Gerald Scheidl - - Added -S option to print ASCII graphics lines for use under linux + - Added -S option to print ASCII graphics lines for use under Linux console when an alternate console font has been selected (might also work under DOS telnet). Guido Socher (and others) - - Made tree more portable. Should compile under solaris. + - Made tree more portable. Should compile under Solaris. Mitja Lacen - Discovered bug where tree will segmentation fault on long pathnames. @@ -54,7 +54,7 @@ - Reported that Tru64 defines TRUE/FALSE in sys/types.h (OSF1 standard?) Paolo Violini - - Found bug in tree that caused it to seg-fault if 50 file arguments where + - Found bug in tree that caused it to segfault if 50 file arguments where given and directory coloring was turned on. Mitsuaki Masuhara @@ -92,7 +92,7 @@ - Suggested -h option for human readable output for -s, ala ls -lh. Jonathon Cranford - - Supplied patch to make tree under cygwin. + - Supplied patch to make tree under CygWin. Richard Houser - Provided patch to fix a colorization bug when dealing with special @@ -146,7 +146,7 @@ output more like ls. Ivan Shmakov - - Pointed out multiple CLI defenciencies (via Debian) + - Pointed out multiple CLI deficiencies (via Debian) Mantas Mikulnas - Provided patch to make tree more reliably detect the UTF-8 locale. @@ -190,7 +190,7 @@ improper UTF-8 encoding leading to garbage being printed. Mantas Mikulėnas - - Fixed issue with malformed multibyte string handling. + - Fixed issue with malformed multi byte string handling. Wagner Camarao - Pointed out that JSON size output ignored -h/--si flags @@ -228,7 +228,7 @@ - Suggested --filesfirst option. Michael Osipov - - Optimized makefile, HP/UX support. + - Optimized Makefile, HP/UX support. Richard Mitchell - Suggested --metafirst option @@ -368,6 +368,19 @@ FloppyDisco@github - Noted issue with --matchdirs and -P +M. Richardson + - Noted issue with url_encode + +Masaki Hasegawa + - Symbolic names might be printed incorrectly with -f and -l combined + - Wrong path being used to allocate a path buffer + +polluks@github + - Suggested using EXIT_SUCCESS / EXIT_FAILURE defines for portability + +Merlin04@github + - Noted regression with --gitignore and relative paths + And many others whom I've failed to keep track of. I should have started this list years ago. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tree-2.3.1/doc/tree.1 new/tree-2.3.2/doc/tree.1 --- old/tree-2.3.1/doc/tree.1 2026-01-31 23:25:26.000000000 +0100 +++ new/tree-2.3.2/doc/tree.1 2026-03-16 23:38:01.000000000 +0100 @@ -17,7 +17,7 @@ .\" Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA .\" ... -.TH TREE 1 "" "Tree 2.3.1" +.TH TREE 1 "" "Tree 2.3.2" .SH NAME tree \- list contents of directories in a tree-like format. .SH SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tree-2.3.1/filter.c new/tree-2.3.2/filter.c --- old/tree-2.3.1/filter.c 2026-01-10 18:13:47.000000000 +0100 +++ new/tree-2.3.2/filter.c 2026-03-15 20:04:41.000000000 +0100 @@ -75,30 +75,33 @@ struct ignorefile *gitignore_search(const char *startpath, int depth) { struct ignorefile *pign = NULL, *ign = NULL; - char path[PATH_MAX+1], rpath[PATH_MAX+1]; + char path[PATH_MAX+1]; - if (realpath(startpath, rpath) == NULL) return NULL; + // strcpy(rpath, startpath); // Stop when we hit a directory with a .git directory. we'll assume it's the // git root: - snprintf(path, PATH_MAX, "%.*s/.git", PATH_MAX-6, rpath); + snprintf(path, PATH_MAX, "%.*s/.git", PATH_MAX-6, startpath); if (is_dir(path)) { // Add it's .git/config/exclude - snprintf(path, PATH_MAX, "%.*s/.git/info/exclude", PATH_MAX-21, rpath); - if (is_file(path)) push_filterstack(pign = new_ignorefile(path, false)); - } else if (strcmp(rpath, "/") != 0 && depth < 2048) { - // Otherwise if we haven't reached /, then keep searching upward: - snprintf(path, PATH_MAX, "%.*s/..", PATH_MAX-4, rpath); - pign = gitignore_search(path, depth+1); + snprintf(path, PATH_MAX, "%.*s/.git/info/exclude", PATH_MAX-21, startpath); + if (is_file(path)) push_filterstack(pign = new_ignorefile(startpath, path, false)); + } else { + if (realpath(startpath, path) == NULL) return NULL; + if (strcmp(path, "/") != 0 && depth < 2048) { + // Otherwise if we haven't reached /, then keep searching upward: + snprintf(path, PATH_MAX, "%.*s/..", PATH_MAX-4, startpath); + pign = gitignore_search(path, depth+1); + } } - snprintf(path, PATH_MAX, "%.*s/.gitignore", PATH_MAX-12, rpath); - if (is_file(path)) push_filterstack(ign = new_ignorefile(path, false)); + snprintf(path, PATH_MAX, "%.*s/.gitignore", PATH_MAX-12, startpath); + if (is_file(path)) push_filterstack(ign = new_ignorefile(startpath, path, false)); return ign == NULL? pign : ign; } -struct ignorefile *new_ignorefile(const char *path, bool checkparents) +struct ignorefile *new_ignorefile(const char *basepath, const char *path, bool checkparents) { char buf[PATH_MAX]; struct ignorefile *ig; @@ -124,6 +127,7 @@ gittrim(buf); if (strlen(buf) == 0) continue; p = new_pattern(buf + (rev? 1 : 0)); + // printf("Adding pattern: %c%s\n", rev? '!' : ' ', buf); if (rev) { if (reverse == NULL) reverse = revend = p; else { @@ -144,7 +148,7 @@ ig = xmalloc(sizeof(struct ignorefile)); ig->remove = remove; ig->reverse = reverse; - ig->path = scopy(path); + ig->path = scopy(basepath); ig->next = NULL; return ig; @@ -195,6 +199,8 @@ struct ignorefile *ig; struct pattern *p; + // printf("Checking [%s / %s %d]\n", path, name, isdir); + for(ig = filterstack; !filter && ig; ig = ig->next) { int fpos = sprintf(xpattern, "%s/", ig->path); @@ -202,12 +208,14 @@ if (p->relative) { if (patmatch(name, p->pattern, isdir) == 1) { filter = true; + // printf(" --r %s %s %d\n", name, p->pattern, filter); break; } } else { sprintf(xpattern + fpos, "%s", p->pattern); if (patmatch(path, xpattern, isdir) == 1) { filter = true; + // printf(" --a %s %s %d\n", name, xpattern, filter); break; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tree-2.3.1/html.c new/tree-2.3.2/html.c --- old/tree-2.3.1/html.c 2026-01-05 22:54:02.000000000 +0100 +++ new/tree-2.3.2/html.c 2026-03-15 16:53:06.000000000 +0100 @@ -63,12 +63,12 @@ // Returns true if the last character printed was a slash bool url_encode(FILE *fd, char *s) { - // Removes / from the reserved list: - static const char *reserved = "!#$&'()*+,:;=?@[]"; + // Whitelisting is safer/better than blacklisting: + static const char *unreserved = "/-._~"; bool slash = false; for(;*s;s++) { - fprintf(fd, (isprint((u_int)*s) && (strchr(reserved, *s) == NULL))? "%c":"%%%02X", *s); + fprintf(fd, (isalnum(*s) || strchr(unreserved, *s))? "%c":"%%%02X", *s); slash = (*s == '/'); } return slash; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tree-2.3.1/list.c new/tree-2.3.2/list.c --- old/tree-2.3.1/list.c 2026-01-05 22:54:14.000000000 +0100 +++ new/tree-2.3.2/list.c 2026-03-15 16:58:10.000000000 +0100 @@ -191,18 +191,24 @@ if (!(flag.xdev && dev != (*dir)->dev) && (!(*dir)->lnk || ((*dir)->lnk && flag.l))) { descend = 1; - if ((*dir)->lnk) { - if (*(*dir)->lnk == '/') newpath = (*dir)->lnk; - else { - if (flag.f && !strcmp(dirname,"/")) sprintf(path,"%s%s",dirname,(*dir)->lnk); - else sprintf(path,"%s/%s",dirname,(*dir)->lnk); - } - if (found) { - err = "recursive, not followed"; - /* Not actually a problem if we weren't going to descend anyway: */ - if (Level >= 0 && lev > Level) err = NULL; - descend = -1; - } + // if ((*dir)->lnk) { + // if (*(*dir)->lnk == '/') newpath = (*dir)->lnk; + // else { + // if (flag.f && !strcmp(dirname,"/")) sprintf(path,"%s%s",dirname,(*dir)->lnk); + // else sprintf(path,"%s/%s",dirname,(*dir)->lnk); + // } + // if (found) { + // err = "recursive, not followed"; + // /* Not actually a problem if we weren't going to descend anyway: */ + // if (Level >= 0 && lev > Level) err = NULL; + // descend = -1; + // } + // } + if ((*dir)->lnk && found) { + err = "recursive, not followed"; + /* Not actually a problem if we weren't going to descend anyway: */ + if (Level >= 0 && lev > Level) err = NULL; + descend = -1; } if ((Level >= 0) && (lev > Level)) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tree-2.3.1/tree.c new/tree-2.3.2/tree.c --- old/tree-2.3.1/tree.c 2026-01-31 23:24:55.000000000 +0100 +++ new/tree-2.3.2/tree.c 2026-03-16 23:37:09.000000000 +0100 @@ -18,8 +18,8 @@ #include "tree.h" -char *version = "$Version: $ tree v2.3.1 %s 1996 - 2026 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro $"; -char *hversion= "\t\t tree v2.3.1 %s 1996 - 2026 by Steve Baker and Thomas Moore <br>\n" +char *version = "$Version: $ tree v2.3.2 %s 1996 - 2026 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro $"; +char *hversion= "\t\t tree v2.3.2 %s 1996 - 2026 by Steve Baker and Thomas Moore <br>\n" "\t\t HTML output hacked and copyleft %s 1998 by Francesc Rocher <br>\n" "\t\t JSON output hacked and copyleft %s 2014 by Florian Sesser <br>\n" "\t\t Charsets / OS/2 support %s 2001 by Kyosuke Tokoro\n"; @@ -98,7 +98,7 @@ } else { fprintf(stderr,"tree: Missing argument to %s=\n", prefix); if (strcmp(prefix, "--charset=") == 0) initlinedraw(true); - exit(1); + exit(EXIT_FAILURE); } } else if (argv[*n] != NULL) { ret = argv[*n]; @@ -107,7 +107,7 @@ } else { fprintf(stderr,"tree: Missing argument to %s\n", prefix); if (strcmp(prefix, "--charset") == 0) initlinedraw(true); - exit(1); + exit(EXIT_FAILURE); } } return ret; @@ -232,7 +232,7 @@ case 'P': if (argv[n] == NULL) { fprintf(stderr,"tree: Missing argument to -P option.\n"); - exit(1); + exit(EXIT_FAILURE); } if (pattern >= maxpattern-1) patterns = xrealloc(patterns, sizeof(char *) * (size_t)(maxpattern += 10)); patterns[pattern++] = argv[n++]; @@ -241,7 +241,7 @@ case 'I': if (argv[n] == NULL) { fprintf(stderr,"tree: Missing argument to -I option.\n"); - exit(1); + exit(EXIT_FAILURE); } if (ipattern >= maxipattern-1) ipatterns = xrealloc(ipatterns, sizeof(char *) * (size_t)(maxipattern += 10)); ipatterns[ipattern++] = argv[n++]; @@ -297,7 +297,7 @@ }; if (argv[n] == NULL) { fprintf(stderr,"tree: Missing argument to -H option.\n"); - exit(1); + exit(EXIT_FAILURE); } host = argv[n++]; k = strlen(host)-1; @@ -312,7 +312,7 @@ case 'T': if (argv[n] == NULL) { fprintf(stderr,"tree: Missing argument to -T option.\n"); - exit(1); + exit(EXIT_FAILURE); } title = argv[n++]; break; @@ -330,19 +330,19 @@ } else { if ((sLevel = argv[n++]) == NULL) { fprintf(stderr,"tree: Missing argument to -L option.\n"); - exit(1); + exit(EXIT_FAILURE); } } Level = (int)strtoul(sLevel,NULL,0)-1; if (Level < 0) { fprintf(stderr,"tree: Invalid level, must be greater than 0.\n"); - exit(1); + exit(EXIT_FAILURE); } break; case 'o': if (argv[n] == NULL) { fprintf(stderr,"tree: Missing argument to -o option.\n"); - exit(1); + exit(EXIT_FAILURE); } outfilename = argv[n++]; break; @@ -355,7 +355,7 @@ /* Long options that don't take parameters should just use strcmp: */ if (!strcmp("--help",argv[i])) { usage(2); - exit(0); + exit(EXIT_SUCCESS); } if (!strcmp("--version",argv[i])) { j = strlen(argv[i])-1; @@ -442,7 +442,7 @@ fprintf(stderr,"tree: Sort type '%s' not valid, should be one of: ", arg); for(k=0; sorts[k].name; k++) printf("%s%c", sorts[k].name, sorts[k+1].name? ',': '\n'); - exit(1); + exit(EXIT_FAILURE); } break; } @@ -465,11 +465,11 @@ } if ((arg = long_arg(argv, i, &j, &n, "--gitfile")) != NULL) { flag.gitignore=true; - ig = new_ignorefile(arg, false); + ig = new_ignorefile(arg, arg, false); if (ig != NULL) push_filterstack(ig); else { fprintf(stderr,"tree: Could not load gitignore file\n"); - exit(1); + exit(EXIT_FAILURE); } break; } @@ -489,7 +489,7 @@ if (inf != NULL) push_infostack(inf); else { fprintf(stderr,"tree: Could not load infofile\n"); - exit(1); + exit(EXIT_FAILURE); } break; } @@ -564,14 +564,14 @@ #endif fprintf(stderr,"tree: Invalid argument `%s'.\n",argv[i]); usage(1); - exit(1); + exit(EXIT_FAILURE); } /* Falls through */ default: /* printf("here i = %d, n = %d\n", i, n); */ fprintf(stderr,"tree: Invalid argument -`%c'.\n",argv[i][j]); usage(1); - exit(1); + exit(EXIT_FAILURE); break; } } @@ -590,7 +590,7 @@ if (showversion) { print_version(true); - exit(0); + exit(EXIT_SUCCESS); } /* Insure sensible defaults and sanity check options: */ @@ -652,7 +652,7 @@ #endif if (outfile == NULL) { fprintf(stderr,"tree: invalid filename '%s'\n", filename); - exit(1); + exit(EXIT_FAILURE); } } } @@ -765,7 +765,7 @@ " \b--version\r Print version and exit.\n" " \b--help\r Print usage and this help message and exit.\n" " \b--\r Options processing terminator.\n"); - exit(0); + exit(EXIT_SUCCESS); } /** @@ -774,7 +774,7 @@ int patignore(const char *name, bool isdir, bool checkpaths) { int i; - char *pc; + const char *pc; for(i=0; i < ipattern; i++) { if (patmatch(name, ipatterns[i], isdir)) return 1; else if (checkpaths) { @@ -794,7 +794,7 @@ int patinclude(const char *name, bool isdir, bool checkpaths) { int i; - char *pc; + const char *pc; for(i=0; i < pattern; i++) { if (patmatch(name, patterns[i], isdir)) return 1; else if (checkpaths) { @@ -1015,16 +1015,17 @@ void push_files(const char *dir, struct ignorefile **ig, struct infofile **inf, bool top) { + char path[PATH_MAX]; char *stmp; if (flag.gitignore) { struct ignorefile *tig = NULL; /* Not going to implement git configs so no core.excludesFile support. */ if (top && (stmp = getenv("GIT_DIR"))) { - push_filterstack(tig = new_ignorefile(pathconcat(stmp, "info/exclude", NULL), false)); + push_filterstack(tig = new_ignorefile(stmp, pathconcat(path, stmp, "info/exclude", NULL), false)); } if (top) *ig = gitignore_search(dir, 0); - else push_filterstack(*ig = new_ignorefile(dir, top)); + else push_filterstack(*ig = new_ignorefile(dir, dir, top)); if (*ig == NULL) *ig = tig; } if (flag.showinfo) { @@ -1036,11 +1037,6 @@ * This can and will use a large amount of memory for large directory trees * and also take some time. */ -// struct _info **unix_getfulltree(char *d, u_long lev, dev_t dev, off_t *size, char **err) -// { -// } - - struct _info **unix_getfulltree(char *d, u_long lev, dev_t dev, off_t *size, char **err) { char *path; @@ -1107,7 +1103,7 @@ if (*(*dir)->lnk == '/') (*dir)->child = unix_getfulltree((*dir)->lnk,lev+1,dev,&((*dir)->size),&((*dir)->err)); else { - if (strlen(d)+strlen((*dir)->lnk)+2 > pathsize) path=xrealloc(path,pathsize=(strlen(d)+strlen((*dir)->name)+1024)); + if (strlen(d)+strlen((*dir)->lnk)+2 > pathsize) path=xrealloc(path,pathsize=(strlen(d)+strlen((*dir)->lnk)+1024)); if (flag.f && !strcmp(d,"/")) sprintf(path,"%s%s",d,(*dir)->lnk); else sprintf(path,"%s/%s",d,(*dir)->lnk); (*dir)->child = unix_getfulltree(path,lev+1,dev,&((*dir)->size),&((*dir)->err)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tree-2.3.1/tree.h new/tree-2.3.2/tree.h --- old/tree-2.3.1/tree.h 2026-01-10 21:32:33.000000000 +0100 +++ new/tree-2.3.2/tree.h 2026-03-06 00:20:14.000000000 +0100 @@ -204,7 +204,7 @@ struct pattern *new_pattern(char *pattern); struct ignorefile *gitignore_search(const char *startpath, int depth); bool filtercheck(const char *path, const char *name, int isdir); -struct ignorefile *new_ignorefile(const char *path, bool checkparents); +struct ignorefile *new_ignorefile(const char *basepath, const char *path, bool checkparents); void push_filterstack(struct ignorefile *ig); struct ignorefile *pop_filterstack(void); struct ignorefile *flush_filterstack(void);
