Tizen 2.1 release
[platform/core/uifw/e17.git] / src / bin / e_prefix.c
1 #include "e.h"
2
3 static Eina_Prefix *pfx = NULL;
4
5 static const char *_prefix_path_data = NULL;
6 static unsigned int _prefix_path_data_len = 0;
7
8 /* externally accessible functions */
9 EAPI int
10 e_prefix_determine(char *argv0)
11 {
12    if (pfx) return 1;
13
14    pfx = eina_prefix_new(argv0, e_prefix_determine,
15                          "E", "enlightenment", "AUTHORS",
16                          PACKAGE_BIN_DIR,
17                          PACKAGE_LIB_DIR,
18                          PACKAGE_DATA_DIR,
19                          LOCALE_DIR);
20    if (!pfx) return 0;
21
22    _prefix_path_data = eina_prefix_data_get(pfx);
23    _prefix_path_data_len= strlen(_prefix_path_data);
24 #ifdef E_LOGGING
25    INF("=================================");
26    INF("Enlightenment relocation handling");
27    INF("=================================");
28    INF("PREFIX:  %s", eina_prefix_get(pfx));
29    INF("BINDIR:  %s", eina_prefix_bin_get(pfx));
30    INF("LIBDIR:  %s", eina_prefix_lib_get(pfx));
31    INF("DATADIR: %s", eina_prefix_data_get(pfx));
32    INF("LOCALE:  %s", eina_prefix_locale_get(pfx));
33    INF("=================================");
34 #else
35    printf("=================================\n");
36    printf("Enlightenment relocation handling\n");
37    printf("=================================\n");
38    printf("PREFIX:  %s\n", eina_prefix_get(pfx));
39    printf("BINDIR:  %s\n", eina_prefix_bin_get(pfx));
40    printf("LIBDIR:  %s\n", eina_prefix_lib_get(pfx));
41    printf("DATADIR: %s\n", eina_prefix_data_get(pfx));
42    printf("LOCALE:  %s\n", eina_prefix_locale_get(pfx));
43    printf("=================================\n");
44 #endif
45    e_util_env_set("E_PREFIX", eina_prefix_get(pfx));
46    e_util_env_set("E_BIN_DIR", eina_prefix_bin_get(pfx));
47    e_util_env_set("E_LIB_DIR", eina_prefix_lib_get(pfx));
48    e_util_env_set("E_DATA_DIR", eina_prefix_data_get(pfx));
49    e_util_env_set("E_LOCALE_DIR", eina_prefix_locale_get(pfx));
50    return 1;
51 }
52
53 EINTERN void
54 e_prefix_shutdown(void)
55 {
56    if (!pfx) return;
57    _prefix_path_data = NULL;
58    _prefix_path_data_len = 0;
59    eina_prefix_free(pfx);
60    pfx = NULL;
61 }
62
63 EAPI void
64 e_prefix_fallback(void)
65 {
66 }
67
68 EAPI const char *
69 e_prefix_get(void)
70 {
71    return eina_prefix_get(pfx);
72 }
73
74 EAPI const char *
75 e_prefix_locale_get(void)
76 {
77    return eina_prefix_locale_get(pfx);
78 }
79
80 EAPI const char *
81 e_prefix_bin_get(void)
82 {
83    return eina_prefix_bin_get(pfx);
84 }
85
86 EAPI const char *
87 e_prefix_data_get(void)
88 {
89    return eina_prefix_data_get(pfx);
90 }
91
92 EAPI const char *
93 e_prefix_lib_get(void)
94 {
95    return eina_prefix_lib_get(pfx);
96 }
97
98 EAPI size_t
99 e_prefix_data_concat_len(char *dst, size_t size, const char *path, size_t path_len)
100 {
101    return eina_str_join_len(dst, size, '/', _prefix_path_data, _prefix_path_data_len, path, path_len);
102 }
103
104 EAPI size_t
105 e_prefix_data_concat(char *dst, size_t size, const char *path)
106 {
107    return e_prefix_data_concat_len(dst, size, path, strlen(path));
108 }
109
110 EAPI size_t
111 e_prefix_data_snprintf(char *dst, size_t size, const char *fmt, ...)
112 {
113    size_t off, ret;
114    va_list ap;
115
116    va_start(ap, fmt);
117
118    off = _prefix_path_data_len + 1;
119    if (size < _prefix_path_data_len + 2)
120      {
121         if (size > 1)
122           {
123              memcpy(dst, _prefix_path_data, size - 1);
124              dst[size - 1] = '\0';
125           }
126         ret = off + vsnprintf(dst + off, size - off, fmt, ap);
127         va_end(ap);
128         return ret;
129      }
130
131    memcpy(dst, _prefix_path_data, _prefix_path_data_len);
132    dst[_prefix_path_data_len] = '/';
133
134    ret = off + vsnprintf(dst + off, size - off, fmt, ap);
135    va_end(ap);
136    return ret;
137 }