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);

Reply via email to