append given basedir argument with '/' if not given
[rxpd] / src / rxpd_base.c
index 60566f0..1f9da8f 100644 (file)
@@ -24,7 +24,7 @@
 static struct rxpd_base global_base;
 
 struct rxpd_base*
-rxpd_init (struct event_base* eventbase)
+rxpd_init (void)
 {
   if (global_base.basedir)
     return NULL;
@@ -36,12 +36,7 @@ rxpd_init (struct event_base* eventbase)
   global_base.regflags = 0;
   global_base.policy = NULL;
 
-  if (!eventbase)
-    rxpd_die ("no eventbase provided");
-
-  global_base.eventbase = eventbase;
-
-  psplay_init_root (&global_base.files, rxpd_file_cmp, rxpd_file_delete);
+  psplay_init_root (&global_base.files, rxpd_file_cmp, (psplay_delete_t)rxpd_file_delete);
   llist_init (&global_base.sockets);
 
   rxpd_log (&global_base, LOG_DEBUG, PACKAGE_NAME" initialized\n");
@@ -78,6 +73,18 @@ rxpd_log (struct rxpd_base* self, int level, const char* fmt, ...)
   va_end (ap);
 }
 
+void
+rxpd_fail (struct rxpd_base* self, const char* fmt, ...)
+{
+  va_list ap;
+  va_start (ap, fmt);
+  if (!self || self->daemonize)
+    vsyslog (LOG_ALERT, fmt, ap);
+  vfprintf (stderr, fmt, ap);
+  va_end (ap);
+  exit (EXIT_FAILURE);
+}
+
 void
 rxpd_die (const char* fmt, ...)
 {
@@ -109,3 +116,23 @@ rxpd_strdup (const char* str)
   return r;
 }
 
+struct rxpd_base*
+rxpd_set_basedir (struct rxpd_base* self, const char* basedir)
+{
+  if (self && !self->basedir)
+    {
+      size_t sz = strlen (basedir);
+      if (basedir [sz-1] == '/')
+        {
+          self->basedir = rxpd_malloc (sz + 1);
+          strcpy (self->basedir, basedir);
+        }
+      else
+        {
+          self->basedir = rxpd_malloc (sz + 2);
+          strcpy (self->basedir, basedir);
+          self->basedir [sz] = '/';
+        }
+    }
+  return self;
+}