⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 configfile.cpp

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 CPP
字号:
//%2006//////////////////////////////////////////////////////////////////////////// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation, The Open Group.// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; Symantec Corporation; The Open Group.//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this software and associated documentation files (the "Software"), to// deal in the Software without restriction, including without limitation the// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or// sell copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions:// // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.////==============================================================================////%/////////////////////////////////////////////////////////////////////////////#include <cctype>#include <fstream>#include <Pegasus/Common/FileSystem.h>#include <Pegasus/Common/HashTable.h>#include <Pegasus/Common/Tracer.h>#include "ConfigExceptions.h"#include "ConfigFile.h"#if  defined(PEGASUS_OS_OS400)#include "OS400ConvertChar.h"#endifPEGASUS_USING_STD;PEGASUS_NAMESPACE_BEGIN////////////////////////////////////////////////////////////////////////////////////  ConfigFile Class//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ConfigTable////////////////////////////////////////////////////////////////////////////////typedef HashTable<String, String, EqualFunc<String>, HashFunc<String> > Table;struct ConfigTable{    Table table;};/*    Config file header information*/static const char* ConfigHeader [] = {    "########################################################################",    "##                                                                    ##",    "##                  CIM Server configuration file                     ##",    "##                                                                    ##",    "########################################################################",    " ",    "########################################################################",    "#                                                                      #",    "# This is the configuration file for the CIMOM. The configuration      #",    "# properties in this file are loaded in to CIMOM at startup.           #",    "# CIMOM updates this file with the changes in the configurations.      #",    "#                                                                      #",    "# It is recommended that user do not edit this file, instead use       #",    "# CIMConfigCommand to make any changes to the CIMOM configurations.    #",    "#                                                                      #",    "########################################################################",    " "};static const int HEADER_SIZE = sizeof(ConfigHeader) / sizeof(ConfigHeader[0]);/**    Constructor.*/ConfigFile::ConfigFile (const String& fileName){    _configFile = fileName;    _configBackupFile = fileName + ".bak";}/**    Destructor.*/ConfigFile::~ConfigFile (){}/**    Get the name of the configuration file.*/String ConfigFile::getFileName () const{    return _configFile;}/**    Load the properties from the config file.*/void ConfigFile::load(ConfigTable* confTable){    String line;    //    // Delete the backup configuration file    //    if (FileSystem::exists(_configBackupFile))    {        FileSystem::removeFile(_configBackupFile);    }    //    // Open the config file    //#if defined(PEGASUS_OS_OS400)    ifstream ifs(_configFile.getCString(), PEGASUS_STD(_CCSID_T(1208)));#else    ifstream ifs(_configFile.getCString());#endif    if (!ifs)    {        return;    }    //    // Read each line of the file    //    for (Uint32 lineNumber = 1; GetLine(ifs, line); lineNumber++)    {        // Get the property name and value        //        // Skip leading whitespace        //        const Char16* p = line.getChar16Data();        while (*p && isspace(*p))        {            p++;        }        if (!*p)        {            continue;        }        //        // Skip comment lines        //        if (*p == '#')        {            continue;        }        //        // Get the property name        //        String name = String::EMPTY;        if (!(isalpha(*p) || *p == '_'))        {            ifs.close();            throw ConfigFileSyntaxError(_configFile, lineNumber);        }        name.append(*p++);        while (isalnum(*p) || *p == '_')        {            name.append(*p++);        }        //        // Skip whitespace after property name        //        while (*p && isspace(*p))        {            p++;        }        //        // Expect an equal sign        //        if (*p != '=')        {            ifs.close();            throw ConfigFileSyntaxError(_configFile, lineNumber);        }        p++;        //        // Skip whitespace after equal sign        //        while (*p && isspace(*p))        {            p++;        }        //        // Get the value        //        String value = String::EMPTY;        while (*p)        {            value.append(*p++);        }        //        // Store the property name and value in the table        //        if (!confTable->table.insert(name, value))        {            //            // Duplicate property, ignore the new property value.            // FUTURE: Log this message in a log file.            //            PEG_TRACE_STRING(TRC_CONFIG, Tracer::LEVEL3,                "Duplicate property '" + name + "', value '" + value +                    "' is ignored.");        }    }    ifs.close();}/**    Save the properties to the config file.*/void ConfigFile::save(ConfigTable* confTable){    //    // Delete the backup configuration file    //    if (FileSystem::exists(_configBackupFile))    {        FileSystem::removeFile(_configBackupFile);    }    //    // Rename the configuration file as a backup file    //    if (FileSystem::exists(_configFile))    {        if (!FileSystem::renameFile(_configFile, _configBackupFile))        {            throw CannotRenameFile(_configFile);        }    }    //    // Open the config file for writing    //#if defined(PEGASUS_OS_OS400)    ofstream ofs(_configFile.getCString(), PEGASUS_STD(_CCSID_T(1208)));#else    ofstream ofs(_configFile.getCString());#endif    ofs.clear();#if !defined(PEGASUS_OS_TYPE_WINDOWS)    //    // Set permissions on the config file to 0644    //    if ( !FileSystem::changeFilePermissions(_configFile,        (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) )    // set 0644    {        throw CannotOpenFile(_configFile);    }#endif    //    // Write config file header information    //    for (int index = 0; index < HEADER_SIZE; index++)    {        ofs << ConfigHeader[index] << endl;    }    ofs << endl;    //    // Save config properties and values to the file    //    for (Table::Iterator i = confTable->table.start(); i; i++)    {        ofs << i.key() << "=" << i.value() << endl;    }    ofs.close();}/**    Replace the properties in the config file with the properties from    the given file.*/void ConfigFile::replace (const String& fileName){    String line;    //    // Open the given config file for reading    //#if defined(PEGASUS_OS_OS400)    ifstream ifs(fileName.getCString(), PEGASUS_STD(_CCSID_T(1208)));#else    ifstream ifs(fileName.getCString());#endif    //    // Delete the backup configuration file    //    if (FileSystem::exists(_configBackupFile))    {        FileSystem::removeFile(_configBackupFile);    }    //    // Rename the existing config file as a backup file    //    if (FileSystem::exists(_configFile))    {        if (!FileSystem::renameFile(_configFile, _configBackupFile))        {            ifs.close();            throw CannotRenameFile(_configFile);        }    }    //    // Open the existing config file for writing    //#if defined(PEGASUS_OS_OS400)    ofstream ofs(_configFile.getCString(), PEGASUS_STD(_CCSID_T(1208)));#else    ofstream ofs(_configFile.getCString());#endif    ofs.clear();#if !defined(PEGASUS_OS_TYPE_WINDOWS)    //    // Set permissions on the config file to 0644    //    if ( !FileSystem::changeFilePermissions(_configFile,        (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) )    // set 0644    {        throw CannotOpenFile(_configFile);    }#endif    //    // Read each line of the new file and write to the config file.    //    for (Uint32 lineNumber = 1; GetLine(ifs, line); lineNumber++)    {        ofs << line << endl;    }    //    // Close the file handles    //    ifs.close();    ofs.close();}PEGASUS_NAMESPACE_END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -