don't need user.h anymore
[unix-history] / usr / src / usr.sbin / kvm_mkdb / kvm_mkdb.c
CommitLineData
41485987
KB
1/*-
2 * Copyright (c) 1990 The Regents of the University of California.
c9619dbd
MT
3 * All rights reserved.
4 *
41485987 5 * %sccs.include.redist.c%
c9619dbd
MT
6 */
7
8#ifndef lint
9char copyright[] =
41485987 10"@(#) Copyright (c) 1990 The Regents of the University of California.\n\
c9619dbd
MT
11 All rights reserved.\n";
12#endif /* not lint */
13
c9619dbd 14#ifndef lint
4fec1dea 15static char sccsid[] = "@(#)kvm_mkdb.c 5.11 (Berkeley) %G%";
c9619dbd 16#endif /* not lint */
41485987 17
c9619dbd 18#include <sys/param.h>
01f88b32
KB
19#include <sys/stat.h>
20#include <fcntl.h>
573b8d71 21#include <db.h>
c9619dbd 22#include <errno.h>
c9619dbd 23#include <stdio.h>
01f88b32
KB
24#include <string.h>
25#include <paths.h>
c9619dbd
MT
26
27char *tmp;
28#define basename(cp) ((tmp=rindex((cp), '/')) ? tmp+1 : (cp))
c9619dbd
MT
29
30main(argc, argv)
01f88b32
KB
31 int argc;
32 char **argv;
c9619dbd 33{
c9619dbd 34 extern int optind;
573b8d71 35 DB *db;
c9619dbd 36 int ch;
01f88b32 37 char *nlistpath, *nlistname, dbtemp[MAXPATHLEN], dbname[MAXPATHLEN];
c9619dbd 38
c9619dbd
MT
39 while ((ch = getopt(argc, argv, "")) != EOF)
40 switch((char)ch) {
41 case '?':
42 default:
01f88b32 43 usage();
c9619dbd
MT
44 }
45 argc -= optind;
46 argv += optind;
47
48 nlistpath = argc > 1 ? argv[0] : _PATH_UNIX;
49 nlistname = basename(nlistpath);
573b8d71 50
01f88b32
KB
51 (void)sprintf(dbtemp, "%s/kvm_%s.tmp", _PATH_VARRUN, nlistname);
52 (void)sprintf(dbname, "%s/kvm_%s.db", _PATH_VARRUN, nlistname);
53 (void)umask(0);
573b8d71
KB
54 db = hash_open(dbtemp, O_CREAT|O_WRONLY|O_EXCL,
55 S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, NULL);
56 if (!db) {
01f88b32
KB
57 (void)fprintf(stderr,
58 "kvm_mkdb: %s: %s\n", dbtemp, strerror(errno));
59 exit(1);
c9619dbd 60 }
01f88b32 61 create_knlist(nlistpath, db);
573b8d71 62 (void)(db->close)(db);
01f88b32
KB
63 if (rename(dbtemp, dbname)) {
64 (void)fprintf(stderr, "kvm_mkdb: %s to %s: %s.\n",
65 dbtemp, dbname, strerror(errno));
66 exit(1);
67 }
68 exit(0);
c9619dbd
MT
69}
70
01f88b32
KB
71error(n)
72 char *n;
c9619dbd 73{
01f88b32 74 int sverr;
c9619dbd 75
01f88b32
KB
76 sverr = errno;
77 (void)fprintf(stderr, "kvm_mkdb: ");
78 if (n)
79 (void)fprintf(stderr, "%s: ", n);
80 (void)fprintf(stderr, "%s\n", strerror(sverr));
c9619dbd
MT
81 exit(1);
82}
83
01f88b32 84usage()
c9619dbd 85{
01f88b32 86 (void)fprintf(stderr, "usage: kvm_mkdb [file]\n");
c9619dbd
MT
87 exit(1);
88}