Module Name: src
Committed By: mrg
Date: Fri Dec 16 04:45:04 UTC 2016
Modified Files:
src/include: dirent.h
src/lib/libc/compat/gen: compat_alphasort.c compat_scandir.c
src/lib/libc/compat/include: dirent.h
src/lib/libc/gen: alphasort.c initdir.c scandir.3 scandir.c
src/usr.sbin/lpr/lpc: cmds.c
Log Message:
scandir/alphasort take "const struct dirent **" not "const void *" in
modern unix. since we claim to be 'IEEE Std 1003.1-2008', make it so.
To generate a diff of this commit:
cvs rdiff -u -r1.35 -r1.36 src/include/dirent.h
cvs rdiff -u -r1.1 -r1.2 src/lib/libc/compat/gen/compat_alphasort.c \
src/lib/libc/compat/gen/compat_scandir.c
cvs rdiff -u -r1.7 -r1.8 src/lib/libc/compat/include/dirent.h
cvs rdiff -u -r1.2 -r1.3 src/lib/libc/gen/alphasort.c
cvs rdiff -u -r1.3 -r1.4 src/lib/libc/gen/initdir.c
cvs rdiff -u -r1.14 -r1.15 src/lib/libc/gen/scandir.3
cvs rdiff -u -r1.27 -r1.28 src/lib/libc/gen/scandir.c
cvs rdiff -u -r1.24 -r1.25 src/usr.sbin/lpr/lpc/cmds.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/include/dirent.h
diff -u src/include/dirent.h:1.35 src/include/dirent.h:1.36
--- src/include/dirent.h:1.35 Mon Jul 30 23:11:13 2012
+++ src/include/dirent.h Fri Dec 16 04:45:04 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: dirent.h,v 1.35 2012/07/30 23:11:13 yamt Exp $ */
+/* $NetBSD: dirent.h,v 1.36 2016/12/16 04:45:04 mrg Exp $ */
/*-
* Copyright (c) 1989, 1993
@@ -109,10 +109,12 @@ long telldir(DIR *);
DIR *fdopendir(int);
DIR *__opendir2(const char *, int) __RENAME(__opendir230);
int scandir(const char *, struct dirent ***,
- int (*)(const struct dirent *), int (*)(const void *, const void *))
+ int (*)(const struct dirent *), int (*)(const struct dirent **,
+ const struct dirent **))
__RENAME(__scandir30);
int getdents(int, char *, size_t) __RENAME(__getdents30);
-int alphasort(const void *, const void *) __RENAME(__alphasort30);
+int alphasort(const struct dirent **, const struct dirent **)
+ __RENAME(__alphasort30);
#endif
#endif /* defined(_NETBSD_SOURCE) */
__END_DECLS
Index: src/lib/libc/compat/gen/compat_alphasort.c
diff -u src/lib/libc/compat/gen/compat_alphasort.c:1.1 src/lib/libc/compat/gen/compat_alphasort.c:1.2
--- src/lib/libc/compat/gen/compat_alphasort.c:1.1 Tue Feb 24 18:42:36 2009
+++ src/lib/libc/compat/gen/compat_alphasort.c Fri Dec 16 04:45:04 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_alphasort.c,v 1.1 2009/02/24 18:42:36 christos Exp $ */
+/* $NetBSD: compat_alphasort.c,v 1.2 2016/12/16 04:45:04 mrg Exp $ */
#include <sys/stat.h>
#define __LIBC12_SOURCE__
@@ -16,5 +16,6 @@ __warn_references(alphasort,
#endif
#define dirent dirent12
+#define ALPHASORTARG void *
#include "gen/alphasort.c"
Index: src/lib/libc/compat/gen/compat_scandir.c
diff -u src/lib/libc/compat/gen/compat_scandir.c:1.1 src/lib/libc/compat/gen/compat_scandir.c:1.2
--- src/lib/libc/compat/gen/compat_scandir.c:1.1 Tue Sep 13 01:44:09 2005
+++ src/lib/libc/compat/gen/compat_scandir.c Fri Dec 16 04:45:04 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_scandir.c,v 1.1 2005/09/13 01:44:09 christos Exp $ */
+/* $NetBSD: compat_scandir.c,v 1.2 2016/12/16 04:45:04 mrg Exp $ */
#include <sys/stat.h>
#define __LIBC12_SOURCE__
@@ -16,5 +16,6 @@ __warn_references(scandir,
#endif
#define dirent dirent12
+#define COMPARARG void *
#include "gen/scandir.c"
Index: src/lib/libc/compat/include/dirent.h
diff -u src/lib/libc/compat/include/dirent.h:1.7 src/lib/libc/compat/include/dirent.h:1.8
--- src/lib/libc/compat/include/dirent.h:1.7 Tue Feb 24 18:42:36 2009
+++ src/lib/libc/compat/include/dirent.h Fri Dec 16 04:45:04 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: dirent.h,v 1.7 2009/02/24 18:42:36 christos Exp $ */
+/* $NetBSD: dirent.h,v 1.8 2016/12/16 04:45:04 mrg Exp $ */
/*-
* Copyright (c) 1989, 1993
@@ -61,13 +61,14 @@ DIR *__opendir230(const char *, int);
int scandir(const char *, struct dirent12 ***,
int (*)(const struct dirent12 *), int (*)(const void *, const void *));
int __scandir30(const char *, struct dirent ***,
- int (*)(const struct dirent *), int (*)(const void *, const void *));
+ int (*)(const struct dirent *),
+ int (*)(const struct dirent **, const struct dirent **));
int getdents(int, char *, size_t);
int __getdents30(int, char *, size_t);
int alphasort(const void *, const void *);
-int __alphasort30(const void *, const void *);
+int __alphasort30(const struct dirent **, const struct dirent **);
int getdirentries(int, char *, int, long *);
Index: src/lib/libc/gen/alphasort.c
diff -u src/lib/libc/gen/alphasort.c:1.2 src/lib/libc/gen/alphasort.c:1.3
--- src/lib/libc/gen/alphasort.c:1.2 Sun Mar 1 19:59:55 2009
+++ src/lib/libc/gen/alphasort.c Fri Dec 16 04:45:04 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: alphasort.c,v 1.2 2009/03/01 19:59:55 christos Exp $ */
+/* $NetBSD: alphasort.c,v 1.3 2016/12/16 04:45:04 mrg Exp $ */
/*
* Copyright (c) 1983, 1993
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)scandir.c 8.3 (Berkeley) 1/2/94";
#else
-__RCSID("$NetBSD: alphasort.c,v 1.2 2009/03/01 19:59:55 christos Exp $");
+__RCSID("$NetBSD: alphasort.c,v 1.3 2016/12/16 04:45:04 mrg Exp $");
#endif
#endif /* LIBC_SCCS and not lint */
@@ -44,11 +44,15 @@ __RCSID("$NetBSD: alphasort.c,v 1.2 2009
#include <dirent.h>
#include <string.h>
+#ifndef ALPHASORTARG
+#define ALPHASORTARG struct dirent **
+#endif
+
/*
* Alphabetic order comparison routine for those who want it.
*/
int
-alphasort(const void *d1, const void *d2)
+alphasort(const ALPHASORTARG d1, const ALPHASORTARG d2)
{
_DIAGASSERT(d1 != NULL);
Index: src/lib/libc/gen/initdir.c
diff -u src/lib/libc/gen/initdir.c:1.3 src/lib/libc/gen/initdir.c:1.4
--- src/lib/libc/gen/initdir.c:1.3 Tue Mar 13 21:13:36 2012
+++ src/lib/libc/gen/initdir.c Fri Dec 16 04:45:04 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: initdir.c,v 1.3 2012/03/13 21:13:36 christos Exp $ */
+/* $NetBSD: initdir.c,v 1.4 2016/12/16 04:45:04 mrg Exp $ */
/*
* Copyright (c) 1983, 1993
@@ -31,7 +31,7 @@
#include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: initdir.c,v 1.3 2012/03/13 21:13:36 christos Exp $");
+__RCSID("$NetBSD: initdir.c,v 1.4 2016/12/16 04:45:04 mrg Exp $");
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
@@ -201,7 +201,8 @@ retry:
* This sort must be stable.
*/
mergesort(dpv, (size_t)n, sizeof(*dpv),
- alphasort);
+ (int (*)(const void *,
+ const void *))alphasort);
dpv[n] = NULL;
xp = NULL;
Index: src/lib/libc/gen/scandir.3
diff -u src/lib/libc/gen/scandir.3:1.14 src/lib/libc/gen/scandir.3:1.15
--- src/lib/libc/gen/scandir.3:1.14 Fri Dec 17 19:20:42 2010
+++ src/lib/libc/gen/scandir.3 Fri Dec 16 04:45:04 2016
@@ -1,4 +1,4 @@
-.\" $NetBSD: scandir.3,v 1.14 2010/12/17 19:20:42 njoly Exp $
+.\" $NetBSD: scandir.3,v 1.15 2016/12/16 04:45:04 mrg Exp $
.\"
.\" Copyright (c) 1983, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -29,7 +29,7 @@
.\"
.\" @(#)scandir.3 8.1 (Berkeley) 6/4/93
.\"
-.Dd April 29, 2010
+.Dd December 15, 2016
.Dt SCANDIR 3
.Os
.Sh NAME
@@ -42,9 +42,9 @@
.In sys/types.h
.In dirent.h
.Ft int
-.Fn scandir "const char *dirname" "struct dirent ***namelist" "int \*(lp*select\*(rp\*(lpconst struct dirent *\*(rp" "int \*(lp*compar\*(rp\*(lpconst void *, const void *\*(rp"
+.Fn scandir "const char *dirname" "struct dirent ***namelist" "int \*(lp*select\*(rp\*(lpconst struct dirent *\*(rp" "int \*(lp*compar\*(rp\*(lpconst struct dirent **, const struct dirent **\*(rp"
.Ft int
-.Fn alphasort "const void *d1" "const void *d2"
+.Fn alphasort "const struct dirent **d1" "const struct dirent **d2"
.Sh DESCRIPTION
The
.Fn scandir
@@ -111,3 +111,12 @@ and
.Fn alphasort
functions appeared in
.Bx 4.2 .
+.Pp
+They were changed in
+.Nx 8.0
+to use
+.Dq struct dirent **
+instead of
+.Dq void *
+for the comparision function, including
+.Fn alphasort .
Index: src/lib/libc/gen/scandir.c
diff -u src/lib/libc/gen/scandir.c:1.27 src/lib/libc/gen/scandir.c:1.28
--- src/lib/libc/gen/scandir.c:1.27 Tue Mar 13 21:13:36 2012
+++ src/lib/libc/gen/scandir.c Fri Dec 16 04:45:04 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: scandir.c,v 1.27 2012/03/13 21:13:36 christos Exp $ */
+/* $NetBSD: scandir.c,v 1.28 2016/12/16 04:45:04 mrg Exp $ */
/*
* Copyright (c) 1983, 1993
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)scandir.c 8.3 (Berkeley) 1/2/94";
#else
-__RCSID("$NetBSD: scandir.c,v 1.27 2012/03/13 21:13:36 christos Exp $");
+__RCSID("$NetBSD: scandir.c,v 1.28 2016/12/16 04:45:04 mrg Exp $");
#endif
#endif /* LIBC_SCCS and not lint */
@@ -82,10 +82,14 @@ dirsize(int fd, size_t olen)
return olen + nlen;
}
+#ifndef COMPARARG
+#define COMPARARG struct dirent **
+#endif
+
int
scandir(const char *dirname, struct dirent ***namelist,
int (*selectfn)(const struct dirent *),
- int (*dcomp)(const void *, const void *))
+ int (*dcomp)(const COMPARARG, const COMPARARG))
{
struct dirent *d, *p, **names, **newnames;
size_t nitems, arraysz;
@@ -137,7 +141,8 @@ scandir(const char *dirname, struct dire
}
(void)closedir(dirp);
if (nitems && dcomp != NULL)
- qsort(names, nitems, sizeof(*names), dcomp);
+ qsort(names, nitems, sizeof(*names),
+ (int (*)(const void *, const void *))dcomp);
*namelist = names;
_DIAGASSERT(__type_fit(int, nitems));
return (int)nitems;
Index: src/usr.sbin/lpr/lpc/cmds.c
diff -u src/usr.sbin/lpr/lpc/cmds.c:1.24 src/usr.sbin/lpr/lpc/cmds.c:1.25
--- src/usr.sbin/lpr/lpc/cmds.c:1.24 Wed Aug 31 16:24:59 2011
+++ src/usr.sbin/lpr/lpc/cmds.c Fri Dec 16 04:45:04 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: cmds.c,v 1.24 2011/08/31 16:24:59 plunky Exp $ */
+/* $NetBSD: cmds.c,v 1.25 2016/12/16 04:45:04 mrg Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
@@ -36,7 +36,7 @@ __COPYRIGHT("@(#) Copyright (c) 1983, 19
#if 0
static char sccsid[] = "@(#)cmds.c 8.2 (Berkeley) 4/28/95";
#else
-__RCSID("$NetBSD: cmds.c,v 1.24 2011/08/31 16:24:59 plunky Exp $");
+__RCSID("$NetBSD: cmds.c,v 1.25 2016/12/16 04:45:04 mrg Exp $");
#endif
#endif /* not lint */
@@ -74,7 +74,7 @@ static int doselect(const struct dirent
static void enablepr(void);
static void prstat(void);
static void putmsg(int, char **);
-static int sortq(const void *, const void *);
+static int sortq(const struct dirent **, const struct dirent **);
static void startpr(int);
static void stoppr(void);
static int touch(struct queue *);
@@ -256,13 +256,10 @@ doselect(const struct dirent *d)
* by `cf', `tf', or `df', then by the sequence letter A-Z, a-z.
*/
static int
-sortq(const void *a, const void *b)
+sortq(const struct dirent **d1, const struct dirent **d2)
{
- const struct dirent *const *d1, *const *d2;
int c1, c2;
- d1 = (const struct dirent *const *)a;
- d2 = (const struct dirent *const *)b;
if ((c1 = strcmp((*d1)->d_name + 3, (*d2)->d_name + 3)) != 0)
return(c1);
c1 = (*d1)->d_name[0];