diff options
Diffstat (limited to 'src/idevice.c')
-rw-r--r-- | src/idevice.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/idevice.c b/src/idevice.c index 4545bfa..6a03c5e 100644 --- a/src/idevice.c +++ b/src/idevice.c | |||
@@ -174,7 +174,23 @@ static void internal_idevice_deinit(void) | |||
174 | static thread_once_t init_once = THREAD_ONCE_INIT; | 174 | static thread_once_t init_once = THREAD_ONCE_INIT; |
175 | static thread_once_t deinit_once = THREAD_ONCE_INIT; | 175 | static thread_once_t deinit_once = THREAD_ONCE_INIT; |
176 | 176 | ||
177 | #ifdef WIN32 | 177 | #ifndef HAVE_ATTRIBUTE_CONSTRUCTOR |
178 | #if defined(__llvm__) || defined(__GNUC__) | ||
179 | #define HAVE_ATTRIBUTE_CONSTRUCTOR | ||
180 | #endif | ||
181 | #endif | ||
182 | |||
183 | #ifdef HAVE_ATTRIBUTE_CONSTRUCTOR | ||
184 | static void __attribute__((constructor)) libimobiledevice_initialize(void) | ||
185 | { | ||
186 | thread_once(&init_once, internal_idevice_init); | ||
187 | } | ||
188 | |||
189 | static void __attribute__((destructor)) libimobiledevice_deinitialize(void) | ||
190 | { | ||
191 | thread_once(&deinit_once, internal_idevice_deinit); | ||
192 | } | ||
193 | #elif defined(WIN32) | ||
178 | BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved) | 194 | BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved) |
179 | { | 195 | { |
180 | switch (dwReason) { | 196 | switch (dwReason) { |
@@ -190,15 +206,7 @@ BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved) | |||
190 | return 1; | 206 | return 1; |
191 | } | 207 | } |
192 | #else | 208 | #else |
193 | static void __attribute__((constructor)) libimobiledevice_initialize(void) | 209 | #warning No compiler support for constructor/destructor attributes, some features might not be available. |
194 | { | ||
195 | thread_once(&init_once, internal_idevice_init); | ||
196 | } | ||
197 | |||
198 | static void __attribute__((destructor)) libimobiledevice_deinitialize(void) | ||
199 | { | ||
200 | thread_once(&deinit_once, internal_idevice_deinit); | ||
201 | } | ||
202 | #endif | 210 | #endif |
203 | 211 | ||
204 | static idevice_event_cb_t event_cb = NULL; | 212 | static idevice_event_cb_t event_cb = NULL; |