xref: /original-bsd/usr.sbin/amd/amd/info_ndbm.c (revision c3e32dec)
1 /*
2  * Copyright (c) 1989 Jan-Simon Pendry
3  * Copyright (c) 1989 Imperial College of Science, Technology & Medicine
4  * Copyright (c) 1989, 1993
5  *	The Regents of the University of California.  All rights reserved.
6  *
7  * This code is derived from software contributed to Berkeley by
8  * Jan-Simon Pendry at Imperial College, London.
9  *
10  * %sccs.include.redist.c%
11  *
12  *	@(#)info_ndbm.c	8.1 (Berkeley) 06/06/93
13  *
14  * $Id: info_ndbm.c,v 5.2.2.1 1992/02/09 15:08:31 jsp beta $
15  *
16  */
17 
18 /*
19  * Get info from NDBM map
20  */
21 
22 #include "am.h"
23 
24 #ifdef HAS_NDBM_MAPS
25 
26 #include <ndbm.h>
27 #include <fcntl.h>
28 #include <sys/stat.h>
29 
30 static int search_ndbm P((DBM *db, char *key, char **val));
31 static int search_ndbm(db, key, val)
32 DBM *db;
33 char *key;
34 char **val;
35 {
36 	datum k, v;
37 	k.dptr = key;
38 	k.dsize = strlen(key) + 1;
39 	v = dbm_fetch(db, k);
40 	if (v.dptr) {
41 		*val = strdup(v.dptr);
42 		return 0;
43 	}
44 	return ENOENT;
45 }
46 
47 int ndbm_search P((mnt_map *m, char *map, char *key, char **pval, time_t *tp));
48 int ndbm_search(m, map, key, pval, tp)
49 mnt_map *m;
50 char *map;
51 char *key;
52 char **pval;
53 time_t *tp;
54 {
55 	DBM *db;
56 
57 	db = dbm_open(map, O_RDONLY, 0);
58 	if (db) {
59 		struct stat stb;
60 		int error;
61 		error = fstat(dbm_pagfno(db), &stb);
62 		if (!error && *tp < stb.st_mtime) {
63 			*tp = stb.st_mtime;
64 			error = -1;
65 		} else {
66 			error = search_ndbm(db, key, pval);
67 		}
68 		(void) dbm_close(db);
69 		return error;
70 	}
71 
72 	return errno;
73 }
74 
75 int ndbm_init P((char *map, time_t *tp));
76 int ndbm_init(map, tp)
77 char *map;
78 time_t *tp;
79 {
80 	DBM *db;
81 
82 	db = dbm_open(map, O_RDONLY, 0);
83 	if (db) {
84 		struct stat stb;
85 
86 		if (fstat(dbm_pagfno(db), &stb) < 0)
87 			*tp = clocktime();
88 		else
89 			*tp = stb.st_mtime;
90 		dbm_close(db);
91 		return 0;
92 	}
93 
94 	return errno;
95 }
96 
97 #endif /* HAS_NDBM_MAPS */
98