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