commit - d71b4c26e7f272397ef261a0416a6eedcb65da11
commit + dded54032feab793f6531ee8565f46c56a182b36
blob - 5695726c77a6a9a2fb8ce8a473e32e9d6b5b7ce5
blob + 00870432ddcd485aa2c6b2a1dde1ab65afbcbc3a
--- msearchd/Makefile
+++ msearchd/Makefile
include ../config.mk
PROG = msearchd
-SRCS = msearchd.c fcgi.c server.c
+SRCS = msearchd.c fcgi.c log.c server.c
MAN = msearchd.8
OBJS = ${SRCS:.c=.o} ${COMPATS:.c=.o}
# -- maintainer targets --
-DISTFILES = Makefile configure ${SRCS} msearchd.h msearchd.8 schema.sql
+DISTFILES = Makefile configure ${SRCS} log.h msearchd.h \
+ msearchd.8 schema.sql
dist:
mkdir -p ${DESTDIR}/
blob - c96d03f9df0062274eb70d38ab16e54190344639
blob + e7f7f6aa631ddf3a63fc5cc483f120105416002c
--- msearchd/fcgi.c
+++ msearchd/fcgi.c
#include <string.h>
#include <unistd.h>
+#include "log.h"
#include "msearchd.h"
#define MIN(a, b) ((a) < (b) ? (a) : (b))
blob - /dev/null
blob + d153cd62d8e6349df4a36cc0e5d45c5621970200 (mode 644)
--- /dev/null
+++ msearchd/log.c
+/*
+ * This is free and unencumbered software released into the public domain.
+ *
+ * Anyone is free to copy, modify, publish, use, compile, sell, or
+ * distribute this software, either in source code form or as a compiled
+ * binary, for any purpose, commercial or non-commercial, and by any
+ * means.
+ */
+
+#include <err.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <time.h>
+
+#include "log.h"
+
+__dead void log_syslog_fatal(int, const char *, ...);
+__dead void log_syslog_fatalx(int, const char *, ...);
+void log_syslog_warn(const char *, ...);
+void log_syslog_warnx(const char *, ...);
+void log_syslog_info(const char *, ...);
+void log_syslog_debug(const char *, ...);
+
+const struct logger syslogger = {
+ .fatal = &log_syslog_fatal,
+ .fatalx = &log_syslog_fatalx,
+ .warn = &log_syslog_warn,
+ .warnx = &log_syslog_warnx,
+ .info = &log_syslog_info,
+ .debug = &log_syslog_debug,
+};
+
+const struct logger dbglogger = {
+ .fatal = &err,
+ .fatalx = &errx,
+ .warn = &warn,
+ .warnx = &warnx,
+ .info = &warnx,
+ .debug = &warnx,
+};
+
+const struct logger *logger = &dbglogger;
+
+static char logbuf[4096];
+static int debug;
+static int verbose;
+
+void
+log_init(int n_debug, int facility)
+{
+ debug = n_debug;
+ verbose = n_debug;
+
+ tzset();
+ if (debug)
+ setvbuf(stderr, logbuf, _IOLBF, sizeof(logbuf));
+ else {
+ openlog(getprogname(), LOG_PID | LOG_NDELAY, facility);
+ logger = &syslogger;
+ }
+}
+
+void
+log_setverbose(int v)
+{
+ verbose = v;
+}
+
+__dead void
+log_syslog_fatal(int eval, const char *fmt, ...)
+{
+ static char s[BUFSIZ];
+ va_list ap;
+ int r, save_errno;
+
+ save_errno = errno;
+
+ va_start(ap, fmt);
+ r = vsnprintf(s, sizeof(s), fmt, ap);
+ va_end(ap);
+
+ errno = save_errno;
+
+ if (r > 0 && (size_t)r <= sizeof(s))
+ syslog(LOG_DAEMON|LOG_CRIT, "%s: %s", s, strerror(errno));
+
+ exit(eval);
+}
+
+__dead void
+log_syslog_fatalx(int eval, const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ vsyslog(LOG_DAEMON|LOG_CRIT, fmt, ap);
+ va_end(ap);
+
+ exit(eval);
+}
+
+void
+log_syslog_warn(const char *fmt, ...)
+{
+ static char s[BUFSIZ];
+ va_list ap;
+ int r, save_errno;
+
+ save_errno = errno;
+
+ va_start(ap, fmt);
+ r = vsnprintf(s, sizeof(s), fmt, ap);
+ va_end(ap);
+
+ errno = save_errno;
+
+ if (r > 0 && (size_t)r < sizeof(s))
+ syslog(LOG_DAEMON|LOG_ERR, "%s: %s", s, strerror(errno));
+
+ errno = save_errno;
+}
+
+void
+log_syslog_warnx(const char *fmt, ...)
+{
+ va_list ap;
+ int save_errno;
+
+ save_errno = errno;
+ va_start(ap, fmt);
+ vsyslog(LOG_DAEMON|LOG_ERR, fmt, ap);
+ va_end(ap);
+ errno = save_errno;
+}
+
+void
+log_syslog_info(const char *fmt, ...)
+{
+ va_list ap;
+ int save_errno;
+
+ if (verbose < 1)
+ return;
+
+ save_errno = errno;
+ va_start(ap, fmt);
+ vsyslog(LOG_DAEMON|LOG_INFO, fmt, ap);
+ va_end(ap);
+ errno = save_errno;
+}
+
+void
+log_syslog_debug(const char *fmt, ...)
+{
+ va_list ap;
+ int save_errno;
+
+ if (verbose < 2)
+ return;
+
+ save_errno = errno;
+ va_start(ap, fmt);
+ vsyslog(LOG_DAEMON|LOG_DEBUG, fmt, ap);
+ va_end(ap);
+ errno = save_errno;
+}
blob - 9ee7a8f3f1d361a0be1c5776f5ebae5f4d567045
blob + 896cf77febcc34d64f88e1c7441efa5e2f1e2976
--- msearchd/msearchd.c
+++ msearchd/msearchd.c
#include <syslog.h>
#include <unistd.h>
+#include "log.h"
#include "msearchd.h"
#ifndef MSEARCHD_DB
const char *tmpl_search;
const char *tmpl_search_header;
const char *tmpl_foot;
-
-__dead void srch_syslog_fatal(int, const char *, ...);
-__dead void srch_syslog_fatalx(int, const char *, ...);
-void srch_syslog_warn(const char *, ...);
-void srch_syslog_warnx(const char *, ...);
-void srch_syslog_info(const char *, ...);
-void srch_syslog_debug(const char *, ...);
-
-const struct logger syslogger = {
- .fatal = &srch_syslog_fatal,
- .fatalx = &srch_syslog_fatalx,
- .warn = &srch_syslog_warn,
- .warnx = &srch_syslog_warnx,
- .info = &srch_syslog_info,
- .debug = &srch_syslog_debug,
-};
-const struct logger dbglogger = {
- .fatal = &err,
- .fatalx = &errx,
- .warn = &warn,
- .warnx = &warnx,
- .info = &warnx,
- .debug = &warnx,
-};
-
-const struct logger *logger = &dbglogger;
-
static void
sighdlr(int sig)
{
if (root == NULL)
root = pw->pw_dir;
- if (!debug)
- logger = &syslogger;
+ log_init(debug, LOG_DAEMON);
if (!debug && !server && daemon(1, 0) == -1)
fatal("daemon");
}
return (1);
-}
-
-__dead void
-srch_syslog_fatal(int eval, const char *fmt, ...)
-{
- static char s[BUFSIZ];
- va_list ap;
- int r, save_errno;
-
- save_errno = errno;
-
- va_start(ap, fmt);
- r = vsnprintf(s, sizeof(s), fmt, ap);
- va_end(ap);
-
- errno = save_errno;
-
- if (r > 0 && (size_t)r <= sizeof(s))
- syslog(LOG_DAEMON|LOG_CRIT, "%s: %s", s, strerror(errno));
-
- exit(eval);
-}
-
-__dead void
-srch_syslog_fatalx(int eval, const char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- vsyslog(LOG_DAEMON|LOG_CRIT, fmt, ap);
- va_end(ap);
-
- exit(eval);
-}
-
-void
-srch_syslog_warn(const char *fmt, ...)
-{
- static char s[BUFSIZ];
- va_list ap;
- int r, save_errno;
-
- save_errno = errno;
-
- va_start(ap, fmt);
- r = vsnprintf(s, sizeof(s), fmt, ap);
- va_end(ap);
-
- errno = save_errno;
-
- if (r > 0 && (size_t)r < sizeof(s))
- syslog(LOG_DAEMON|LOG_ERR, "%s: %s", s, strerror(errno));
-
- errno = save_errno;
}
-
-void
-srch_syslog_warnx(const char *fmt, ...)
-{
- va_list ap;
- int save_errno;
-
- save_errno = errno;
- va_start(ap, fmt);
- vsyslog(LOG_DAEMON|LOG_ERR, fmt, ap);
- va_end(ap);
- errno = save_errno;
-}
-
-void
-srch_syslog_info(const char *fmt, ...)
-{
- va_list ap;
- int save_errno;
-
- if (verbose < 1)
- return;
-
- save_errno = errno;
- va_start(ap, fmt);
- vsyslog(LOG_DAEMON|LOG_INFO, fmt, ap);
- va_end(ap);
- errno = save_errno;
-}
-
-void
-srch_syslog_debug(const char *fmt, ...)
-{
- va_list ap;
- int save_errno;
-
- if (verbose < 2)
- return;
-
- save_errno = errno;
- va_start(ap, fmt);
- vsyslog(LOG_DAEMON|LOG_DEBUG, fmt, ap);
- va_end(ap);
- errno = save_errno;
-}
blob - /dev/null
blob + 4e26c5293dfc7e06848e76380e90711193e81e52 (mode 644)
--- /dev/null
+++ msearchd/log.h
+/*
+ * This is free and unencumbered software released into the public domain.
+ *
+ * Anyone is free to copy, modify, publish, use, compile, sell, or
+ * distribute this software, either in source code form or as a compiled
+ * binary, for any purpose, commercial or non-commercial, and by any
+ * means.
+ */
+
+#define LOG_ATTR_PRINTF(A, B) __attribute__((__format__ (printf, A, B)))
+struct logger {
+ __dead void (*fatal)(int, const char *, ...) LOG_ATTR_PRINTF(2, 3);
+ __dead void (*fatalx)(int, const char *, ...) LOG_ATTR_PRINTF(2, 3);
+ void (*warn)(const char *, ...) LOG_ATTR_PRINTF(1, 2);
+ void (*warnx)(const char *, ...) LOG_ATTR_PRINTF(1, 2);
+ void (*info)(const char *, ...) LOG_ATTR_PRINTF(1, 2);
+ void (*debug)(const char *, ...) LOG_ATTR_PRINTF(1, 2);
+};
+#undef LOG_ATTR_PRINTF
+
+extern const struct logger *logger, syslogger, dbglogger;
+
+#define fatal(...) logger->fatal(1, __VA_ARGS__)
+#define fatalx(...) logger->fatalx(1, __VA_ARGS__)
+#define log_warn(...) logger->warn(__VA_ARGS__)
+#define log_warnx(...) logger->warnx(__VA_ARGS__)
+#define log_info(...) logger->info(__VA_ARGS__)
+#define log_debug(...) logger->debug(__VA_ARGS__)
+
+void log_init(int, int);
+void log_setverbose(int);
blob - 2efdad37df16fbfd2cedee23b3be99d95a3618d6
blob + 7455aa62012e70a41af8a7c487521f29796294ac
--- msearchd/msearchd.h
+++ msearchd/msearchd.h
METHOD_POST,
};
-#define ATTR_PRINTF(A, B) __attribute__((__format__ (printf, A, B)))
-
-struct logger {
- __dead void (*fatal)(int, const char *, ...) ATTR_PRINTF(2, 3);
- __dead void (*fatalx)(int, const char *, ...) ATTR_PRINTF(2, 3);
- void (*warn)(const char *, ...) ATTR_PRINTF(1, 2);
- void (*warnx)(const char *, ...) ATTR_PRINTF(1, 2);
- void (*info)(const char *, ...) ATTR_PRINTF(1, 2);
- void (*debug)(const char *, ...) ATTR_PRINTF(1, 2);
-};
-
-extern const struct logger *logger;
-#define fatal(...) logger->fatal(1, __VA_ARGS__)
-#define fatalx(...) logger->fatalx(1, __VA_ARGS__)
-#define log_warn(...) logger->warn(__VA_ARGS__)
-#define log_warnx(...) logger->warnx(__VA_ARGS__)
-#define log_info(...) logger->info(__VA_ARGS__)
-#define log_debug(...) logger->debug(__VA_ARGS__)
-
#ifdef DEBUG
#define DPRINTF log_debug
#else
blob - 77fe2630969c6a22b9d8da5c452301249272cfe7
blob + 38deceb07596bd382c91f42d452e16f555f190ce
--- msearchd/server.c
+++ msearchd/server.c
#include <sqlite3.h>
+#include "log.h"
#include "msearchd.h"
char dbpath[PATH_MAX];