1 #include "rktio.h"
2 #include "rktio_private.h"
3 #include <stdlib.h>
4 #include <string.h>
5 #ifdef OS_X
6 # include <sys/types.h>
7 # include <sys/sysctl.h>
8 #endif
9
rktio_init(void)10 rktio_t *rktio_init(void)
11 {
12 rktio_t *rktio;
13
14 rktio = malloc(sizeof(rktio_t));
15 memset(rktio, 0, sizeof(rktio_t));
16
17 rktio_alloc_global_poll_set(rktio);
18 if (!rktio_initialize_signal(rktio)) {
19 rktio_destroy(rktio);
20 return NULL;
21 }
22
23 if (!rktio_process_init(rktio)) {
24 rktio_destroy(rktio);
25 return NULL;
26 }
27
28 #ifdef RKTIO_SYSTEM_WINDOWS
29 if (!rktio_winsock_init(rktio)) {
30 rktio_destroy(rktio);
31 return NULL;
32 }
33 #endif
34
35 rktio_init_time(rktio);
36 rktio_init_wide(rktio);
37 rktio_init_cpu(rktio);
38
39 rktio_syslog_init(rktio);
40
41 rktio_convert_init(rktio);
42
43 #ifdef OS_X
44 {
45 int a[2], i, k = 0;
46 size_t len;
47 char *vers;
48
49 a[0] = CTL_KERN;
50 a[1] = KERN_OSRELEASE;
51 sysctl(a, 2, NULL, &len, NULL, 0);
52 vers = malloc(len * sizeof(char));
53 sysctl(a, 2, vers, &len, NULL, 0);
54
55 for (i = 0; (i < len) && (vers[i] != '.'); i++)
56 k = (k * 10) + vers[i] - '0';
57
58 rktio->macos_kernel_version = k;
59
60 free(vers);
61 }
62 #endif
63
64 return rktio;
65 }
66
rktio_destroy(rktio_t * rktio)67 void rktio_destroy(rktio_t *rktio)
68 {
69 rktio_stop_background(rktio);
70 rktio_syslog_clean(rktio);
71 rktio_convert_deinit(rktio);
72 rktio_dll_clean(rktio);
73 rktio_error_clean(rktio);
74 rktio_process_deinit(rktio);
75 rktio_free_ghbn(rktio);
76 rktio_free_global_poll_set(rktio);
77 rktio_stop_fs_change(rktio);
78 rktio_free_signal(rktio);
79 #ifdef RKTIO_SYSTEM_WINDOWS
80 rktio_winsock_done(rktio);
81 #endif
82 free(rktio);
83 }
84
85 /* Useful on Windows to make sure everyone is using the same malloc()
86 and free(): */
rktio_free(void * p)87 void rktio_free(void *p)
88 {
89 free(p);
90 }
91