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

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 <ndb_version.h>
  15. #include <mgmapi_configuration.hpp>
  16. #include <NdbMain.h>
  17. #include <Properties.hpp>
  18. #include "InitConfigFileParser.hpp"
  19. #include <Config.hpp>
  20. void usage(const char * prg){
  21.   ndbout << "Usage " << prg << ": <Init config> <Binary file>" << endl;
  22.   
  23. }
  24. NDB_COMMAND(mkconfig, 
  25.     "mkconfig", "mkconfig", 
  26.     "Make a binary configuration from a config file", 16384){ 
  27.   ndb_init();
  28.   if(argc < 3){
  29.     usage(argv[0]);
  30.     return 0;
  31.   }
  32.   
  33.   InitConfigFileParser parser;
  34.   Config* _cp;
  35.   if ((_cp = parser.parseConfig(argv[1])) == 0)
  36.     return false;
  37.   ConfigValues* cp = &_cp->m_configValues->m_config;
  38.   Uint32 sz = cp->getPackedSize();
  39.   UtilBuffer buf;
  40.   if(!cp->pack(buf))
  41.     return -1;
  42.   
  43.   FILE * f = fopen(argv[2], "w");
  44.   if(fwrite(buf.get_data(), 1, buf.length(), f) != sz){
  45.     fclose(f);
  46.     unlink(argv[2]);
  47.     return -1;
  48.   }
  49.   fclose(f);
  50.   return 0;
  51. }