Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 May 2013 20:57:21 +0000 (UTC)
From:      Stefan Esser <se@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r250943 - head/usr.bin/patch
Message-ID:  <201305232057.r4NKvLtB077330@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: se
Date: Thu May 23 20:57:20 2013
New Revision: 250943
URL: http://svnweb.freebsd.org/changeset/base/250943

Log:
  Fix target selection logic, which did not comply with the man page.
  
  Instead of using the file with the least order of path name components,
  shortest filename and finally the shortest basename (with the search
  stopping as soon as one of these conditions is true), the first filename
  checked was used as the reference, and another filename was only selected
  if all of the above comparisons are in favour of the latter file.
  
  This was wrong, because filenames with path less components were only
  considered, if both of the other conditions were true as well. In fact,
  the first filename to be checked had good chances to be selected in the
  end, since it only needed to be better with regard to any one of the
  three criteria ...
  
  Reviewed by:	delphij@freebsd.org

Modified:
  head/usr.bin/patch/pch.c

Modified: head/usr.bin/patch/pch.c
==============================================================================
--- head/usr.bin/patch/pch.c	Thu May 23 20:52:30 2013	(r250942)
+++ head/usr.bin/patch/pch.c	Thu May 23 20:57:20 2013	(r250943)
@@ -1537,10 +1537,16 @@ best_name(const struct file_name *names,
 			continue;
 		if ((tmp = num_components(names[i].path)) > min_components)
 			continue;
-		min_components = tmp;
+		if (tmp < min_components) {
+			min_components = tmp;
+			best = names[i].path;
+		}
 		if ((tmp = strlen(basename(names[i].path))) > min_baselen)
 			continue;
-		min_baselen = tmp;
+		if (tmp < min_baselen) {
+			min_baselen = tmp;
+			best = names[i].path;
+		}
 		if ((tmp = strlen(names[i].path)) > min_len)
 			continue;
 		min_len = tmp;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201305232057.r4NKvLtB077330>