summaryrefslogtreecommitdiff
path: root/p11-kit
diff options
context:
space:
mode:
authorStef Walter <stefw@gnome.org>2013-02-06 22:16:42 +0100
committerStef Walter <stefw@gnome.org>2013-02-20 10:17:54 +0100
commit95ec58961a480c15fe780bbce6d6cd974f478407 (patch)
treeed8044874aec4d1a5a73c5a2dc7da55147fc19c5 /p11-kit
parentc6ebe7eb68e07e4f22c7b7ede14a1e4f04e893b7 (diff)
Only do shared object and DLL initialization in libraries
Don't do library initialization on shared object load when not running in a library. We'll want to plug into this and do different things per library in the future.
Diffstat (limited to 'p11-kit')
-rw-r--r--p11-kit/util.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/p11-kit/util.c b/p11-kit/util.c
index 11a9a22..95190c5 100644
--- a/p11-kit/util.c
+++ b/p11-kit/util.c
@@ -231,3 +231,57 @@ _p11_get_progname_unlocked (void)
return NULL;
return p11_my_progname;
}
+
+#ifdef OS_UNIX
+
+void p11_kit_init (void);
+
+void p11_kit_fini (void);
+
+#ifdef __GNUC__
+__attribute__((constructor))
+#endif
+void
+p11_kit_init (void)
+{
+ p11_library_init_once ();
+}
+
+#ifdef __GNUC__
+__attribute__((destructor))
+#endif
+void
+p11_kit_fini (void)
+{
+ p11_library_uninit ();
+}
+
+#endif /* OS_UNIX */
+
+#ifdef OS_WIN32
+
+BOOL WINAPI
+DllMain (HINSTANCE instance,
+ DWORD reason,
+ LPVOID reserved)
+{
+ LPVOID data;
+
+ switch (reason) {
+ case DLL_PROCESS_ATTACH:
+ p11_library_init ();
+ break;
+ case DLL_THREAD_DETACH:
+ p11_library_thread_cleanup ();
+ break;
+ case DLL_PROCESS_DETACH:
+ p11_library_uninit ();
+ break;
+ default:
+ break;
+ }
+
+ return TRUE;
+}
+
+#endif /* OS_WIN32 */