#include <getopt.h>
-#include "epoll.h"
#include "threads.h"
+#include "policy.h"
+
+#define DAEMON_NAME "postlicyd"
/* administrivia {{{ */
module_init(main_initialize);
module_exit(main_shutdown);
-/* }}} */
-
-void *job_run(int fd, void *data)
+void usage(void)
{
- close(fd);
- return NULL;
+ fputs("usage: "DAEMON_NAME" [options] config\n"
+ "\n"
+ "Options:\n"
+ " -p <pidfile> file to write our pid to\n"
+ , stderr);
}
+/* }}} */
+
static int main_loop(void)
{
int exitcode = EXIT_SUCCESS;
continue;
}
- thread_launch(job_run, fd, NULL);
+ thread_launch(policy_run, fd, NULL);
threads_join();
}
int main(int argc, char *argv[])
{
const char *pidfile = NULL;
- FILE *f = NULL;
int res;
for (int c = 0; (c = getopt(argc, argv, "h" "p:")) >= 0; ) {
pidfile = optarg;
break;
default:
- //usage();
+ usage();
return EXIT_FAILURE;
}
}
- if (pidfile) {
- f = fopen(pidfile, "w");
- if (!f) {
- syslog(LOG_CRIT, "unable to write pidfile %s", pidfile);
- }
- fprintf(f, "%d\n", getpid());
- fflush(f);
+ if (argc - optind != 1) {
+ usage();
+ return EXIT_FAILURE;
+ }
+
+ if (pidfile_open(pidfile) < 0) {
+ syslog(LOG_CRIT, "unable to write pidfile %s", pidfile);
+ return EXIT_FAILURE;
}
if (daemon_detach() < 0) {
return EXIT_FAILURE;
}
- if (f) {
- rewind(f);
- ftruncate(fileno(f), 0);
- fprintf(f, "%d\n", getpid());
- fflush(f);
- }
+ pidfile_refresh();
res = main_loop();
- if (f) {
- rewind(f);
- ftruncate(fileno(f), 0);
- fclose(f);
- f = NULL;
- }
syslog(LOG_INFO, "Stopping...");
return res;
}