Sync with FreeBSD.
authorPeter Avalos <pavalos@dragonflybsd.org>
Tue, 25 Sep 2007 04:53:48 +0000 (04:53 +0000)
committerPeter Avalos <pavalos@dragonflybsd.org>
Tue, 25 Sep 2007 04:53:48 +0000 (04:53 +0000)
Add endianness support and fixate the hash bucket size to 4K.

usr.bin/cap_mkdb/cap_mkdb.1
usr.bin/cap_mkdb/cap_mkdb.c

index 7e6a640..9c4b78e 100644 (file)
 .\" SUCH DAMAGE.
 .\"
 .\"    @(#)cap_mkdb.1  8.1 (Berkeley) 6/6/93
-.\" $FreeBSD: src/usr.bin/cap_mkdb/cap_mkdb.1,v 1.7.2.5 2002/06/20 23:45:15 charnier Exp $
-.\" $DragonFly: src/usr.bin/cap_mkdb/cap_mkdb.1,v 1.2 2003/06/17 04:29:25 dillon Exp $
+.\" $FreeBSD: src/usr.bin/cap_mkdb/cap_mkdb.1,v 1.15 2005/02/22 23:29:53 ru Exp $
+.\" $DragonFly: src/usr.bin/cap_mkdb/cap_mkdb.1,v 1.3 2007/09/25 04:53:48 pavalos Exp $
 .\"
-.Dd June 6, 1993
+.Dd February 22, 2005
 .Dt CAP_MKDB 1
 .Os
 .Sh NAME
 .Nd create capability database
 .Sh SYNOPSIS
 .Nm
+.Op Fl b | l
 .Op Fl v
 .Op Fl f Ar outfile
-.Ar file
-.Op Ar
+.Ar
 .Sh DESCRIPTION
 The
 .Nm
@@ -66,11 +66,22 @@ record is stored into the database.
 .Pp
 The following options are available:
 .Bl -tag -width indent
+.It Fl b
+Use big-endian byte order for database metadata.
 .It Fl f Ar outfile
 Specify a different database basename.
+.It Fl l
+Use little-endian byte order for database metadata.
 .It Fl v
 Print out the number of capability records in the database.
 .El
+.Pp
+The
+.Fl b
+and
+.Fl l
+flags are mutually exclusive.
+The default byte ordering is the current host order.
 .Sh FORMAT
 Each record is stored in the database using two different types of keys.
 .Pp
@@ -79,7 +90,7 @@ the record (not including the trailing colon (``:'')) with a data
 field consisting of a special byte followed by the rest of the record.
 The special byte is either a 0 or 1, where a 0 means that the record
 is okay, and a 1 means that there was a ``tc'' capability in the record
-that couldn't be expanded.
+that could not be expanded.
 .Pp
 The second type is a key which consists of one of the names from the
 first capability of the record with a data field consisting a special
@@ -91,7 +102,7 @@ in a key/data pair of the second type.
 The data field of this key/data pair is used to look up a key/data
 pair of the first type which has the real data associated with the
 name.
-.Sh DIAGNOSTICS
+.Sh EXIT STATUS
 .Ex -std
 .Sh SEE ALSO
 .Xr dbopen 3 ,
index 004c242..993f371 100644 (file)
@@ -32,8 +32,8 @@
  *
  * @(#) Copyright (c) 1992, 1993 The Regents of the University of California.  All rights reserved.
  * @(#)cap_mkdb.c      8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.bin/cap_mkdb/cap_mkdb.c,v 1.6.2.2 2001/08/02 01:15:51 obrien Exp $
- * $DragonFly: src/usr.bin/cap_mkdb/cap_mkdb.c,v 1.4 2003/11/03 19:31:28 eirikn Exp $
+ * $FreeBSD: src/usr.bin/cap_mkdb/cap_mkdb.c,v 1.14 2005/02/22 23:29:53 ru Exp $
+ * $DragonFly: src/usr.bin/cap_mkdb/cap_mkdb.c,v 1.5 2007/09/25 04:53:48 pavalos Exp $
  */
 
 #include <sys/param.h>
@@ -47,7 +47,6 @@
 #include <string.h>
 #include <unistd.h>
 
-int     main(int, char *[]);
 void    db_build(char **);
 void    dounlink(void);
 void    usage(void);
@@ -56,6 +55,15 @@ DB *capdbp;
 int verbose;
 char *capdb, *capname, buf[8 * 1024];
 
+HASHINFO openinfo = {
+       4096,           /* bsize */
+       0,              /* ffactor */
+       0,              /* nelem */
+       0,              /* cachesize */
+       NULL,           /* hash() */
+       0               /* lorder */
+};
+
 /*
  * Mkcapdb creates a capability hash database for quick retrieval of capability
  * records.  The database contains 2 types of entries: records and references
@@ -66,11 +74,18 @@ char *capdb, *capname, buf[8 * 1024];
 int
 main(int argc, char **argv)
 {
-       int c;
+       int byteorder, c;
 
        capname = NULL;
-       while ((c = getopt(argc, argv, "f:v")) != -1) {
+       byteorder = 0;
+       while ((c = getopt(argc, argv, "bf:lv")) != -1) {
                switch(c) {
+               case 'b':
+               case 'l':
+                       if (byteorder != 0)
+                               usage();
+                       byteorder = c == 'b' ? 4321 : 1234;
+                       break;
                case 'f':
                        capname = optarg;
                        break;
@@ -88,6 +103,9 @@ main(int argc, char **argv)
        if (*argv == NULL)
                usage();
 
+       /* Set byte order. */
+       openinfo.lorder = byteorder;
+
        /*
         * The database file is the first argument if no name is specified.
         * Make arrangements to unlink it if exit badly.
@@ -95,8 +113,8 @@ main(int argc, char **argv)
        (void)snprintf(buf, sizeof(buf), "%s.db", capname ? capname : *argv);
        if ((capname = strdup(buf)) == NULL)
                errx(1, "strdup failed");
-       if ((capdbp = dbopen(capname,
-           O_CREAT | O_TRUNC | O_RDWR, DEFFILEMODE, DB_HASH, NULL)) == NULL)
+       if ((capdbp = dbopen(capname, O_CREAT | O_TRUNC | O_RDWR,
+           DEFFILEMODE, DB_HASH, &openinfo)) == NULL)
                err(1, "%s", buf);
 
        if (atexit(dounlink))
@@ -239,6 +257,6 @@ void
 usage(void)
 {
        (void)fprintf(stderr,
-           "usage: cap_mkdb [-v] [-f outfile] file [file ...]\n");
+           "usage: cap_mkdb [-b | -l] [-v] [-f outfile] file ...\n");
        exit(1);
 }