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