diff options
author | jilles <jilles@FreeBSD.org> | 2013-10-04 21:25:55 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2013-10-04 21:25:55 +0000 |
commit | 64b622034f8aa86dc97f56d045d65e54cdd1f951 (patch) | |
tree | bccb7f641d67b3773c014c01fcbf9fe8df730659 /usr.sbin/kldxref | |
parent | cf59042d5a28df352e229b74095717665e24e29c (diff) | |
download | FreeBSD-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/kldxref')
-rw-r--r-- | usr.sbin/kldxref/kldxref.c | 12 |
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); |