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