NdbConfig.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include <ndb_global.h>
  14. #include <NdbConfig.h>
  15. #include <NdbEnv.h>
  16. #include <NdbMem.h>
  17. #include <basestring_vsnprintf.h>
  18. static const char *datadir_path= 0;
  19. const char *
  20. NdbConfig_get_path(int *_len)
  21. {
  22.   const char *path= NdbEnv_GetEnv("NDB_HOME", 0, 0);
  23.   int path_len= 0;
  24.   if (path)
  25.     path_len= strlen(path);
  26.   if (path_len == 0 && datadir_path) {
  27.     path= datadir_path;
  28.     path_len= strlen(path);
  29.   }
  30.   if (path_len == 0) {
  31.     path= ".";
  32.     path_len= strlen(path);
  33.   }
  34.   if (_len)
  35.     *_len= path_len;
  36.   return path;
  37. }
  38. static char* 
  39. NdbConfig_AllocHomePath(int _len)
  40. {
  41.   int path_len;
  42.   const char *path= NdbConfig_get_path(&path_len);
  43.   int len= _len+path_len;
  44.   char *buf= NdbMem_Allocate(len);
  45.   basestring_snprintf(buf, len, "%s%s", path, DIR_SEPARATOR);
  46.   return buf;
  47. }
  48. void
  49. NdbConfig_SetPath(const char* path){
  50.   datadir_path= path;
  51. }
  52. char* 
  53. NdbConfig_NdbCfgName(int with_ndb_home){
  54.   char *buf;
  55.   int len= 0;
  56.   if (with_ndb_home) {
  57.     buf= NdbConfig_AllocHomePath(128);
  58.     len= strlen(buf);
  59.   } else
  60.     buf= NdbMem_Allocate(128);
  61.   basestring_snprintf(buf+len, 128, "Ndb.cfg");
  62.   return buf;
  63. }
  64. static
  65. char *get_prefix_buf(int len, int node_id)
  66. {
  67.   char tmp_buf[sizeof("ndb_pid#############")+1];
  68.   char *buf;
  69.   if (node_id > 0)
  70.     basestring_snprintf(tmp_buf, sizeof(tmp_buf), "ndb_%u", node_id);
  71.   else
  72.     basestring_snprintf(tmp_buf, sizeof(tmp_buf), "ndb_pid%u", getpid());
  73.   tmp_buf[sizeof(tmp_buf)-1]= 0;
  74.   buf= NdbConfig_AllocHomePath(len+strlen(tmp_buf));
  75.   strcat(buf, tmp_buf);
  76.   return buf;
  77. }
  78. char* 
  79. NdbConfig_ErrorFileName(int node_id){
  80.   char *buf= get_prefix_buf(128, node_id);
  81.   int len= strlen(buf);
  82.   basestring_snprintf(buf+len, 128, "_error.log");
  83.   return buf;
  84. }
  85. char*
  86. NdbConfig_ClusterLogFileName(int node_id){
  87.   char *buf= get_prefix_buf(128, node_id);
  88.   int len= strlen(buf);
  89.   basestring_snprintf(buf+len, 128, "_cluster.log");
  90.   return buf;
  91. }
  92. char*
  93. NdbConfig_SignalLogFileName(int node_id){
  94.   char *buf= get_prefix_buf(128, node_id);
  95.   int len= strlen(buf);
  96.   basestring_snprintf(buf+len, 128, "_signal.log");
  97.   return buf;
  98. }
  99. char*
  100. NdbConfig_TraceFileName(int node_id, int file_no){
  101.   char *buf= get_prefix_buf(128, node_id);
  102.   int len= strlen(buf);
  103.   basestring_snprintf(buf+len, 128, "_trace.log.%u", file_no);
  104.   return buf;
  105. }
  106. char*
  107. NdbConfig_NextTraceFileName(int node_id){
  108.   char *buf= get_prefix_buf(128, node_id);
  109.   int len= strlen(buf);
  110.   basestring_snprintf(buf+len, 128, "_trace.log.next");
  111.   return buf;
  112. }
  113. char*
  114. NdbConfig_PidFileName(int node_id){
  115.   char *buf= get_prefix_buf(128, node_id);
  116.   int len= strlen(buf);
  117.   basestring_snprintf(buf+len, 128, ".pid");
  118.   return buf;
  119. }
  120. char*
  121. NdbConfig_StdoutFileName(int node_id){
  122.   char *buf= get_prefix_buf(128, node_id);
  123.   int len= strlen(buf);
  124.   basestring_snprintf(buf+len, 128, "_out.log");
  125.   return buf;
  126. }