Similar to cap_mkdb(1), add endianness support to services_mkdb(1)

to support cross-builds once this is invoked during releases.
This commit is contained in:
John Baldwin 2014-01-22 16:50:18 +00:00
parent be3d21a2cf
commit cddcca2dc3
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=261030
3 changed files with 27 additions and 4 deletions

View File

@ -29,6 +29,6 @@
* $FreeBSD$
*/
extern const HASHINFO hinfo;
extern HASHINFO hinfo;
void uniq(const char *);

View File

@ -37,6 +37,7 @@
.Nd generate the services database
.Sh SYNOPSIS
.Nm
.Op Fl b | l
.Op Fl q
.Op Fl o Ar database
.Op Ar file
@ -61,6 +62,10 @@ The file must be in the correct format (see
.Pp
The options are as follows:
.Bl -tag -width indent
.It Fl b
Use big-endian byte order for database metadata.
.It Fl l
Use little-endian byte order for database metadata.
.It Fl o Ar database
Put the output databases in the named file.
.It Fl q
@ -70,6 +75,13 @@ Print the services file to stdout, omitting duplicate entries and comments.
.El
.Pp
The databases are used by the C library services routines (see
.Pp
The
.Fl b
and
.Fl l
flags are mutually exclusive.
The default byte ordering is the current host order.
.Xr getservent 3 ) .
.Sh FILES
.Bl -tag -width ".Pa /var/db/services.db.tmp" -compact

View File

@ -67,7 +67,7 @@ static const char *getprotostr(StringList *, size_t);
static const char *mkaliases(StringList *, char *, size_t);
static void usage(void);
const HASHINFO hinfo = {
HASHINFO hinfo = {
.bsize = 256,
.ffactor = 4,
.nelem = 32768,
@ -87,14 +87,21 @@ main(int argc, char *argv[])
int warndup = 1;
int unique = 0;
int otherflag = 0;
int byteorder = 0;
size_t cnt = 0;
StringList *sl, ***svc;
size_t port, proto;
setprogname(argv[0]);
while ((ch = getopt(argc, argv, "qo:u")) != -1)
while ((ch = getopt(argc, argv, "blo:qu")) != -1)
switch (ch) {
case 'b':
case 'l':
if (byteorder != 0)
usage();
byteorder = ch == 'b' ? 4321 : 1234;
break;
case 'q':
otherflag = 1;
warndup = 0;
@ -119,6 +126,9 @@ main(int argc, char *argv[])
if (argc == 1)
fname = argv[0];
/* Set byte order. */
hinfo.lorder = byteorder;
if (unique)
uniq(fname);
@ -423,7 +433,8 @@ out:
static void
usage(void)
{
(void)fprintf(stderr, "Usage:\t%s [-q] [-o <db>] [<servicefile>]\n"
(void)fprintf(stderr,
"Usage:\t%s [-b | -l] [-q] [-o <db>] [<servicefile>]\n"
"\t%s -u [<servicefile>]\n", getprogname(), getprogname());
exit(1);
}