summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2013-10-04 21:25:55 +0000
committerjilles <jilles@FreeBSD.org>2013-10-04 21:25:55 +0000
commit64b622034f8aa86dc97f56d045d65e54cdd1f951 (patch)
treebccb7f641d67b3773c014c01fcbf9fe8df730659 /usr.sbin
parentcf59042d5a28df352e229b74095717665e24e29c (diff)
downloadFreeBSD-src-64b622034f8aa86dc97f56d045d65e54cdd1f951.zip
FreeBSD-src-64b622034f8aa86dc97f56d045d65e54cdd1f951.tar.gz
kldxref: Do not depend on the directory order.
Sort the filenames to get a consistent result between machines of the same architecture. Also, sort FTS_D entries after other entries so kldxref -R works properly in the uncommon case that a directory contains both subdirectories and modules. Previously, this may have happened to work, depending on the order of files in the directory. PR: bin/182098 Submitted by: Derek Schrock (original version) Tested by: Derek Schrock Approved by: re (delphij) MFC after: 1 week
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/kldxref/kldxref.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/usr.sbin/kldxref/kldxref.c b/usr.sbin/kldxref/kldxref.c
index 16b9058..e74be96 100644
--- a/usr.sbin/kldxref/kldxref.c
+++ b/usr.sbin/kldxref/kldxref.c
@@ -274,6 +274,16 @@ usage(void)
exit(1);
}
+int
+compare(const FTSENT *const *a, const FTSENT *const *b)
+{
+ if ((*a)->fts_info == FTS_D && (*b)->fts_info != FTS_D)
+ return 1;
+ if ((*a)->fts_info != FTS_D && (*b)->fts_info == FTS_D)
+ return -1;
+ return strcmp((*a)->fts_name, (*b)->fts_name);
+}
+
int
main(int argc, char *argv[])
{
@@ -315,7 +325,7 @@ main(int argc, char *argv[])
err(1, "%s", argv[0]);
}
- ftsp = fts_open(argv, fts_options, 0);
+ ftsp = fts_open(argv, fts_options, compare);
if (ftsp == NULL)
exit(1);
OpenPOWER on IntegriCloud