home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume21 / amd / part01 / info_ndbm.c < prev    next >
C/C++ Source or Header  |  1990-04-10  |  2KB  |  98 lines

  1. /*
  2.  * $Id: info_ndbm.c,v 5.1.1.1 89/11/28 17:47:20 jsp Exp Locker: jsp $
  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.  * Redistribution and use in source and binary forms are permitted
  13.  * provided that the above copyright notice and this paragraph are
  14.  * duplicated in all such forms and that any documentation,
  15.  * advertising materials, and other materials related to such
  16.  * distribution and use acknowledge that the software was developed
  17.  * by Imperial College of Science, Technology and Medicine, London, UK.
  18.  * The names of the College and University may not be used to endorse
  19.  * or promote products derived from this software without specific
  20.  * prior written permission.
  21.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  22.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  23.  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  24.  *
  25.  *    %W% (Berkeley) %G%
  26.  */
  27.  
  28. /*
  29.  * Get info from NDBM map
  30.  */
  31.  
  32. #include "am.h"
  33.  
  34. #ifdef HAS_NDBM_MAPS
  35.  
  36. #include <ndbm.h>
  37. #include <fcntl.h>
  38. #include <sys/stat.h>
  39.  
  40. static int search_ndbm(db, key, val)
  41. DBM *db;
  42. char *key;
  43. char **val;
  44. {
  45.     datum k, v;
  46.     k.dptr = key;
  47.     k.dsize = strlen(key) + 1;
  48.     v = dbm_fetch(db, k);
  49.     if (v.dptr) {
  50.         *val = strdup(v.dptr);
  51.         return 0;
  52.     }
  53.     return ENOENT;
  54. }
  55.  
  56. int ndbm_search(m, map, key, pval, tp)
  57. mnt_map *m;
  58. char *map;
  59. char *key;
  60. char **pval;
  61. time_t *tp;
  62. {
  63.     DBM *db;
  64.  
  65.     db = dbm_open(map, O_RDONLY, 0);
  66.     if (db) {
  67.         struct stat stb;
  68.         int error;
  69.         error = fstat(dbm_pagfno(db), &stb);
  70.         if (!error && *tp < stb.st_mtime) {
  71.             *tp = stb.st_mtime;
  72.             error = -1;
  73.         } else {
  74.             error = search_ndbm(db, key, pval);
  75.         }
  76.         (void) dbm_close(db);
  77.         return error;
  78.     }
  79.  
  80.     return errno;
  81. }
  82.  
  83. int ndbm_init(map)
  84. char *map;
  85. {
  86.     DBM *db;
  87.  
  88.     db = dbm_open(map, O_RDONLY, 0);
  89.     if (db) {
  90.         dbm_close(db);
  91.         return 0;
  92.     }
  93.  
  94.     return errno;
  95. }
  96.  
  97. #endif
  98.