xref: /original-bsd/usr.sbin/amd/amd/info_ndbm.c (revision f43fc9d7)
1 /*
2  * $Id: info_ndbm.c,v 5.2 90/06/23 22:19:31 jsp Rel $
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.1 (Berkeley) 06/29/90
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(db, key, val)
30 DBM *db;
31 char *key;
32 char **val;
33 {
34 	datum k, v;
35 	k.dptr = key;
36 	k.dsize = strlen(key) + 1;
37 	v = dbm_fetch(db, k);
38 	if (v.dptr) {
39 		*val = strdup(v.dptr);
40 		return 0;
41 	}
42 	return ENOENT;
43 }
44 
45 int ndbm_search(m, map, key, pval, tp)
46 mnt_map *m;
47 char *map;
48 char *key;
49 char **pval;
50 time_t *tp;
51 {
52 	DBM *db;
53 
54 	db = dbm_open(map, O_RDONLY, 0);
55 	if (db) {
56 		struct stat stb;
57 		int error;
58 		error = fstat(dbm_pagfno(db), &stb);
59 		if (!error && *tp < stb.st_mtime) {
60 			*tp = stb.st_mtime;
61 			error = -1;
62 		} else {
63 			error = search_ndbm(db, key, pval);
64 		}
65 		(void) dbm_close(db);
66 		return error;
67 	}
68 
69 	return errno;
70 }
71 
72 int ndbm_init(map)
73 char *map;
74 {
75 	DBM *db;
76 
77 	db = dbm_open(map, O_RDONLY, 0);
78 	if (db) {
79 		dbm_close(db);
80 		return 0;
81 	}
82 
83 	return errno;
84 }
85 
86 #endif /* HAS_NDBM_MAPS */
87