CUBRID Engine  latest
broker_filename.c
Go to the documentation of this file.
1 /*
2  * Copyright 2008 Search Solution Corporation
3  * Copyright 2016 CUBRID Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 
20 /*
21  * broker_filename.c -
22  */
23 
24 #ident "$Id$"
25 
26 #include "config.h"
27 
28 #include <stdio.h>
29 #include <stdlib.h>
30 #include <string.h>
31 
32 #if defined(WINDOWS)
33 #include <direct.h>
34 #else
35 #include <unistd.h>
36 #endif
37 
38 #include "broker_admin_pub.h"
39 #include "broker_filename.h"
40 #include "environment_variable.h"
41 #include "error_manager.h"
42 #include "system_parameter.h"
43 
44 static char cubrid_Dir[BROKER_PATH_MAX] = "";
45 
46 #define NUM_CUBRID_FILE MAX_CUBRID_FILE
49  {FID_UV_ERR_MSG, ""},
50  {FID_V3_OUTFILE_DIR, ""},
51  {FID_CAS_TMPGLO_DIR, ""},
52  {FID_CAS_TMP_DIR, ""},
53  {FID_VAR_DIR, ""},
54  {FID_SOCK_DIR, ""},
55  {FID_AS_PID_DIR, ""},
56  {FID_ADMIND_PID, ""},
57  {FID_SQL_LOG_DIR, ""},
58  {FID_SQL_LOG2_DIR, ""},
59  {FID_ADMIND_LOG, ""},
60  {FID_MONITORD_LOG, ""},
61  {FID_ER_HTML, ""},
62  {FID_CUBRID_ERR_DIR, ""},
66  {FID_SLOW_LOG_DIR, ""},
67  {FID_SHARD_DBINFO, ""},
69 };
70 
71 void
73 {
75  const char *p;
76 
77  p = getenv_cubrid_broker ();
78  if (p)
79  {
80  strcpy (cubrid_Dir, p);
81  return;
82  }
83  getcwd (dirname, sizeof (dirname));
84  if (snprintf (cubrid_Dir, sizeof (cubrid_Dir) - 1, "%s/..", dirname) < 0)
85  {
86  assert (false);
87  cubrid_Dir[0] = '\0';
88  }
89 }
90 
91 char *
93 {
94  if (cubrid_Dir[0] == '\0')
95  {
96  set_cubrid_home ();
97  }
98  return cubrid_Dir;
99 }
100 
101 
102 void
104 {
105  size_t value_len;
106  bool repath = true;
107  int ret = 0;
108 
109  if (value == NULL)
110  {
111  return;
112  }
113 
114  if (IS_ABS_PATH (value))
115  {
116  repath = false;
117  }
118 
119  switch (fid)
120  {
121  case FID_V3_OUTFILE_DIR:
122  case FID_CAS_TMPGLO_DIR:
123  case FID_CAS_TMP_DIR:
124  case FID_VAR_DIR:
125  case FID_SOCK_DIR:
126  case FID_AS_PID_DIR:
127  case FID_SQL_LOG_DIR:
128  case FID_SQL_LOG2_DIR:
129  case FID_SLOW_LOG_DIR:
130  case FID_CUBRID_ERR_DIR:
131  value_len = strlen (value);
132  if (value[value_len] == '/' || value[value_len] == '\\')
133  {
134  if (repath)
135  {
136  ret = snprintf (cubrid_file[fid].file_name, BROKER_PATH_MAX, "%s/%s", get_cubrid_home (), value);
137  }
138  else
139  {
140  ret = snprintf (cubrid_file[fid].file_name, BROKER_PATH_MAX, value);
141  }
142  }
143  else
144  {
145  if (repath)
146  {
147  ret = snprintf (cubrid_file[fid].file_name, BROKER_PATH_MAX, "%s/%s/", get_cubrid_home (), value);
148  }
149  else
150  {
151  ret = snprintf (cubrid_file[fid].file_name, BROKER_PATH_MAX, "%s/", value);
152  }
153  }
154  break;
155 
157 #if !defined(CAS_FOR_ORACLE) && !defined(CAS_FOR_MYSQL)
158  if (repath)
159  {
160  envvar_confdir_file (cubrid_file[fid].file_name, BROKER_PATH_MAX, value);
161  }
162  else
163  {
164  ret = snprintf (cubrid_file[fid].file_name, BROKER_PATH_MAX, "%s", value);
165  }
166 #else
167  ret = snprintf (cubrid_file[fid].file_name, BROKER_PATH_MAX, "%s", value);
168 #endif
169  break;
170  default:
171  if (repath)
172  {
173  ret = snprintf (cubrid_file[fid].file_name, BROKER_PATH_MAX, "%s/%s", get_cubrid_home (), value);
174  }
175  else
176  {
177  ret = snprintf (cubrid_file[fid].file_name, BROKER_PATH_MAX, value);
178  }
179  break;
180  }
181  if (ret < 0)
182  {
183  assert (false);
184  cubrid_file[fid].file_name[0] = '\0';
185  }
186 }
187 
188 char *
190 {
191  return cubrid_file[fid].file_name;
192 }
193 
194 char *
195 get_cubrid_file (T_CUBRID_FILE_ID fid, char *buf, size_t len)
196 {
197  buf[0] = '\0';
198 
199  if (cubrid_Dir[0] == '\0')
200  {
201  set_cubrid_home ();
202  }
203 
204  if (strlen (cubrid_file[fid].file_name) > 0)
205  {
206  if (snprintf (buf, len, "%s", cubrid_file[fid].file_name) < 0)
207  {
208  assert (false);
209  buf[0] = '\0';
210  }
211  return buf;
212  }
213 
214  switch (fid)
215  {
217  envvar_confdir_file (buf, len, "cubrid_broker.conf");
218  break;
219  case FID_UV_ERR_MSG:
220  envvar_confdir_file (buf, len, "uv_er.msg");
221  break;
222  case FID_V3_OUTFILE_DIR:
223  envvar_tmpdir_file (buf, len, "");
224  break;
225  case FID_CAS_TMPGLO_DIR:
226  envvar_tmpdir_file (buf, len, "");
227  break;
228  case FID_CAS_TMP_DIR:
229  envvar_tmpdir_file (buf, len, "");
230  break;
231  case FID_VAR_DIR:
232  envvar_vardir_file (buf, len, "");
233  break;
234  case FID_SOCK_DIR:
235  {
236  const char *cubrid_tmp = envvar_get ("TMP");
237  if (cubrid_tmp == NULL || cubrid_tmp[0] == '\0')
238  {
239  envvar_vardir_file (buf, len, "CUBRID_SOCK/");
240  }
241  else
242  {
243  if (snprintf (buf, len, "%s/", cubrid_tmp) < 0)
244  {
245  assert (false);
246  buf[0] = '\0';
247  }
248  }
249  }
250  break;
251  case FID_AS_PID_DIR:
252  envvar_vardir_file (buf, len, "as_pid/");
253  break;
254  case FID_ADMIND_PID:
255  envvar_vardir_file (buf, len, "as_pid/casd.pid");
256  break;
257  case FID_SQL_LOG_DIR:
258  envvar_logdir_file (buf, len, "broker/sql_log/");
259  break;
260  case FID_SQL_LOG2_DIR:
261  envvar_logdir_file (buf, len, "broker/sql_log/query/");
262  break;
263  case FID_SLOW_LOG_DIR:
264  envvar_logdir_file (buf, len, "broker/sql_log/");
265  break;
266  case FID_ADMIND_LOG:
267  envvar_logdir_file (buf, len, "broker/sql_log/cas_admind.log");
268  break;
269  case FID_MONITORD_LOG:
270  envvar_logdir_file (buf, len, "broker/sql_log/cas_monitord.log");
271  break;
272  case FID_ER_HTML:
273  envvar_confdir_file (buf, len, "uw_er.html");
274  break;
275  case FID_CUBRID_ERR_DIR:
276  envvar_logdir_file (buf, len, "broker/error_log/");
277  break;
279  envvar_confdir_file (buf, len, "databases_oracle.txt");
280  break;
282  envvar_confdir_file (buf, len, "databases_mysql.txt");
283  break;
284  case FID_SHARD_DBINFO:
285  envvar_confdir_file (buf, BROKER_PATH_MAX, "shard_databases.txt");
286  if (snprintf (cubrid_file[fid].file_name, BROKER_PATH_MAX, buf) < 0)
287  {
288  assert (false);
289  buf[0] = '\0';
290  }
291  break;
293  envvar_logdir_file (buf, BROKER_PATH_MAX, "broker/proxy_log/");
294  if (snprintf (cubrid_file[fid].file_name, BROKER_PATH_MAX, buf) < 0)
295  {
296  assert (false);
297  buf[0] = '\0';
298  }
299  break;
300  default:
301  break;
302  }
303 
304  if (snprintf (cubrid_file[fid].file_name, BROKER_PATH_MAX, "%s", buf) < 0)
305  {
306  assert (false);
307  buf[0] = '\0';
308  }
309  return buf;
310 }
311 
312 const char *
314 {
315  const char *p;
316 
317  p = envvar_root ();
318 
319  return p;
320 }
char * envvar_logdir_file(char *path, size_t size, const char *filename)
const char * envvar_root(void)
char * dirname(const char *path)
Definition: porting.c:1066
#define BROKER_PATH_MAX
Definition: broker_config.h:91
char file_name[BROKER_PATH_MAX]
char * get_cubrid_file(T_CUBRID_FILE_ID fid, char *buf, size_t len)
#define assert(x)
static char cubrid_Dir[BROKER_PATH_MAX]
#define NUM_CUBRID_FILE
#define NULL
Definition: freelistheap.h:34
void set_cubrid_home()
const char * envvar_get(const char *name)
char * envvar_vardir_file(char *path, size_t size, const char *filename)
static T_CUBRID_FILE_INFO cubrid_file[NUM_CUBRID_FILE]
const char * getenv_cubrid_broker()
#define strlen(s1)
Definition: intl_support.c:43
char * envvar_tmpdir_file(char *path, size_t size, const char *filename)
#define IS_ABS_PATH(p)
Definition: porting.h:357
enum t_cubrid_file_id T_CUBRID_FILE_ID
void set_cubrid_file(T_CUBRID_FILE_ID fid, char *value)
char * get_cubrid_file_ptr(T_CUBRID_FILE_ID fid)
const char ** p
Definition: dynamic_load.c:945
char * envvar_confdir_file(char *path, size_t size, const char *filename)
char * get_cubrid_home()