55 typedef struct MKMAP_SDBM {
63 static void mkmap_sdbm_after_close(
MKMAP *mp)
65 MKMAP_SDBM *mkmap = (MKMAP_SDBM *) mp;
67 if (mkmap->lock_fd >= 0 && close(mkmap->lock_fd) < 0)
68 msg_warn(
"close %s: %m", mkmap->lock_file);
76 MKMAP_SDBM *mkmap = (MKMAP_SDBM *)
mymalloc(
sizeof(*mkmap));
83 mkmap->lock_file =
concatenate(path,
".dir", (
char *) 0);
85 mkmap->mkmap.after_open = 0;
86 mkmap->mkmap.after_close = mkmap_sdbm_after_close;
93 if ((mkmap->lock_fd = open(mkmap->lock_file, O_CREAT | O_RDWR, 0644)) < 0)
94 msg_fatal(
"open %s: %m", mkmap->lock_file);
97 if ((pag_fd = open(pag_file, O_CREAT | O_RDWR, 0644)) < 0)
108 msg_fatal(
"lock %s: %m", mkmap->lock_file);
110 return (&mkmap->mkmap);
MKMAP * mkmap_sdbm_open(const char *)
#define MYFLOCK_OP_EXCLUSIVE
void msg_warn(const char *fmt,...)
int myflock(int fd, int lock_style, int operation)
NORETURN msg_fatal(const char *fmt,...)
char * concatenate(const char *arg0,...)
DICT * dict_sdbm_open(const char *, int, int)
void * mymalloc(ssize_t len)