1 #ifdef HAVE_CONFIG_H
2 # include <config.h>
3 #endif
4
5 #include <stdlib.h>
6 #include <unistd.h>
7 #ifdef HAVE_SYS_RESOURCE_H
8 #include <sys/time.h>
9 #include <sys/resource.h>
10 #endif
11 #include <sys/types.h>
12 #include <sys/stat.h>
13 #include <fcntl.h>
14
15 #include <Ecore.h>
16 #include <Ecore_File.h>
17
18 #include "efreetd.h"
19 #include "efreetd_cache.h"
20 #include "efreetd_ipc.h"
21
22 int efreetd_log_dom = -1;
23 Eina_Mempool *efreetd_mp_stat = NULL;
24 FILE *efreetd_log_file = NULL;
25
26 void
quit(void)27 quit(void)
28 {
29 ecore_main_loop_quit();
30 }
31
32 int
main(int argc,char * argv[])33 main(int argc, char *argv[])
34 {
35 char path[PATH_MAX + 128], buf[PATH_MAX];
36 FILE *logf;
37 int fd;
38 const char *log_file_dir = NULL;
39 const char *hostname_str = NULL;
40
41 #ifdef HAVE_SYS_RESOURCE_H
42 setpriority(PRIO_PROCESS, 0, 19);
43 #elif _WIN32
44 SetPriorityClass(GetCurrentProcess(), IDLE_PRIORITY_CLASS);
45 #endif
46
47 if (!eina_init()) return 1;
48
49 efreetd_mp_stat = eina_mempool_add("chained_mempool",
50 "struct stat", NULL,
51 sizeof(struct stat), 10);
52 if (!efreetd_mp_stat) return 1;
53
54 if (!ecore_init()) goto ecore_error;
55 ecore_app_args_set(argc, (const char **)argv);
56 if (!ecore_file_init()) goto ecore_file_error;
57 if (!ipc_init()) goto ipc_error;
58 if (!cache_init()) goto cache_error;
59
60 log_file_dir = eina_environment_tmp_get();
61 if (gethostname(buf, sizeof(buf)) < 0)
62 hostname_str = "";
63 else
64 hostname_str = buf;
65 snprintf(path, sizeof(path), "%s/efreetd_%s_XXXXXX.log",
66 log_file_dir, hostname_str);
67 fd = eina_file_mkstemp(path, NULL);
68 if (fd < 0)
69 {
70 ERR("Can't create log file '%s'\b", path);
71 goto tmp_error;
72 }
73 logf = fdopen(fd, "wb");
74 if (!logf) goto tmp_error;
75 eina_log_print_cb_set(eina_log_print_cb_file, logf);
76 efreetd_log_file = logf;
77 efreetd_log_dom = eina_log_domain_register("efreetd", EFREETD_DEFAULT_LOG_COLOR);
78 if (efreetd_log_dom < 0)
79 {
80 EINA_LOG_ERR("Efreet: Could not create a log domain for efreetd.");
81 goto tmp_error;
82 }
83
84 ecore_main_loop_begin();
85
86 eina_mempool_del(efreetd_mp_stat);
87
88 cache_shutdown();
89 ipc_shutdown();
90 ecore_file_shutdown();
91 ecore_shutdown();
92 eina_log_domain_unregister(efreetd_log_dom);
93 efreetd_log_dom = -1;
94 eina_shutdown();
95 return 0;
96
97 tmp_error:
98 cache_shutdown();
99 cache_error:
100 ipc_shutdown();
101 ipc_error:
102 ecore_file_shutdown();
103 ecore_file_error:
104 ecore_shutdown();
105 ecore_error:
106 if (efreetd_log_dom >= 0) eina_log_domain_unregister(efreetd_log_dom);
107 efreetd_log_dom = -1;
108 eina_shutdown();
109 return 1;
110 }
111