Use even more magic.
authorPierre Habouzit <madcoder@debian.org>
Thu, 29 Nov 2007 10:17:45 +0000 (11:17 +0100)
committerPierre Habouzit <madcoder@debian.org>
Thu, 29 Nov 2007 10:17:45 +0000 (11:17 +0100)
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
common.c
common.h
main-postlicyd.c
main-srsd.c

index 80746ae..7553779 100644 (file)
--- a/common.c
+++ b/common.c
@@ -206,7 +206,15 @@ int drop_privileges(const char *user, const char *group)
 
 extern initcall_t __madinit[], __madexit[];
 
-void common_initialize(void)
+static void common_shutdown(void)
+{
+    for (int i = -1; __madexit[i]; i--) {
+        (*__madexit[i])();
+    }
+}
+
+static void __attribute__((__constructor__,__used__))
+common_initialize(void)
 {
     if (atexit(common_shutdown)) {
         fputs("Cannot hook my atexit function, quitting !\n", stderr);
@@ -220,9 +228,3 @@ void common_initialize(void)
     }
 }
 
-void common_shutdown(void)
-{
-    for (int i = -1; __madexit[i]; i--) {
-        (*__madexit[i])();
-    }
-}
index 449ead5..801457c 100644 (file)
--- a/common.h
+++ b/common.h
@@ -72,8 +72,6 @@ extern sig_atomic_t sigint;
 extern sig_atomic_t sighup;
 
 void common_sighandler(int sig);
-void common_initialize(void);
-void common_shutdown(void);
 
 /* daemon.c */
 int tcp_listen_nonblock(const struct sockaddr *addr, socklen_t len);
index 70d9d69..01eb9e6 100644 (file)
@@ -98,7 +98,6 @@ int main(int argc, char *argv[])
     FILE *f = NULL;
     int res;
 
-    common_initialize();
     for (int c = 0; (c = getopt(argc, argv, "h" "p:")) >= 0; ) {
         switch (c) {
           case 'p':
index 57835cd..8d703af 100644 (file)
@@ -373,8 +373,6 @@ int main(int argc, char *argv[])
     int res;
     srs_t *srs;
 
-    common_initialize();
-
     for (int c = 0; (c = getopt(argc, argv, "hu" "e:d:p:")) >= 0; ) {
         switch (c) {
           case 'e':