6 * Copyright (C) 1987 by the Massachusetts Institute of Technology
8 * Utility functions used by the DCM.
12 static char *rcsid_utils_c = "$Header$";
18 #include <sys/types.h>
21 #include <zephyr/zephyr.h>
29 extern char *strsave();
31 void dcm_com_err_hook(whoami, code, fmt, pvar)
38 fputs(whoami, stderr);
42 fputs(error_message(code), stderr);
45 _doprnt(fmt, pvar, stderr);
57 com_err(whoami, errno, "%s: exiting", s);
59 com_err(whoami, errno, "exiting");
64 void scream(argc, argv, hint)
69 leave("Programmer botch");
78 sprintf(buf, "%d", i);
85 return("/tmp/tkt_dcm");
89 int maybe_lock_update(dir, host, service, exclusive)
90 char *dir, *host, *service;
96 sprintf(lock, "%s/dcm/locks/%s.%s", dir, host, service);
97 if ((fd = open(lock, O_TRUNC | O_CREAT, 0)) < 0)
98 com_err(whoami, errno, ": maybe_lock_update: opening %s", lock);
99 else if (flock(fd, (exclusive ? LOCK_EX : LOCK_SH) | LOCK_NB) != 0) {
100 if (errno != EWOULDBLOCK)
101 com_err(whoami, errno, ": maybe_lock_update: flock");
102 else if (dbg & DBG_VERBOSE)
103 com_err(whoami, 0, "%s already locked\n", lock);
106 } else if (dbg & DBG_VERBOSE)
107 com_err(whoami, 0, "%s now locked\n", lock);