* [Cluster-devel] conga/ricci/common Logger.cpp Makefile Module. ...
@ 2007-08-31 4:57 rmccabe
0 siblings, 0 replies; only message in thread
From: rmccabe @ 2007-08-31 4:57 UTC (permalink / raw)
To: cluster-devel.redhat.com
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2007-08-31 04:57:37
Modified files:
ricci/common : Logger.cpp Makefile Module.cpp Network.cpp
Random.cpp ServerSocket.cpp Thread.cpp Time.cpp
Variable.cpp XML.cpp daemon_init.c signals.c
utils.cpp
Log message:
More cleanup
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Logger.cpp.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Makefile.diff?cvsroot=cluster&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Module.cpp.diff?cvsroot=cluster&r1=1.6&r2=1.7
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Network.cpp.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Random.cpp.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/ServerSocket.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Thread.cpp.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Time.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Variable.cpp.diff?cvsroot=cluster&r1=1.8&r2=1.9
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/XML.cpp.diff?cvsroot=cluster&r1=1.10&r2=1.11
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/daemon_init.c.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/signals.c.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/utils.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10
--- conga/ricci/common/Logger.cpp 2006/08/10 22:53:07 1.2
+++ conga/ricci/common/Logger.cpp 2007/08/31 04:57:37 1.3
@@ -1,5 +1,5 @@
/*
- Copyright Red Hat, Inc. 2005
+ Copyright Red Hat, Inc. 2005-2007
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -13,7 +13,7 @@
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -38,139 +38,146 @@
static counting_auto_ptr<Logger> logger(new Logger());
-
Logger::Logger() :
- _fd(-1),
- _domain_c(NULL)
+ _fd(-1),
+ _domain_c(NULL)
{}
-Logger::Logger(const String& filepath,
- const String& domain,
- LogLevel level) :
- _level(level)
-{
- const char* c_str = domain.c_str();
- const char* path_c = filepath.c_str();
-
- _domain_c = (char*) malloc(domain.size()+1);
- if (_domain_c == NULL)
- throw String("Logger::Logger(): malloc() failed");
- strcpy(_domain_c, c_str);
-
- _fd = open(path_c,
- O_CREAT|O_WRONLY|O_APPEND,
- S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
- if (_fd == -1) {
- free(_domain_c);
- throw String("Logger::Logger(): open() failed");
- }
+Logger::Logger( const String& filepath,
+ const String& domain,
+ LogLevel level) :
+ _level(level)
+{
+ const char *c_str = domain.c_str();
+ const char *path_c = filepath.c_str();
+
+ _domain_c = (char *) malloc(domain.size() + 1);
+ if (_domain_c == NULL)
+ throw String("Logger::Logger(): malloc() failed");
+ strcpy(_domain_c, c_str);
+
+ _fd = open(path_c, O_CREAT | O_WRONLY | O_APPEND, 0640);
+ if (_fd == -1) {
+ free(_domain_c);
+ throw String("Logger::Logger(): open() failed");
+ }
}
Logger::Logger(int fd, const String& domain, LogLevel level) :
- _fd(fd),
- _level(level)
+ _fd(fd),
+ _level(level)
{
- const char* c_str = domain.c_str();
-
- _domain_c = (char*) malloc(domain.size()+1);
- if (_domain_c == NULL) {
- close_fd();
- throw String("Logger::Logger(): malloc() failed");
- }
- strcpy(_domain_c, c_str);
+ const char *c_str = domain.c_str();
+
+ _domain_c = (char *) malloc(domain.size() + 1);
+ if (_domain_c == NULL) {
+ close_fd();
+ throw String("Logger::Logger(): malloc() failed");
+ }
+ strcpy(_domain_c, c_str);
}
void
Logger::close_fd()
{
- if (_fd > -1)
- fsync(_fd);
- if (_fd > 2) {
- int e;
- do {
- e = close(_fd);
- } while (e == -1 && (errno == EINTR));
- _fd = -1;
- }
+ if (_fd > -1)
+ fsync(_fd);
+
+ if (_fd > 2) {
+ int e;
+ do {
+ e = close(_fd);
+ } while (e == -1 && (errno == EINTR));
+ _fd = -1;
+ }
}
Logger::~Logger()
{
- close_fd();
- free(_domain_c);
+ close_fd();
+ free(_domain_c);
}
-void
+void
Logger::log(const String& msg, LogLevel level)
{
- log_sigsafe(msg.c_str(), level);
+ log_sigsafe(msg.c_str(), level);
}
-void
-Logger::log_sigsafe(const char* msg, LogLevel level)
+void
+Logger::log_sigsafe(const char *msg, LogLevel level)
{
- if (_fd > 0 && _level & level) {
- char time[64];
- time_t t = time_sec();
- ctime_r(&t, time);
- time[sizeof(time)-1] = 0;
- for (int i=0; time[i]; i++)
- if (time[i] == '\n') {
- time[i] = 0;
- break;
- }
-
- char m[2048];
- if (_fd > 2 && (_domain_c != NULL))
- snprintf(m, sizeof(m), "%s %s: %s\n", time, _domain_c, msg);
- else
- snprintf(m, sizeof(m), "%s: %s\n", time, msg);
- m[sizeof(m)-1] = 0;
-
- int l, e;
- for (l=0; m[l]; l++) ;
- do {
- e = write(_fd, m, l);
- } while (e == -1 && errno == EINTR);
- }
+ if (_fd > 0 && (_level & level)) {
+ char time[64];
+ time_t t = time_sec();
+ char *p;
+ int ret;
+
+ ctime_r(&t, time);
+ time[sizeof(time) - 1] = '\0';
+
+ p = strchr(time, '\n');
+ if (p != NULL)
+ *p = '\0';
+
+ char m[4096] = { 0, };
+ if (_fd > 2 && _domain_c != NULL)
+ ret = snprintf(m, sizeof(m), "%s %s: %s\n", time, _domain_c, msg);
+ else
+ ret = snprintf(m, sizeof(m), "%s: %s\n", time, msg);
+
+ if (ret < 0 || (size_t) ret >= sizeof(m)) {
+ m[sizeof(m) - 1] = '\0';
+ ret = strlen(m);
+ }
+
+ while (ret > 0) {
+ ssize_t w = write(_fd, m, ret);
+ if (w < 0) {
+ if (errno == EINTR)
+ continue;
+ break;
+ }
+ ret -= w;
+ }
+ }
}
-
// ### helper functions ###
-String
+String
operator+ (const String& s, int i)
{
- char buff[128];
- snprintf(buff, sizeof(buff), "%d", i);
- return s + buff;
+ char buff[128];
+ snprintf(buff, sizeof(buff), "%d", i);
+ return s + buff;
}
-String
+String
operator+ (int i, const String& s)
{
- char buff[128];
- snprintf(buff, sizeof(buff), "%d", i);
- return String(buff) + s;
+ char buff[128];
+ snprintf(buff, sizeof(buff), "%d", i);
+ return String(buff) + s;
}
-void
+void
log(const String& msg, LogLevel level)
{
- logger->log(msg, level);
+ logger->log(msg, level);
}
-void
+void
log_sigsafe(const char* msg, LogLevel level)
{
- logger->log_sigsafe(msg, level);
+ logger->log_sigsafe(msg, level);
}
-void
+void
set_logger(counting_auto_ptr<Logger> l)
{
- if (l.get() == NULL)
- l = counting_auto_ptr<Logger>(new Logger());
- logger = l;
+ if (l.get() == NULL)
+ l = counting_auto_ptr<Logger>(new Logger());
+ logger = l;
}
--- conga/ricci/common/Makefile 2007/07/17 22:30:44 1.9
+++ conga/ricci/common/Makefile 2007/08/31 04:57:37 1.10
@@ -1,14 +1,15 @@
-################################################################################################################################################################
+################################################################################
##
-## Copyright (C) 2005 Red Hat, Inc. All rights reserved.
+## Copyright (C) 2005-2007 Red Hat, Inc. All rights reserved.
##
-## This copyrighted material is made available to anyone wishing to use,
-## modify, copy, or redistribute it subject to the terms and conditions
-## of the GNU General Public License v.2.
+## This copyrighted material is made available to anyone wishing to use,
+## modify, copy, or redistribute it subject to the terms and conditions
+## of the GNU General Public License v.2.
##
-##############################################################################################################################################################
+################################################################################
top_srcdir=..
+
UNINSTALL = ${top_srcdir}/scripts/uninstall.pl
include ${top_srcdir}/make/defines.mk
@@ -16,7 +17,8 @@
#TARGET = main
-OBJECTS = Except.o \
+OBJECTS = \
+ Except.o \
executils.o \
signals.o \
Thread.o \
@@ -35,12 +37,10 @@
base64.o \
Module.o
-
-INCLUDE +=
-CXXFLAGS +=
-CFLAGS +=
-LDFLAGS +=
-
+INCLUDE +=
+CXXFLAGS +=
+CFLAGS +=
+LDFLAGS +=
all: $(OBJECTS)
--- conga/ricci/common/Module.cpp 2007/06/25 16:03:42 1.6
+++ conga/ricci/common/Module.cpp 2007/08/31 04:57:37 1.7
@@ -13,7 +13,7 @@
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -37,9 +37,9 @@
using namespace std;
-static const unsigned int timeout = 3000; // milliseconds
+static const unsigned int timeout = 3000; // milliseconds
-static ApiFcnMap _api_fcns; // api->name->function map
+static ApiFcnMap _api_fcns; // api->name->function map
static VarMap list_APIs(const VarMap& args);
static VarMap extract_vars(const XMLObject& xml);
@@ -48,220 +48,218 @@
+// ######## Module ########
-// ######## Module ########
-
-
-#define APIs_FUNC_NAME "APIs"
+#define APIs_FUNC_NAME "APIs"
Module::Module(const ApiFcnMap& api_fcns)
{
- for (ApiFcnMap::const_iterator api_iter = api_fcns.begin();
- api_iter != api_fcns.end();
- api_iter++) {
- const String& api_vers = api_iter->first;
- if (api_vers.empty())
- continue;
- FcnMap funcs = api_iter->second;
- funcs[APIs_FUNC_NAME] = list_APIs;
- _api_fcns[api_vers] = funcs;
- }
+ for (ApiFcnMap::const_iterator
+ api_iter = api_fcns.begin();
+ api_iter != api_fcns.end();
+ api_iter++)
+ {
+ const String& api_vers = api_iter->first;
+
+ if (api_vers.empty())
+ continue;
+
+ FcnMap funcs = api_iter->second;
+ funcs[APIs_FUNC_NAME] = list_APIs;
+ _api_fcns[api_vers] = funcs;
+ }
}
Module::~Module()
{}
-
-XMLObject
+XMLObject
Module::process(const XMLObject& request)
{
- try {
- if (request.tag() != REQUEST_TAG)
- throw APIerror("missing request tag");
-
- String version = request.get_attr(MOD_VERSION_TAG);
- if (_api_fcns.find(version) == _api_fcns.end())
- throw APIerror("unsupported API version");
-
- if (request.children().size() != 1)
- throw APIerror(String("missing ") + FUNC_CALL_TAG);
- const XMLObject& func_xml = request.children().front();
- if (func_xml.tag() != FUNC_CALL_TAG)
- throw APIerror(String("missing ") + FUNC_CALL_TAG);
-
- String fcn_name = func_xml.get_attr("name");
- if (fcn_name.empty())
- throw APIerror("missing function name");
- FcnMap& fcns = _api_fcns[version];
- if (fcns.find(fcn_name) == fcns.end())
- throw APIerror(String("function '") + fcn_name + "' not in API '" + version + "'");
-
- // construct response xml
- XMLObject response(RESPONSE_TAG);
- response.set_attr(MOD_VERSION_TAG, version);
- response.set_attr(SEQUENCE_TAG, request.get_attr(SEQUENCE_TAG));
- XMLObject func_resp_xml(FUNC_RESPONSE_TAG);
- func_resp_xml.set_attr("function_name", fcn_name);
- try {
- map<String, Variable> in_vars = extract_vars(func_xml);
- map<String, Variable> out_vars = (fcns[fcn_name])(in_vars);
- insert_vars(out_vars, func_resp_xml);
- func_resp_xml.add_child(Variable("success", true).xml());
- } catch (Except e) {
- func_resp_xml.add_child(Variable("success", false).xml());
- func_resp_xml.add_child(Variable("error_code", e.code()).xml());
- func_resp_xml.add_child(Variable("error_description", e.description()).xml());
- } catch ( String e ) {
- func_resp_xml.add_child(Variable("success", false).xml());
- func_resp_xml.add_child(Variable("error_code", Except::generic_error).xml());
- func_resp_xml.add_child(Variable("error_description", e).xml());
- } catch ( APIerror e ) {
- throw;
- } catch ( ... ) {
- func_resp_xml.add_child(Variable("success", false).xml());
- func_resp_xml.add_child(Variable("error_code", Except::generic_error).xml());
- func_resp_xml.add_child(Variable("error_description", String("No description")).xml());
- }
- response.add_child(func_resp_xml);
- return response;
- } catch ( APIerror e ) {
- XMLObject err_resp("API_error");
- err_resp.set_attr("description", e.msg);
- insert_vars(list_APIs(map<String, Variable>()), err_resp);
- return err_resp;
- } catch ( ... ) {
- XMLObject err_resp("internal_error");
- return err_resp;
- }
-}
+ try {
+ if (request.tag() != REQUEST_TAG)
+ throw APIerror("missing request tag");
+
+ String version = request.get_attr(MOD_VERSION_TAG);
+ if (_api_fcns.find(version) == _api_fcns.end())
+ throw APIerror("unsupported API version");
+
+ if (request.children().size() != 1)
+ throw APIerror(String("missing ") + FUNC_CALL_TAG);
+
+ const XMLObject& func_xml = request.children().front();
+ if (func_xml.tag() != FUNC_CALL_TAG)
+ throw APIerror(String("missing ") + FUNC_CALL_TAG);
+
+ String fcn_name = func_xml.get_attr("name");
+ if (fcn_name.empty())
+ throw APIerror("missing function name");
+
+ FcnMap& fcns = _api_fcns[version];
+ if (fcns.find(fcn_name) == fcns.end()) {
+ throw APIerror(String("function '") + fcn_name
+ + "' not in API '" + version + "'");
+ }
+ // construct response xml
+ XMLObject response(RESPONSE_TAG);
+ response.set_attr(MOD_VERSION_TAG, version);
+ response.set_attr(SEQUENCE_TAG, request.get_attr(SEQUENCE_TAG));
+
+ XMLObject func_resp_xml(FUNC_RESPONSE_TAG);
+ func_resp_xml.set_attr("function_name", fcn_name);
+
+ try {
+ map<String, Variable> in_vars = extract_vars(func_xml);
+ map<String, Variable> out_vars = (fcns[fcn_name])(in_vars);
+
+ insert_vars(out_vars, func_resp_xml);
+ func_resp_xml.add_child(Variable("success", true).xml());
+ } catch (Except e) {
+ func_resp_xml.add_child(Variable("success", false).xml());
+ func_resp_xml.add_child(Variable("error_code", e.code()).xml());
+ func_resp_xml.add_child(Variable("error_description",
+ e.description()).xml());
+ } catch ( String e ) {
+ func_resp_xml.add_child(Variable("success", false).xml());
+ func_resp_xml.add_child(Variable("error_code",
+ Except::generic_error).xml());
+ func_resp_xml.add_child(Variable("error_description", e).xml());
+ } catch ( APIerror e ) {
+ throw;
+ } catch ( ... ) {
+ func_resp_xml.add_child(Variable("success", false).xml());
+ func_resp_xml.add_child(Variable("error_code",
+ Except::generic_error).xml());
+ func_resp_xml.add_child(Variable("error_description",
+ String("No description")).xml());
+ }
+ response.add_child(func_resp_xml);
+ return response;
+ } catch ( APIerror e ) {
+ XMLObject err_resp("API_error");
+ err_resp.set_attr("description", e.msg);
+ insert_vars(list_APIs(map<String, Variable>()), err_resp);
+ return err_resp;
+ } catch ( ... ) {
+ XMLObject err_resp("internal_error");
+ return err_resp;
+ }
+}
VarMap
extract_vars(const XMLObject& xml)
{
- map<String, Variable> args;
- for (list<XMLObject>::const_iterator iter = xml.children().begin();
- iter != xml.children().end();
- iter++) {
- try {
- Variable var(*iter);
- args.insert(pair<String, Variable>(var.name(), var));
- } catch ( ... ) {}
- }
- return args;
+ map<String, Variable> args;
+
+ for (list<XMLObject>::const_iterator
+ iter = xml.children().begin() ;
+ iter != xml.children().end() ;
+ iter++)
+ {
+ try {
+ Variable var(*iter);
+ args.insert(pair<String, Variable>(var.name(), var));
+ } catch ( ... ) {}
+ }
+
+ return args;
}
-void
-insert_vars(const VarMap& vars,
- XMLObject& xml)
+void
+insert_vars(const VarMap& vars, XMLObject& xml)
{
- for (VarMap::const_iterator iter = vars.begin();
- iter != vars.end();
- iter++)
- xml.add_child(iter->second.xml());
+ for (VarMap::const_iterator
+ iter = vars.begin() ;
+ iter != vars.end() ;
+ iter++)
+ {
+ xml.add_child(iter->second.xml());
+ }
}
VarMap
list_APIs(const VarMap& args)
{
- list<String> apis;
- for (ApiFcnMap::const_iterator iter = _api_fcns.begin();
- iter != _api_fcns.end();
- iter++)
- apis.push_back(iter->first);
-
- Variable api_var("APIs", apis);
- VarMap ret;
- ret.insert(pair<String, Variable>(api_var.name(), api_var));
- return ret;
+ list<String> apis;
+ for (ApiFcnMap::const_iterator
+ iter = _api_fcns.begin() ;
+ iter != _api_fcns.end() ;
+ iter++)
+ {
+ apis.push_back(iter->first);
+ }
+
+ Variable api_var("APIs", apis);
+ VarMap ret;
+ ret.insert(pair<String, Variable>(api_var.name(), api_var));
+ return ret;
}
-
-
-
-
-
-
-
-
-
-
-
-
-// ################ ModuleDriver ######################
-
-
-
+// ################ ModuleDriver ######################
#include <fcntl.h>
-static void
-close_fd(int fd);
-
-static int
-__stdin_out_module_driver(Module& module);
+static void close_fd(int fd);
+static int __stdin_out_module_driver(Module& module);
int
-stdin_out_module_driver(Module& module,
- int argc,
- char** argv)
+stdin_out_module_driver(Module& module, int argc, char** argv)
{
- bool display_err = false;
- int rv;
- while ((rv = getopt(argc, argv, "e")) != EOF)
- switch (rv) {
- case 'e':
- display_err = true;
- break;
- default:
- break;
- }
-
- int old_err;
- if (!display_err) {
- // redirect stderr to /dev/null
- old_err = dup(2);
- int devnull = open("/dev/null", O_RDWR);
- if (devnull == -1) {
- perror("stdin_out_module_driver(): Can't open /dev/null");
- exit(1);
- }
- dup2(devnull, 2);
- close_fd(devnull);
- }
-
- try {
-
- return __stdin_out_module_driver(module);
-
- } catch ( ... ) {
- if (!display_err) {
- // restore stderr
- dup2(old_err, 2);
- close_fd(old_err);
- }
- throw;
- }
-}
+ bool display_err = false;
+ int rv;
+ while ((rv = getopt(argc, argv, "e")) != EOF) {
+ switch (rv) {
+ case 'e':
+ display_err = true;
+ break;
+ default:
+ break;
+ }
+ }
+ int old_err;
+ if (!display_err) {
+ // redirect stderr to /dev/null
+ old_err = dup(2);
+ int devnull = open("/dev/null", O_RDWR);
+ if (devnull == -1) {
+ perror("stdin_out_module_driver(): Can't open /dev/null");
+ exit(1);
+ }
+ dup2(devnull, 2);
+ close_fd(devnull);
+ }
+
+ try {
+ return __stdin_out_module_driver(module);
+ } catch ( ... ) {
+ if (!display_err) {
+ // restore stderr
+ dup2(old_err, 2);
+ close_fd(old_err);
+ }
+ throw;
+ }
+}
int
__stdin_out_module_driver(Module& module)
{
unsigned int time_beg = time_mil();
String data;
-
+
while (time_mil() < time_beg + timeout) {
poll_fd poll_data;
poll_data.fd = 0;
poll_data.events = POLLIN;
poll_data.revents = 0;
-
+
// wait for events
int ret = poll(&poll_data, 1, 500);
@@ -286,7 +284,7 @@
else
throw String("poll() error: ") + String(strerror(errno));
}
-
+
// process event
if (poll_data.revents & POLLIN) {
char buff[4096];
@@ -318,19 +316,16 @@
if (poll_data.revents & (POLLERR | POLLHUP | POLLNVAL))
throw String("stdin error: ") + String(strerror(errno));
} // while
-
- // cout << data << endl;
+
+ // cout << data << endl;
throw String("invalid input");
}
-
-
-
void
close_fd(int fd)
{
- int e;
- do {
- e = close(fd);
- } while (e && (errno == EINTR));
+ int e;
+ do {
+ e = close(fd);
+ } while (e && (errno == EINTR));
}
--- conga/ricci/common/Network.cpp 2007/03/23 17:25:12 1.1
+++ conga/ricci/common/Network.cpp 2007/08/31 04:57:37 1.2
@@ -13,7 +13,7 @@
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -28,57 +28,58 @@
#include <arpa/inet.h>
-
-counting_auto_ptr<Network::Hostent>
+counting_auto_ptr<Network::Hostent>
Network::getHostByName(const String& hostname)
{
- counting_auto_ptr<Hostent> ent_d(new Hostent());
- struct hostent *ent = 0;
- int error;
- gethostbyname2_r(hostname.c_str(), AF_INET,
- &(ent_d->ent),
- ent_d->data, sizeof(ent_d->data),
- &ent,
- &error);
- if (ent == &(ent_d->ent))
- return ent_d;
- throw String("unable to resolve ") + hostname;
+ counting_auto_ptr<Hostent> ent_d(new Hostent());
+ struct hostent *ent = 0;
+ int error;
+
+ gethostbyname2_r(hostname.c_str(),
+ AF_INET,
+ &(ent_d->ent),
+ ent_d->data, sizeof(ent_d->data),
+ &ent,
+ &error);
+ if (ent == &(ent_d->ent))
+ return ent_d;
+ throw String("unable to resolve ") + hostname;
}
-
std::vector<String>
Network::name2IP(const String& hostname)
{
- std::vector<String> addrs;
- try {
- char buff[INET_ADDRSTRLEN+1];
- counting_auto_ptr<Hostent> hent = getHostByName(hostname);
- char** addrs_b = (*hent)->h_addr_list;
- for (int i=0; addrs_b[i]; i++) {
- struct in_addr addr;
- addr.s_addr = *((u_int32_t*) addrs_b[i]);
- if (inet_ntop(AF_INET, &addr, buff, sizeof(buff)))
- addrs.push_back(buff);
- }
- } catch ( ... ) {}
- return addrs;
-}
+ std::vector<String> addrs;
+ try {
+ char buff[INET_ADDRSTRLEN + 1];
+ counting_auto_ptr<Hostent> hent = getHostByName(hostname);
+ char **addrs_b = (*hent)->h_addr_list;
+
+ for (int i = 0 ; addrs_b[i] ; i++) {
+ struct in_addr addr;
+ addr.s_addr = *((u_int32_t*) addrs_b[i]);
+ if (inet_ntop(AF_INET, &addr, buff, sizeof(buff)))
+ addrs.push_back(buff);
+ }
+ } catch ( ... ) {}
+ return addrs;
+}
String
Network::localhost()
{
- // get hostname
- char name[1024];
- if (gethostname(name, sizeof(name)-1))
- return "";
- name[sizeof(name)-1] = '\0';
-
- try {
- // get fqdn
- counting_auto_ptr<Hostent> ent = getHostByName(name);
- return String((*ent)->h_name);
- } catch ( ... ) {
- return name;
- }
+ // get hostname
+ char name[1024];
+ if (gethostname(name, sizeof(name) - 1))
+ return "";
+ name[sizeof(name) - 1] = '\0';
+
+ try {
+ // get fqdn
+ counting_auto_ptr<Hostent> ent = getHostByName(name);
+ return String((*ent)->h_name);
+ } catch ( ... ) {
+ return name;
+ }
}
--- conga/ricci/common/Random.cpp 2006/08/10 22:53:07 1.2
+++ conga/ricci/common/Random.cpp 2007/08/31 04:57:37 1.3
@@ -1,5 +1,5 @@
/*
- Copyright Red Hat, Inc. 2005
+ Copyright Red Hat, Inc. 2005-2007
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -13,7 +13,7 @@
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -25,24 +25,33 @@
#include "Mutex.h"
#include "Time.h"
+#include <unistd.h>
#include <stdlib.h>
+#include <fcntl.h>
#include "String.h"
-
static Mutex mutex;
-static unsigned int seed = 0;
-
+static uint32_t seed = 0;
-int
+int
random_generator(int min, int max)
{
- MutexLocker l(mutex);
- if (!seed)
- seed = time_mil();
-
- int range = max - min;
- if (range <= 5)
- throw String("random_generate(min, max): range too small");
-
- return (int) (min + range * ((double) rand_r(&seed))/RAND_MAX);
+ MutexLocker l(mutex);
+
+ int fd = open("/dev/urandom", O_RDONLY);
+ if (fd > 0) {
+ ssize_t ret = read(fd, &seed, sizeof(seed));
+ close(fd);
+ if (ret > 0 && (size_t) ret != sizeof(seed))
+ seed = 0;
+ }
+
+ if (!seed)
+ seed = time_mil();
+
+ int range = max - min;
+ if (range <= 5)
+ throw String("random_generate(min, max): range too small");
+
+ return (int) (min + range * ((double) rand_r(&seed)) / RAND_MAX);
}
--- conga/ricci/common/ServerSocket.cpp 2006/10/14 17:51:35 1.4
+++ conga/ricci/common/ServerSocket.cpp 2007/08/31 04:57:37 1.5
@@ -1,5 +1,5 @@
/*
- Copyright Red Hat, Inc. 2005
+ Copyright Red Hat, Inc. 2005-2007
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -13,7 +13,7 @@
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -33,127 +33,129 @@
#include "String.h"
-
ServerSocket::ServerSocket(const String& sock_path) :
- Socket(-1),
- _unix_sock(true),
- _sock_path(sock_path)
-{
- _sock = socket(PF_UNIX, SOCK_STREAM, 0);
- if (_sock == -1) {
- String m = String("ServerSocket(sock_path=") + sock_path + "): socket() failed, errno=" + errno;
- throw m;
- }
-
- int dummy_true = 1;
- if (setsockopt(_sock, SOL_SOCKET, SO_REUSEADDR, &dummy_true, sizeof(dummy_true))) {
- String m = String("ServerSocket(sock_path=") + sock_path + "): set SO_REUSEADDR, failed, errno=" + errno;
- throw m;
- }
-
- struct sockaddr_un {
- sa_family_t sun_family;
- char sun_path[100];
- } addr;
- addr.sun_family = AF_UNIX;
- memcpy(addr.sun_path, sock_path.c_str(), sock_path.size()+1);
-
- unlink(_sock_path.c_str());
- if (bind(_sock, (struct sockaddr*) &addr, sizeof(addr))) {
- String m = String("ServerSocket(sock_path=") + sock_path + "): bind() failed, errno=" + errno;
- throw m;
- }
-
- if (listen(_sock, 5)) {
- String m = String("ServerSocket(sock_path=") + sock_path + "): listen() failed, errno=" + errno;
- throw m;
- }
-
- String msg = String("created unix server socket, ") + _sock + ", " + sock_path;
- // log(msg, LogSocket);
+ Socket(-1),
+ _unix_sock(true),
+ _sock_path(sock_path)
+{
+ _sock = socket(PF_UNIX, SOCK_STREAM, 0);
+ if (_sock == -1) {
+ throw String("ServerSocket(sock_path=") + sock_path
+ + "): socket() failed: " + String(strerror(errno));
+ }
+
+ int t = 1;
+ if (setsockopt(_sock, SOL_SOCKET, SO_REUSEADDR, &t, sizeof(t))) {
+ throw String("ServerSocket(sock_path=") + sock_path
+ + "): set SO_REUSEADDR, failed: " + String(strerror(errno));
+ }
+
+ struct sockaddr_un addr;
+ addr.sun_family = AF_UNIX;
+ memcpy(addr.sun_path, sock_path.c_str(), sock_path.size() + 1);
+
+ unlink(_sock_path.c_str());
+
+ if (bind(_sock, (struct sockaddr*) &addr, sizeof(addr))) {
+ throw String("ServerSocket(sock_path=") + sock_path
+ + "): bind() failed: " + String(strerror(errno));
+ }
+
+ if (listen(_sock, 5)) {
+ throw String("ServerSocket(sock_path=") + sock_path
+ + "): listen() failed: " + String(strerror(errno));
+ }
+ //String msg = String("created unix server socket, ")
+ // + _sock + ", " + sock_path;
+ //log(msg, LogSocket);
}
ServerSocket::ServerSocket(unsigned short port) :
- Socket(-1),
- _unix_sock(false),
- _sock_path("")
-{
- _sock = socket(PF_INET, SOCK_STREAM, 0);
- if (_sock == -1) {
- String m = String("ServerSocket(port=") + port + "): socket() failed, errno=" + errno;
- throw m;
- }
-
- int dummy_true = 1;
- if (setsockopt(_sock, SOL_SOCKET, SO_REUSEADDR, &dummy_true, sizeof(dummy_true))) {
- String m = String("ServerSocket(port=") + port + "): set SO_REUSEADDR, failed, errno=" + errno;
- throw m;
- }
-
- struct sockaddr_in addr;
- addr.sin_family = AF_INET;
- addr.sin_port = htons(port);
- addr.sin_addr.s_addr = INADDR_ANY;
- if (bind(_sock, (struct sockaddr*) &addr, sizeof(addr))) {
- String m = String("ServerSocket(port=") + port + "): bind() failed, errno=" + errno;
- throw m;
- }
-
- if (listen(_sock, 5)) {
- String m = String("ServerSocket(port=") + port + "): listen() failed, errno=" + errno;
- throw m;
- }
-
- String msg = String("created tcp server socket, ") + _sock + ", port " + port;
- // log(msg, LogSocket);
+ Socket(-1),
+ _unix_sock(false),
+ _sock_path("")
+{
+ _sock = socket(PF_INET, SOCK_STREAM, 0);
+ if (_sock == -1) {
+ throw String("ServerSocket(port=") + port
+ + "): socket() failed: " + String(strerror(errno));
+ }
+
+ int t = 1;
+ if (setsockopt(_sock, SOL_SOCKET, SO_REUSEADDR, &t, sizeof(t))) {
+ throw String("ServerSocket(port=") + port
+ + "): set SO_REUSEADDR, failed: " + String(strerror(errno));
+ }
+
+ struct sockaddr_in addr;
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(port);
+ addr.sin_addr.s_addr = INADDR_ANY;
+
+ if (bind(_sock, (struct sockaddr*) &addr, sizeof(addr))) {
+ throw String("ServerSocket(port=") + port
+ + "): bind() failed: " + String(strerror(errno));
+ }
+
+ if (listen(_sock, 5)) {
+ throw String("ServerSocket(port=") + port
+ + "): listen() failed: " + String(strerror(errno));
+ }
+
+ //String msg = String("created tcp server socket, ")
+ // + _sock + ", port " + port;
+ //log(msg, LogSocket);
}
ServerSocket::ServerSocket(const ServerSocket& s) :
- Socket(s),
- _unix_sock(s._unix_sock),
- _sock_path(s._sock_path)
+ Socket(s),
+ _unix_sock(s._unix_sock),
+ _sock_path(s._sock_path)
{}
-ServerSocket&
+ServerSocket&
ServerSocket::operator= (const ServerSocket& s)
{
- if (&s != this) {
- this->Socket::operator= (s);
- _unix_sock = s._unix_sock;
- _sock_path = s._sock_path;
- }
- return *this;
+ if (&s != this) {
+ this->Socket::operator= (s);
+ _unix_sock = s._unix_sock;
+ _sock_path = s._sock_path;
+ }
+
+ return *this;
}
ServerSocket::~ServerSocket()
{
- if (_unix_sock && (*_counter == 1))
- unlink(_sock_path.c_str());
+ if (_unix_sock && (*_counter == 1))
+ unlink(_sock_path.c_str());
}
-ClientSocket
+ClientSocket
ServerSocket::accept()
{
- while (true) {
- struct sockaddr_in addr_in;
- socklen_t size = sizeof(addr_in);
-
- int ret = ::accept(_sock, (struct sockaddr*) &addr_in, &size);
- if (ret == -1) {
- if (errno == EINTR)
- continue;
- throw String("ServerSocket(): accept() failed");
- }
- // log("ServerSocket: accepted connection", LogSocket);
- return ClientSocket(ret, addr_in.sin_addr.s_addr);
- }
+ while (true) {
+ struct sockaddr_in addr_in;
+ socklen_t size = sizeof(addr_in);
+
+ int ret = ::accept(_sock, (struct sockaddr *) &addr_in, &size);
+ if (ret == -1) {
+ if (errno == EINTR)
+ continue;
+ throw String("ServerSocket(): accept() failed: ")
+ + String(strerror(errno));
+ }
+ //log("ServerSocket: accepted connection", LogSocket);
+ return ClientSocket(ret, addr_in.sin_addr.s_addr);
+ }
}
-bool
+bool
ServerSocket::ready(int timeout)
{
- bool read = true;
- bool write = false;
- poll(read, write, timeout);
- return read;
+ bool read = true;
+ bool write = false;
+
+ poll(read, write, timeout);
+ return read;
}
--- conga/ricci/common/Thread.cpp 2006/08/10 22:53:07 1.2
+++ conga/ricci/common/Thread.cpp 2007/08/31 04:57:37 1.3
@@ -1,5 +1,5 @@
/*
- Copyright Red Hat, Inc. 2005
+ Copyright Red Hat, Inc. 2005-2007
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -13,7 +13,7 @@
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -25,80 +25,81 @@
//#include "Logger.h"
#include "String.h"
-
-
void*
-start_thread(void* thread_obj)
+start_thread(void *thread_obj)
{
- try {
- ((Thread*) thread_obj)->run();
- }
- catch ( ... ) {}
- return NULL;
+ try {
+ ((Thread*) thread_obj)->run();
+ }
+ catch ( ... ) {}
+ return NULL;
}
-
Thread::Thread() :
- _stop(true),
- _running(false)
+ _stop(true),
+ _running(false)
{}
Thread::~Thread()
{
- // log(String("entered destructor of thread ") + (int) _thread, LogThread);
- Thread::stop();
+ //log(String("entered destructor of thread ") + (int) _thread, LogThread);
+ Thread::stop();
}
-
-void
+void
Thread::start()
{
- // log("entered Thread::start()", LogThread);
- MutexLocker l1(_main_mutex);
- if (!_running) {
- {
- MutexLocker l2(_stop_mutex);
- _stop = false;
- }
- pthread_create(&_thread, NULL, start_thread, this);
- // log(String("created thread ") + (int) _thread, LogThread);
- _running = true;
- }
+ //log("entered Thread::start()", LogThread);
+ MutexLocker l1(_main_mutex);
+ if (!_running) {
+ {
+ MutexLocker l2(_stop_mutex);
+ _stop = false;
+ }
+
+ int ret = pthread_create(&_thread, NULL, start_thread, this);
+ if (ret == 0)
+ _running = true;
+ else
+ throw String("Error starting thread: ") + String(strerror(ret));
+ //log(String("created thread ") + (int) _thread, LogThread);
+ }
}
-void
+void
Thread::stop()
{
- // log(String("entered Thread::stop() for thread ") + (int) _thread, LogThread);
- MutexLocker l1(_main_mutex);
- if (_running) {
- {
- // log(String("Thread::stop(): locking stop mutex for thread ") + (int) _thread, LogThread);
- MutexLocker l2(_stop_mutex);
- _stop = true;
- }
- // log(String("entering pthread_join() for thread ") + (int) _thread, LogThread);
- if (pthread_join(_thread, NULL))
- throw String("error stopping thread");
- // log(String("stopped thread ") + (int) _thread, LogThread);
- _running = false;
- }
+ //log(String("entered Thread::stop() for thread ") + (int) _thread, LogThread);
+ MutexLocker l1(_main_mutex);
+ if (_running) {
+ {
+ //log(String("Thread::stop(): locking stop mutex for thread ") + (int) _thread, LogThread);
+ MutexLocker l2(_stop_mutex);
+ _stop = true;
+ }
+ //log(String("entering pthread_join() for thread ") + (int) _thread, LogThread);
+
+ if (pthread_join(_thread, NULL))
+ throw String("error stopping thread");
+ //log(String("stopped thread ") + (int) _thread, LogThread);
+ _running = false;
+ }
}
-bool
+bool
Thread::running()
{
- // log(String("entered Thread::running() for thread ") + (int) _thread, LogThread);
- MutexLocker l1(_main_mutex);
- bool ret = _running;
- return ret;
+ //log(String("entered Thread::running() for thread ") + (int) _thread, LogThread);
+ MutexLocker l1(_main_mutex);
+ bool ret = _running;
+ return ret;
}
-bool
+bool
Thread::shouldStop()
{
- // log(String("entered Thread::shouldStop() for thread ") + (int) _thread, LogThread);
- MutexLocker l(_stop_mutex);
- bool ret = _stop;
- return ret;
+ //log(String("entered Thread::shouldStop() for thread ") + (int) _thread, LogThread);
+ MutexLocker l(_stop_mutex);
+ bool ret = _stop;
+ return ret;
}
--- conga/ricci/common/Time.cpp 2007/03/21 20:12:58 1.5
+++ conga/ricci/common/Time.cpp 2007/08/31 04:57:37 1.6
@@ -13,7 +13,7 @@
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -27,48 +27,54 @@
#include <sys/time.h>
-unsigned int
+unsigned int
time_sec()
{
- struct timeval t;
- gettimeofday(&t, NULL);
- return t.tv_sec;
+ struct timeval t;
+ gettimeofday(&t, NULL);
+
+ return t.tv_sec;
}
-unsigned int
+unsigned int
time_mil()
{
- struct timeval t;
- gettimeofday(&t, NULL);
- return t.tv_sec*1000 + t.tv_usec/1000;
+ struct timeval t;
+ gettimeofday(&t, NULL);
+
+ return t.tv_sec * 1000 + t.tv_usec / 1000;
}
-String
+String
time_formated()
{
- char time[64];
- time_t t = time_sec();
- ctime_r(&t, time);
- String m(time);
- return m.substr(0, m.size()-1);
+ char time[64];
+ time_t t = time_sec();
+
+ ctime_r(&t, time);
+ String m(time);
+ return m.substr(0, m.size() - 1);
}
void
sleep_mil(unsigned char num)
{
- struct timespec req, rem;
- rem.tv_sec = 0;
- rem.tv_nsec = num * 1000 * 1000;
- do {
- req.tv_sec = rem.tv_sec;
- req.tv_nsec = rem.tv_nsec;
- } while (nanosleep(&req, &rem) == -1 && errno == EINTR);
+ struct timespec req, rem;
+
+ rem.tv_sec = 0;
+ rem.tv_nsec = num * 1000 * 1000;
+
+ do {
+ req.tv_sec = rem.tv_sec;
+ req.tv_nsec = rem.tv_nsec;
+ } while (nanosleep(&req, &rem) == -1 && errno == EINTR);
}
void
sleep_sec(unsigned char num)
{
- for (unsigned char i=0; i<num; i++)
- for (int j=0; j<4; j++)
- sleep_mil(250);
+ for (unsigned char i = 0 ; i < num ; i++) {
+ for (int j = 0 ; j < 4 ; j++)
+ sleep_mil(250);
+ }
}
--- conga/ricci/common/Variable.cpp 2006/09/26 01:04:20 1.8
+++ conga/ricci/common/Variable.cpp 2007/08/31 04:57:37 1.9
@@ -1,5 +1,5 @@
/*
- Copyright Red Hat, Inc. 2005
+ Copyright Red Hat, Inc. 2005-2007
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -13,7 +13,7 @@
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -31,698 +31,750 @@
using namespace std;
-
-// ##### class Variable #####
+// ##### class Variable #####
Variable::Variable(const XMLObject& xml)
{
- if (xml.tag() != VARIABLE_TAG)
- throw String("not a variable");
-
- _name = xml.get_attr("name");
- if (_name == "")
- throw String("invalid variable name");
-
- _mutable = (xml.get_attr("mutable") == "true");
-
- // _validator = Validator(xml); // incoming constraints are not to be trusted anyhow
-
- // conditionals
- _cond_bool_if = xml.get_attr("if_bool");
- _cond_bool_ifnot = xml.get_attr("ifnot_bool");
-
- String type(xml.get_attr("type"));
- if (type == VARIABLE_INT) {
- _type = Integer;
- _val_int = utils::to_long(xml.get_attr("value").c_str());
- } else if (type == VARIABLE_INT_SEL) {
- _type = IntSel;
- _val_int = utils::to_long(xml.get_attr("value").c_str());
- } else if (type == VARIABLE_BOOL) {
- _type = Boolean;
- _val_bool = (xml.get_attr("value") == "true");
- } else if (type == VARIABLE_STR) {
- _type = StringVar;
- _val_str = xml.get_attr("value");
- } else if (type == VARIABLE_STR_SEL) {
- _type = StrSel;
- _val_str = xml.get_attr("value");
- } else if (type == VARIABLE_XML) {
- _type = XMLVar;
- if (xml.children().empty())
- throw String("variable missing XML value");
- else
- _val_xml = xml.children().front();
- } else if (type == VARIABLE_LIST_INT) {
- _type = ListInt;
- for (list<XMLObject>::const_iterator iter = xml.children().begin();
- iter != xml.children().end();
- iter++) {
- const XMLObject& node = *iter;
- if (node.tag() == VARIABLE_LISTENTRY)
- _val_list_int.push_back(utils::to_long(node.get_attr("value").c_str()));
- }
- } else if (type == VARIABLE_LIST_STR) {
- _type = ListStr;
- for (list<XMLObject>::const_iterator iter = xml.children().begin();
- iter != xml.children().end();
- iter++) {
- const XMLObject& node = *iter;
- if (node.tag() == VARIABLE_LISTENTRY)
- _val_list_str.push_back(node.get_attr("value"));
- }
- } else if (type == VARIABLE_LIST_XML) {
- _type = ListXML;
- for (list<XMLObject>::const_iterator iter = xml.children().begin();
- iter != xml.children().end();
- iter++)
- _val_list_XML.push_back(*iter);
- } else
- throw String("invalid variable type");
-
-
-}
-
+ if (xml.tag() != VARIABLE_TAG)
+ throw String("not a variable");
+ _name = xml.get_attr("name");
+ if (_name == "")
+ throw String("invalid variable name");
+
+ _mutable = (xml.get_attr("mutable") == "true");
+
+ //_validator = Validator(xml); // incoming constraints are not to be trusted anyhow
+
+ // conditionals
+ _cond_bool_if = xml.get_attr("if_bool");
+ _cond_bool_ifnot = xml.get_attr("ifnot_bool");
+
+ String type(xml.get_attr("type"));
+ if (type == VARIABLE_INT) {
+ _type = Integer;
+ _val_int = utils::to_long(xml.get_attr("value").c_str());
+ } else if (type == VARIABLE_INT_SEL) {
+ _type = IntSel;
+ _val_int = utils::to_long(xml.get_attr("value").c_str());
+ } else if (type == VARIABLE_BOOL) {
+ _type = Boolean;
+ _val_bool = (xml.get_attr("value") == "true");
+ } else if (type == VARIABLE_STR) {
+ _type = StringVar;
+ _val_str = xml.get_attr("value");
+ } else if (type == VARIABLE_STR_SEL) {
+ _type = StrSel;
+ _val_str = xml.get_attr("value");
+ } else if (type == VARIABLE_XML) {
+ _type = XMLVar;
+ if (xml.children().empty())
+ throw String("variable missing XML value");
+ else
+ _val_xml = xml.children().front();
+ } else if (type == VARIABLE_LIST_INT) {
+ _type = ListInt;
+ for (list<XMLObject>::const_iterator
+ iter = xml.children().begin() ;
+ iter != xml.children().end() ;
+ iter++)
+ {
+ const XMLObject& node = *iter;
+
+ if (node.tag() == VARIABLE_LISTENTRY)
+ _val_list_int.push_back(utils::to_long(node.get_attr("value").c_str()));
+ }
+ } else if (type == VARIABLE_LIST_STR) {
+ _type = ListStr;
+ for (list<XMLObject>::const_iterator
+ iter = xml.children().begin() ;
+ iter != xml.children().end() ;
+ iter++)
+ {
+ const XMLObject& node = *iter;
+
+ if (node.tag() == VARIABLE_LISTENTRY)
+ _val_list_str.push_back(node.get_attr("value"));
+ }
+ } else if (type == VARIABLE_LIST_XML) {
+ _type = ListXML;
+ for (list<XMLObject>::const_iterator
+ iter = xml.children().begin() ;
+ iter != xml.children().end() ;
+ iter++)
+ {
+ _val_list_XML.push_back(*iter);
+ }
+ } else
+ throw String("invalid variable type");
+}
// integer
-Variable::Variable(const String& name,
- long long value) :
- _name(name),
- _type(Integer),
- _mutable(false)
-{
- set_value(value);
-}
-Variable::Variable(const String& name,
- long long value,
- long long min,
- long long max,
- long long step) :
- _name(name),
- _type(Integer),
- _mutable(true),
- _validator(min, max, step)
+Variable::Variable(const String& name, long long value) :
+ _name(name),
+ _type(Integer),
+ _mutable(false)
+{
+ set_value(value);
+}
+
+Variable::Variable( const String& name,
+ long long value,
+ long long min,
+ long long max,
+ long long step) :
+ _name(name),
+ _type(Integer),
+ _mutable(true),
+ _validator(min, max, step)
{
- set_value(value);
+ set_value(value);
}
-
// integer selector
-Variable::Variable(const String& name,
- long long value,
- const std::list<long long>& valid_values) :
- _name(name),
- _type(IntSel),
- _mutable(true),
- _validator(valid_values)
+Variable::Variable( const String& name,
+ long long value,
+ const std::list<long long>& valid_values) :
+ _name(name),
+ _type(IntSel),
+ _mutable(true),
+ _validator(valid_values)
{
- set_value(value);
+ set_value(value);
}
-
// integer list
-Variable::Variable(const String& name,
- const std::list<long long>& value,
- bool mutabl) :
- _name(name),
- _type(ListInt),
- _mutable(mutabl)
+Variable::Variable( const String& name,
+ const std::list<long long>& value,
+ bool mutabl) :
+ _name(name),
+ _type(ListInt),
+ _mutable(mutabl)
{
- set_value(value);
+ set_value(value);
}
// boolean
-Variable::Variable(const String& name,
- bool value,
- bool mutabl) :
- _name(name),
- _type(Boolean),
- _mutable(mutabl)
+Variable::Variable(const String& name, bool value, bool mutabl) :
+ _name(name),
+ _type(Boolean),
+ _mutable(mutabl)
{
- set_value(value);
+ set_value(value);
}
-
// string
-Variable::Variable(const String& name,
- const String& value) :
- _name(name),
- _type(StringVar),
- _mutable(false)
-{
- set_value(value);
-}
-Variable::Variable(const String& name,
- const String& value,
- long long min_length,
- long long max_length,
- const String& illegal_chars,
- const std::list<String>& reserved_words) :
- _name(name),
- _type(StringVar),
- _mutable(true),
- _validator(min_length,
- max_length,
- illegal_chars,
- reserved_words)
+Variable::Variable(const String& name, const String& value) :
+ _name(name),
+ _type(StringVar),
+ _mutable(false)
+{
+ set_value(value);
+}
+
+Variable::Variable( const String& name,
+ const String& value,
+ long long min_length,
+ long long max_length,
+ const String& illegal_chars,
+ const std::list<String>& reserved_words) :
+ _name(name),
+ _type(StringVar),
+ _mutable(true),
+ _validator(min_length, max_length, illegal_chars, reserved_words)
{
- set_value(value);
+ set_value(value);
}
-
// string selector
-Variable::Variable(const String& name,
- const String& value,
- const std::list<String>& valid_values) :
- _name(name),
- _type(StrSel),
- _mutable(true),
- _validator(valid_values)
+Variable::Variable( const String& name,
+ const String& value,
+ const std::list<String>& valid_values) :
+ _name(name),
+ _type(StrSel),
+ _mutable(true),
+ _validator(valid_values)
{
- set_value(value);
+ set_value(value);
}
-
// string list
-Variable::Variable(const String& name,
- const std::list<String>& value,
- bool mutabl) :
- _name(name),
- _type(ListStr),
- _mutable(mutabl)
+Variable::Variable( const String& name,
+ const std::list<String>& value,
+ bool mutabl) :
+ _name(name),
+ _type(ListStr),
+ _mutable(mutabl)
{
- set_value(value);
+ set_value(value);
}
// XML
-Variable::Variable(const String& name,
- const XMLObject& value) :
- _name(name),
- _type(XMLVar),
- _mutable(false)
+Variable::Variable(const String& name, const XMLObject& value) :
+ _name(name),
+ _type(XMLVar),
+ _mutable(false)
{
- set_value(value);
+ set_value(value);
}
// XML list
-Variable::Variable(const String& name,
- const std::list<XMLObject>& value) :
- _name(name),
- _type(ListXML),
- _mutable(false)
+Variable::Variable(const String& name, const std::list<XMLObject>& value) :
+ _name(name),
+ _type(ListXML),
+ _mutable(false)
{
- set_value(value);
+ set_value(value);
}
Variable::~Variable()
{}
-
-void
+void
Variable::set_conditional_bool_if(const String& bool_name)
{
- if (name() == bool_name)
- throw String("circular conditional: ") + bool_name;
- _cond_bool_if = bool_name;
+ if (name() == bool_name)
+ throw String("circular conditional: ") + bool_name;
+ _cond_bool_if = bool_name;
}
-void
+void
Variable::set_conditional_bool_ifnot(const String& bool_name)
{
- if (name() == bool_name)
- throw String("circular conditional: ") + bool_name;
- _cond_bool_ifnot = bool_name;
+ if (name() == bool_name)
+ throw String("circular conditional: ") + bool_name;
+ _cond_bool_ifnot = bool_name;
}
-
-long long
+long long
Variable::get_int() const
-{
- if (_type != Integer && _type != IntSel)
- throw String("variable ") + name() + " is not of " + VARIABLE_INT + " type";
- return _val_int;
+{
+ if (_type != Integer && _type != IntSel) {
+ throw String("variable ") + name() + " is not of "
+ + VARIABLE_INT + " type";
+ }
+ return _val_int;
}
+
void
Variable::set_value(long long value)
{
- if (_type != Integer && _type != IntSel)
- throw String("variable ") + name() + " is not of " + VARIABLE_INT + " type";
- _validator.validate(value);
- _val_int = value;
+ if (_type != Integer && _type != IntSel) {
+ throw String("variable ") + name() + " is not of "
+ + VARIABLE_INT + " type";
+ }
+ _validator.validate(value);
+ _val_int = value;
}
-bool
+bool
Variable::get_bool() const
{
- if (_type != Boolean)
- throw String("variable ") + name() + " is not of " + VARIABLE_BOOL + " type";
- return _val_bool;
+ if (_type != Boolean) {
+ throw String("variable ") + name() + " is not of "
+ + VARIABLE_BOOL + " type";
+ }
+ return _val_bool;
}
+
void
Variable::set_value(bool value)
{
- if (_type != Boolean)
- throw String("variable ") + name() + " is not of " + VARIABLE_BOOL + " type";
- _validator.validate(value);
- _val_bool = value;
+ if (_type != Boolean) {
+ throw String("variable ") + name() + " is not of "
+ + VARIABLE_BOOL + " type";
+ }
+ _validator.validate(value);
+ _val_bool = value;
}
-String
+String
Variable::get_string() const
{
- if (_type != StringVar && _type != StrSel)
- throw String("variable ") + name() + " is not of " + VARIABLE_STR + " type";
- return _val_str;
+ if (_type != StringVar && _type != StrSel) {
+ throw String("variable ") + name() + " is not of "
+ + VARIABLE_STR + " type";
+ }
+ return _val_str;
}
+
void
Variable::set_value(const String& value)
{
- if (_type != StringVar && _type != StrSel)
- throw String("variable ") + name() + " is not of " + VARIABLE_STR + " type";
- _validator.validate(value);
- _val_str = value;
+ if (_type != StringVar && _type != StrSel) {
+ throw String("variable ") + name() + " is not of "
+ + VARIABLE_STR + " type";
+ }
+ _validator.validate(value);
+ _val_str = value;
}
-XMLObject
+XMLObject
Variable::get_XML() const
-{
- if (_type != XMLVar)
- throw String("variable ") + name() + " is not of " + VARIABLE_XML + " type";
- return _val_xml;
+{
+ if (_type != XMLVar) {
+ throw String("variable ") + name() + " is not of "
+ + VARIABLE_XML + " type";
+ }
+ return _val_xml;
}
+
void
Variable::set_value(const XMLObject& value)
{
- if (_type != XMLVar)
- throw String("variable ") + name() + " is not of " + VARIABLE_XML + " type";
- _validator.validate(value);
- _val_xml = value;
+ if (_type != XMLVar) {
+ throw String("variable ") + name() + " is not of "
+ + VARIABLE_XML + " type";
+ }
+ _validator.validate(value);
+ _val_xml = value;
}
-std::list<long long>
+std::list<long long>
Variable::get_list_int() const
{
- if (_type != ListInt)
- throw String("variable ") + name() + " is not of " + VARIABLE_LIST_INT + " type";
- return _val_list_int;
+ if (_type != ListInt) {
+ throw String("variable ") + name() + " is not of "
+ + VARIABLE_LIST_INT + " type";
+ }
+ return _val_list_int;
}
+
void
Variable::set_value(const std::list<long long>& value)
{
- if (_type != ListInt)
- throw String("variable ") + name() + " is not of " + VARIABLE_LIST_INT + " type";
- _validator.validate(value);
- _val_list_int = value;
+ if (_type != ListInt) {
+ throw String("variable ") + name() + " is not of "
+ + VARIABLE_LIST_INT + " type";
+ }
+ _validator.validate(value);
+ _val_list_int = value;
}
-std::list<String>
+std::list<String>
Variable::get_list_str() const
{
- if (_type != ListStr)
- throw String("variable ") + name() + " is not of " + VARIABLE_LIST_STR + " type";
- return _val_list_str;
+ if (_type != ListStr) {
+ throw String("variable ") + name() + " is not of "
+ + VARIABLE_LIST_STR + " type";
+ }
+ return _val_list_str;
}
+
void
Variable::set_value(const std::list<String>& value)
{
- if (_type != ListStr)
- throw String("variable ") + name() + " is not of " + VARIABLE_LIST_STR + " type";
- _validator.validate(value);
- _val_list_str = value;
+ if (_type != ListStr) {
+ throw String("variable ") + name() + " is not of "
+ + VARIABLE_LIST_STR + " type";
+ }
+ _validator.validate(value);
+ _val_list_str = value;
}
std::list<XMLObject>
Variable::get_list_XML() const
{
- if (_type != ListXML)
- throw String("variable ") + name() + " is not of " + VARIABLE_LIST_XML + " type";
- return _val_list_XML;
+ if (_type != ListXML) {
+ throw String("variable ") + name() + " is not of "
+ + VARIABLE_LIST_XML + " type";
+ }
+ return _val_list_XML;
}
+
void
Variable::set_value(const std::list<XMLObject>& value)
{
- if (_type != ListXML)
- throw String("variable ") + name() + " is not of " + VARIABLE_LIST_XML + " type";
- _validator.validate(value);
- _val_list_XML = value;
+ if (_type != ListXML) {
+ throw String("variable ") + name() + " is not of "
+ + VARIABLE_LIST_XML + " type";
+ }
+ _validator.validate(value);
+ _val_list_XML = value;
}
-bool
+bool
Variable::equal(const Variable& var) const
{
- if (type() != var.type() ||
- name() != var.name() ||
- get_conditional_bool_if() != var.get_conditional_bool_if() ||
- get_conditional_bool_ifnot() != var.get_conditional_bool_ifnot())
- return false;
- switch (var.type()) {
- case Integer:
- case IntSel:
- return get_int() == var.get_int();
- case Boolean:
- return get_bool() == var.get_bool();
- case StringVar:
- case StrSel:
- return get_string() == var.get_string();
- case XMLVar:
- return get_XML() == var.get_XML();
- case ListInt:
- return get_list_int() == var.get_list_int();
- case ListStr:
- return get_list_str() == var.get_list_str();
- default:
- return false;
- }
- return false;
+ if (type() != var.type() ||
+ name() != var.name() ||
+ get_conditional_bool_if() != var.get_conditional_bool_if() ||
+ get_conditional_bool_ifnot() != var.get_conditional_bool_ifnot())
+ {
+ return false;
+ }
+
+ switch (var.type()) {
+ case Integer:
+ case IntSel:
+ return get_int() == var.get_int();
+
+ case Boolean:
+ return get_bool() == var.get_bool();
+
+ case StringVar:
+ case StrSel:
+ return get_string() == var.get_string();
+
+ case XMLVar:
+ return get_XML() == var.get_XML();
+
+ case ListInt:
+ return get_list_int() == var.get_list_int();
+
+ case ListStr:
+ return get_list_str() == var.get_list_str();
+
+ default:
+ return false;
+ }
+ return false;
}
-bool
+bool
Variable::validate() const
{
- return validate(*this);
+ return validate(*this);
}
-bool
+bool
Variable::validate(const Variable& var) const
{
- if (name() != var.name())
- throw String("different variable names");
- if (type() != var.type())
- throw String("invalid variable type");
- if (get_conditional_bool_if() != var.get_conditional_bool_if() ||
- get_conditional_bool_ifnot() != var.get_conditional_bool_ifnot())
- throw String("invalid bool conditional");
-
- switch (var.type()) {
- case Integer:
- case IntSel:
- return _validator.validate(var.get_int());
- case Boolean:
- return _validator.validate(var.get_bool());
- case StringVar:
- case StrSel:
- return _validator.validate(var.get_string());
- case XMLVar:
- return _validator.validate(var.get_XML());
- case ListInt:
- return _validator.validate(var.get_list_int());
- case ListStr:
- return _validator.validate(var.get_list_str());
- default:
- return false;
- }
+ if (name() != var.name())
+ throw String("different variable names");
+ if (type() != var.type())
+ throw String("invalid variable type");
+
+ if (get_conditional_bool_if() != var.get_conditional_bool_if() ||
+ get_conditional_bool_ifnot() != var.get_conditional_bool_ifnot())
+ {
+ throw String("invalid bool conditional");
+ }
+
+ switch (var.type()) {
+ case Integer:
+ case IntSel:
+ return _validator.validate(var.get_int());
+
+ case Boolean:
+ return _validator.validate(var.get_bool());
+
+ case StringVar:
+ case StrSel:
+ return _validator.validate(var.get_string());
+
+ case XMLVar:
+ return _validator.validate(var.get_XML());
+
+ case ListInt:
+ return _validator.validate(var.get_list_int());
+
+ case ListStr:
+ return _validator.validate(var.get_list_str());
+
+ default:
+ return false;
+ }
}
-
XMLObject
Variable::xml() const
{
- XMLObject xml(VARIABLE_TAG);
-
- xml.set_attr("name", name());
- xml.set_attr("mutable", (_mutable)?"true":"false");
-
- int i = 0;
- switch (_type) {
- case Integer:
- xml.set_attr("type", VARIABLE_INT);
- xml.set_attr("value", utils::to_string(_val_int));
- break;
- case IntSel:
- xml.set_attr("type", VARIABLE_INT_SEL);
- xml.set_attr("value", utils::to_string(_val_int));
- break;
- case Boolean:
- xml.set_attr("type", VARIABLE_BOOL);
- xml.set_attr("value", utils::to_string(_val_bool));
- break;
- case StringVar:
- xml.set_attr("type", VARIABLE_STR);
- xml.set_attr("value", _val_str);
- break;
- case StrSel:
- xml.set_attr("type", VARIABLE_STR_SEL);
- xml.set_attr("value", _val_str);
- break;
- case XMLVar:
- xml.set_attr("type", VARIABLE_XML);
- xml.add_child(_val_xml);
- break;
- case ListInt:
- xml.set_attr("type", VARIABLE_LIST_INT);
- i = 0;
- for (list<long long>::const_iterator iter = _val_list_int.begin();
- iter != _val_list_int.end();
- iter++, i++) {
- XMLObject xml_t = XMLObject(VARIABLE_LISTENTRY);
- // xml_t.set_attr("index", utils::to_string(i));
- xml_t.set_attr("value", utils::to_string(*iter));
- xml.add_child(xml_t);
- }
- break;
- case ListStr:
- xml.set_attr("type", VARIABLE_LIST_STR);
- i = 0;
- for (list<String>::const_iterator iter = _val_list_str.begin();
- iter != _val_list_str.end();
- iter++, i++) {
- XMLObject xml_t = XMLObject(VARIABLE_LISTENTRY);
- // xml_t.set_attr("index", utils::to_string(i));
- xml_t.set_attr("value", *iter);
- xml.add_child(xml_t);
- }
- break;
- case ListXML:
- xml.set_attr("type", VARIABLE_LIST_XML);
- i = 0;
- for (list<XMLObject>::const_iterator iter = _val_list_XML.begin();
- iter != _val_list_XML.end();
- iter++, i++) {
- xml.add_child(*iter);
- }
- break;
-
- default:
- throw String("invalid variable type");
- break;
- }
-
- if (_mutable)
- _validator.export_params(xml);
-
- if (!_cond_bool_if.empty())
- xml.set_attr("if_bool", _cond_bool_if);
- if (!_cond_bool_ifnot.empty())
- xml.set_attr("ifnot_bool", _cond_bool_ifnot);
-
- return xml;
-}
-
+ XMLObject xml(VARIABLE_TAG);
+ xml.set_attr("name", name());
+ xml.set_attr("mutable", (_mutable) ? "true" : "false");
+ int i = 0;
+ switch (_type) {
+ case Integer:
+ xml.set_attr("type", VARIABLE_INT);
+ xml.set_attr("value", utils::to_string(_val_int));
+ break;
+
+ case IntSel:
+ xml.set_attr("type", VARIABLE_INT_SEL);
+ xml.set_attr("value", utils::to_string(_val_int));
+ break;
+
+ case Boolean:
+ xml.set_attr("type", VARIABLE_BOOL);
+ xml.set_attr("value", utils::to_string(_val_bool));
+ break;
+
+ case StringVar:
+ xml.set_attr("type", VARIABLE_STR);
+ xml.set_attr("value", _val_str);
+ break;
+
+ case StrSel:
+ xml.set_attr("type", VARIABLE_STR_SEL);
+ xml.set_attr("value", _val_str);
+ break;
+
+ case XMLVar:
+ xml.set_attr("type", VARIABLE_XML);
+ xml.add_child(_val_xml);
+ break;
+
+ case ListInt:
+ xml.set_attr("type", VARIABLE_LIST_INT);
+ i = 0;
+ for (list<long long>::const_iterator
+ iter = _val_list_int.begin() ;
+ iter != _val_list_int.end() ;
+ iter++, i++)
+ {
+ XMLObject xml_t = XMLObject(VARIABLE_LISTENTRY);
+ //xml_t.set_attr("index", utils::to_string(i));
+ xml_t.set_attr("value", utils::to_string(*iter));
+ xml.add_child(xml_t);
+ }
+ break;
+
+ case ListStr:
+ xml.set_attr("type", VARIABLE_LIST_STR);
+
+ i = 0;
+ for (list<String>::const_iterator
+ iter = _val_list_str.begin() ;
+ iter != _val_list_str.end() ;
+ iter++, i++)
+ {
+ XMLObject xml_t = XMLObject(VARIABLE_LISTENTRY);
+ //xml_t.set_attr("index", utils::to_string(i));
+ xml_t.set_attr("value", *iter);
+ xml.add_child(xml_t);
+ }
+ break;
+
+ case ListXML:
+ xml.set_attr("type", VARIABLE_LIST_XML);
+ i = 0;
+ for (list<XMLObject>::const_iterator
+ iter = _val_list_XML.begin() ;
+ iter != _val_list_XML.end() ;
+ iter++, i++)
+ {
+ xml.add_child(*iter);
+ }
+ break;
+
+ default:
+ throw String("invalid variable type");
+ break;
+ }
+
+ if (_mutable)
+ _validator.export_params(xml);
+
+ if (!_cond_bool_if.empty())
+ xml.set_attr("if_bool", _cond_bool_if);
+ if (!_cond_bool_ifnot.empty())
+ xml.set_attr("ifnot_bool", _cond_bool_ifnot);
+ return xml;
+}
-// ##### class Validator #####
+// ##### class Validator #####
// always valid
Validator::Validator() :
- _always_valid(true),
- _integer(false),
- _int_sel(false),
- _string(false),
- _string_sel(false)
+ _always_valid(true),
+ _integer(false),
+ _int_sel(false),
+ _string(false),
+ _string_sel(false)
{}
// integer
-Validator::Validator(long long min,
- long long max,
- long long step) :
- _always_valid(false),
- _integer(true),
- _int_sel(false),
- _string(false),
- _string_sel(false)
-{
- _min = min;
- _max = max;
- _step = step;
+Validator::Validator(long long min, long long max, long long step) :
+ _always_valid(false),
+ _integer(true),
+ _int_sel(false),
+ _string(false),
+ _string_sel(false)
+{
+ _min = min;
+ _max = max;
+ _step = step;
}
// integer selector
Validator::Validator(const std::list<long long>& valid_values) :
- _always_valid(false),
- _integer(false),
- _int_sel(true),
- _string(false),
- _string_sel(false)
+ _always_valid(false),
+ _integer(false),
+ _int_sel(true),
+ _string(false),
+ _string_sel(false)
{
- _valid_ints = valid_values;
+ _valid_ints = valid_values;
}
// string
-Validator::Validator(long long min_length,
- long long max_length,
- const String& illegal_chars,
- const std::list<String>& reserved_words) :
- _always_valid(false),
- _integer(false),
- _int_sel(false),
- _string(true),
- _string_sel(false)
-{
- _min_length = min_length;
- _max_length = max_length;
- _illegal_chars = illegal_chars;
- _reserved_words = reserved_words;
+Validator::Validator( long long min_length,
+ long long max_length,
+ const String& illegal_chars,
+ const std::list<String>& reserved_words) :
+ _always_valid(false),
+ _integer(false),
+ _int_sel(false),
+ _string(true),
+ _string_sel(false)
+{
+ _min_length = min_length;
+ _max_length = max_length;
+ _illegal_chars = illegal_chars;
+ _reserved_words = reserved_words;
}
// string selector
Validator::Validator(const std::list<String>& valid_words) :
- _always_valid(false),
- _integer(false),
- _int_sel(false),
- _string(false),
- _string_sel(true)
+ _always_valid(false),
+ _integer(false),
+ _int_sel(false),
+ _string(false),
+ _string_sel(true)
{
- _valid_words = valid_words;
+ _valid_words = valid_words;
}
Validator::~Validator()
{}
-
-bool
+bool
Validator::validate(long long value) const
{
- if (_always_valid)
- return true;
- else if (_integer) {
- if (value >= _min &&
- value <= _max &&
- value % _step == 0)
- return true;
- else
- return false;
- } else if (_int_sel) {
- if (find(_valid_ints.begin(), _valid_ints.end(), value) == _valid_ints.end())
- return false;
- else
- return true;
- } else
- throw String("not long long");
+ if (_always_valid)
+ return true;
+ else if (_integer) {
+ if (value >= _min && value <= _max && value % _step == 0)
+ return true;
+ else
+ return false;
+ } else if (_int_sel) {
+ if (find(_valid_ints.begin(), _valid_ints.end(), value) == _valid_ints.end())
+ return false;
+ else
+ return true;
+ } else
+ throw String("not long long");
}
-bool
+bool
Validator::validate(const String& value) const
{
- if (_always_valid)
- return true;
- else if (_string) {
- if ((long long) value.size() >= _min_length &&
- (long long) value.size() <= _max_length &&
- value.find_first_of(_illegal_chars) == value.npos &&
- find(_reserved_words.begin(),
- _reserved_words.end(),
- value) == _reserved_words.end())
- return true;
- else
- return false;
- } else if (_string_sel) {
- if (find(_valid_words.begin(), _valid_words.end(), value) == _valid_words.end())
- return false;
- else
- return true;
- } else
- throw String("not string");
+ if (_always_valid)
+ return true;
+ else if (_string) {
+ if ((long long) value.size() >= _min_length &&
+ (long long) value.size() <= _max_length &&
+ value.find_first_of(_illegal_chars) == value.npos &&
+ find(_reserved_words.begin(), _reserved_words.end(), value) ==
+ _reserved_words.end())
+ {
+ return true;
+ } else
+ return false;
+ } else if (_string_sel) {
+ if (find(_valid_words.begin(), _valid_words.end(), value) == _valid_words.end())
+ return false;
+ else
+ return true;
+ } else
+ throw String("not string");
}
-bool
+bool
Validator::validate(bool value) const
{
- if (_always_valid)
- return true;
- else
- return false;
+ if (_always_valid)
+ return true;
+
+ return false;
}
-bool
+bool
Validator::validate(const XMLObject& value) const
{
- if (_always_valid)
- return true;
- else
- return false;
+ if (_always_valid)
+ return true;
+
+ return false;
}
-bool
+bool
Validator::validate(const std::list<long long>& value) const
{
- if (_always_valid)
- return true;
- else
- return false;
+ if (_always_valid)
+ return true;
+
+ return false;
}
-bool
+bool
Validator::validate(const std::list<String>& value) const
{
- if (_always_valid)
- return true;
- else
- return false;
+ if (_always_valid)
+ return true;
+
+ return false;
}
-bool
+bool
Validator::validate(const std::list<XMLObject>& value) const
{
- if (_always_valid)
- return true;
- else
- return false;
-}
-
+ if (_always_valid)
+ return true;
+ return false;
+}
-void
+void
Validator::export_params(XMLObject& xml) const
{
- if (_integer) {
- xml.set_attr("min", utils::to_string(_min));
- xml.set_attr("max", utils::to_string(_max));
- xml.set_attr("step", utils::to_string(_step));
- } else if (_int_sel) {
- for (list<long long>::const_iterator iter = _valid_ints.begin();
- iter != _valid_ints.end();
- iter++) {
- XMLObject entry("listentry");
- entry.set_attr("value", utils::to_string(*iter));
- xml.add_child(entry);
- }
- } else if (_string) {
- xml.set_attr("min_length", utils::to_string(_min_length));
- xml.set_attr("max_length", utils::to_string(_max_length));
- xml.set_attr("illegal_chars", _illegal_chars);
- String reserved;
- for (list<String>::const_iterator iter = _reserved_words.begin();
- iter != _reserved_words.end();
- iter++) {
- if (!reserved.empty())
- reserved += ";";
- reserved += *iter;
- }
- xml.set_attr("reserved_words", reserved);
- } else if (_string_sel) {
- for (list<String>::const_iterator iter = _valid_words.begin();
- iter != _valid_words.end();
- iter++) {
- XMLObject entry("listentry");
- entry.set_attr("value", *iter);
- xml.add_child(entry);
- }
- }
+ if (_integer) {
+ xml.set_attr("min", utils::to_string(_min));
+ xml.set_attr("max", utils::to_string(_max));
+ xml.set_attr("step", utils::to_string(_step));
+ } else if (_int_sel) {
+ for (list<long long>::const_iterator
+ iter = _valid_ints.begin() ;
+ iter != _valid_ints.end() ;
+ iter++)
+ {
+ XMLObject entry("listentry");
+ entry.set_attr("value", utils::to_string(*iter));
+ xml.add_child(entry);
+ }
+ } else if (_string) {
+ xml.set_attr("min_length", utils::to_string(_min_length));
+ xml.set_attr("max_length", utils::to_string(_max_length));
+ xml.set_attr("illegal_chars", _illegal_chars);
+ String reserved;
+ for (list<String>::const_iterator
+ iter = _reserved_words.begin() ;
+ iter != _reserved_words.end() ;
+ iter++)
+ {
+ if (!reserved.empty())
+ reserved += ";";
+ reserved += *iter;
+ }
+ xml.set_attr("reserved_words", reserved);
+ } else if (_string_sel) {
+ for (list<String>::const_iterator
+ iter = _valid_words.begin() ;
+ iter != _valid_words.end() ;
+ iter++)
+ {
+ XMLObject entry("listentry");
+ entry.set_attr("value", *iter);
+ xml.add_child(entry);
+ }
+ }
}
--- conga/ricci/common/XML.cpp 2007/07/27 16:43:47 1.10
+++ conga/ricci/common/XML.cpp 2007/08/31 04:57:37 1.11
@@ -1,5 +1,5 @@
/*
- Copyright Red Hat, Inc. 2005
+ Copyright Red Hat, Inc. 2005-2007
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -13,7 +13,7 @@
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -36,242 +36,238 @@
-static String
-escape_chars(const String&);
-static String
-invert_chars(const String&);
-
-
-
+static String escape_chars(const String&);
+static String invert_chars(const String&);
XMLObject::XMLObject(const String& elem_name) :
- _tag(elem_name)
+ _tag(elem_name)
{}
XMLObject::~XMLObject()
{}
-
-bool
+bool
XMLObject::operator== (const XMLObject& obj) const
{
- if (children() != obj.children())
- return false;
- if (tag() != obj.tag())
- return false;
- if (attrs() != obj.attrs())
- return false;
- return true;
+ if (children() != obj.children())
+ return false;
+ if (tag() != obj.tag())
+ return false;
+ if (attrs() != obj.attrs())
+ return false;
+ return true;
}
-bool
+bool
XMLObject::has_attr(const String& attr_name) const
{
- return _attrs.find(attr_name) != _attrs.end();
+ return _attrs.find(attr_name) != _attrs.end();
}
-String
+String
XMLObject::set_attr(const String& attr_name, const String& value)
{
- String ret = _attrs[attr_name];
- _attrs[attr_name] = value;
- return ret;
+ String ret = _attrs[attr_name];
+ _attrs[attr_name] = value;
+ return ret;
}
-String
+String
XMLObject::get_attr(const String& attr_name) const
{
- map<String, String>::const_iterator iter = _attrs.find(attr_name);
- if (iter == _attrs.end())
- return "";
- else
- return iter->second;
+ map<String, String>::const_iterator iter = _attrs.find(attr_name);
+ if (iter == _attrs.end())
+ return "";
+ else
+ return iter->second;
}
XMLObject&
XMLObject::add_child(const XMLObject& child)
{
- _kids.push_back(child);
- return _kids.back();
+ _kids.push_back(child);
+ return _kids.back();
}
-bool
+bool
XMLObject::remove_child(const XMLObject& child)
{
- list<XMLObject>::iterator iter = find(_kids.begin(), _kids.end(), child);
- if (iter == _kids.end())
- return false;
- else {
- _kids.erase(iter);
- return true;
- }
+ list<XMLObject>::iterator iter = find(_kids.begin(), _kids.end(), child);
+ if (iter == _kids.end())
+ return false;
+ else {
+ _kids.erase(iter);
+ return true;
+ }
}
void
XMLObject::generate_xml(String& xml, const String& indent) const
{
- xml += indent + "<" + _tag;
- for (map<String, String>::const_iterator iter = attrs().begin();
- iter != attrs().end();
- iter++) {
- const String& name = iter->first;
- const String value = escape_chars(iter->second);
- xml += " " + name + "=\"" + value + "\"";
- }
- if (children().empty())
- xml += "/>\n";
- else {
- xml += ">\n";
- for (list<XMLObject>::const_iterator iter = children().begin();
- iter != children().end();
- iter++) {
- iter->generate_xml(xml, indent + "\t");
- }
- xml += indent + "</" + _tag + ">\n";
- }
-}
-
-
+ xml += indent + "<" + _tag;
+ for (map<String, String>::const_iterator
+ iter = attrs().begin() ;
+ iter != attrs().end() ;
+ iter++)
+ {
+ const String& name = iter->first;
+ const String value = escape_chars(iter->second);
+ xml += " " + name + "=\"" + value + "\"";
+ }
+ if (children().empty())
+ xml += "/>\n";
+ else {
+ xml += ">\n";
+ for (list<XMLObject>::const_iterator
+ iter = children().begin() ;
+ iter != children().end() ;
+ iter++)
+ {
+ iter->generate_xml(xml, indent + "\t");
+ }
-// *** GLOBAL FUNCTIONS ***
+ xml += indent + "</" + _tag + ">\n";
+ }
+}
+// *** GLOBAL FUNCTIONS ***
static void
_parseXML(XMLObject& parent, xmlNode* children)
{
- for (xmlNode* curr_node = children;
- curr_node;
- curr_node = curr_node->next) {
- if (curr_node->type == XML_ELEMENT_NODE) {
-
- XMLObject me((const char*) curr_node->name);
-
- // attrs
- for (xmlAttr* curr_attr = curr_node->properties;
- curr_attr;
- curr_attr = curr_attr->next) {
- if (curr_attr->type == XML_ATTRIBUTE_NODE) {
- const xmlChar* name = curr_attr->name;
- const xmlChar* value = xmlGetProp(curr_node, name);
- if (!value)
- throw String("xmlGetProp() returned NULL!!!");
- try {
- const String name_str((const char*) name);
- const String value_str = invert_chars((const char*) value);
- me.set_attr(name_str, value_str);
- xmlFree((void*) value);
- } catch ( ... ) {
- xmlFree((void*) value);
- throw;
- }
+ for (xmlNode* curr_node = children; curr_node; curr_node = curr_node->next)
+ {
+ if (curr_node->type == XML_ELEMENT_NODE) {
+ XMLObject me((const char*) curr_node->name);
+
+ // attrs
+ for (xmlAttr* curr_attr = curr_node->properties ;
+ curr_attr ;
+ curr_attr = curr_attr->next)
+ {
+ if (curr_attr->type == XML_ATTRIBUTE_NODE) {
+ const xmlChar* name = curr_attr->name;
+ const xmlChar* value = xmlGetProp(curr_node, name);
+
+ if (!value)
+ throw String("xmlGetProp() returned NULL!!!");
+ try {
+ const String name_str((const char *) name);
+ const String value_str =
+ invert_chars((const char *) value);
+
+ me.set_attr(name_str, value_str);
+ xmlFree((void *) value);
+ } catch ( ... ) {
+ xmlFree((void *) value);
+ throw;
+ }
+ }
+ }
+
+ // kids
+ _parseXML(me, curr_node->children);
+ parent.add_child(me);
+ }
}
- }
-
- // kids
- _parseXML(me, curr_node->children);
-
- parent.add_child(me);
- }
- }
}
-XMLObject
+XMLObject
parseXML(const String& xml)
{
- static bool initialized = false;
- if (!initialized) {
- LIBXML_TEST_VERSION;
- initialized = true;
- }
-
- xmlDoc* doc = xmlReadMemory(xml.c_str(),
- xml.size(),
- "noname.xml",
- NULL,
- XML_PARSE_NONET | XML_PARSE_NOERROR | XML_PARSE_NOWARNING);
- if (!doc)
- throw String("parseXML(): couldn't parse xml");
-
- XMLObject root("if you see this, something wrong happened");
- try {
- _parseXML(root, xmlDocGetRootElement(doc));
- xmlFreeDoc(doc);
- return *(root.children().begin());
- } catch ( ... ) {
- xmlFreeDoc(doc);
- xmlCleanupParser();
- throw String("parseXML(): low memory");
- }
+ static bool initialized = false;
+
+ if (!initialized) {
+ LIBXML_TEST_VERSION;
+ initialized = true;
+ }
+
+ xmlDoc* doc = xmlReadMemory(xml.c_str(),
+ xml.size(),
+ "noname.xml",
+ NULL,
+ XML_PARSE_NONET | XML_PARSE_NOERROR | XML_PARSE_NOWARNING);
+ if (!doc)
+ throw String("parseXML(): couldn't parse xml");
+
+ XMLObject root("if you see this, something wrong happened");
+
+ try {
+ _parseXML(root, xmlDocGetRootElement(doc));
+ xmlFreeDoc(doc);
+ return *(root.children().begin());
+ } catch ( ... ) {
+ xmlFreeDoc(doc);
+ xmlCleanupParser();
+ throw String("parseXML(): low memory");
+ }
}
-String
+String
generateXML(const XMLObject& obj)
{
- String xml("<?xml version=\"1.0\"?>\n");
- obj.generate_xml(xml, "");
-
- // verify xml
- xmlDoc* doc = xmlReadMemory(xml.c_str(),
- xml.size(),
- "noname.xml",
- NULL,
- XML_PARSE_NONET | XML_PARSE_NOERROR | XML_PARSE_NOWARNING);
- if (!doc) {
- // cout << xml << endl;
- throw String("generateXML(): internal error");
- }
- xmlFreeDoc(doc);
-
- return xml;
+ String xml("<?xml version=\"1.0\"?>\n");
+ obj.generate_xml(xml, "");
+
+ // verify xml
+ xmlDoc* doc = xmlReadMemory(xml.c_str(),
+ xml.size(),
+ "noname.xml",
+ NULL,
+ XML_PARSE_NONET | XML_PARSE_NOERROR | XML_PARSE_NOWARNING);
+ if (!doc) {
+ //cout << xml << endl;
+ throw String("generateXML(): internal error");
+ }
+ xmlFreeDoc(doc);
+
+ return xml;
}
-XMLObject
+XMLObject
readXML(const String& filename)
{
- return parseXML(File::open(filename));
+ return parseXML(File::open(filename));
}
-
-
-
String
escape_chars(const String& str)
{
- const String amp_repl ("______AMP_REPLACEMENT_XML_KOJIKOJIKOJIKO______");
- const String lt_repl ("______LT_REPLACEMENT_XML_KOJIKOJIKOJIKO______");
- const String gt_repl ("______GT_REPLACEMENT_XML_KOJIKOJIKOJIKO______");
- const String apos_repl("______APOS_REPLACEMENT_XML_KOJIKOJIKOJIKO______");
- const String quot_repl("______QUOT_REPLACEMENT_XML_KOJIKOJIKOJIKO______");
-
- String ret = utils::replace("&", amp_repl, str);
- ret = utils::replace("<", lt_repl, ret);
- ret = utils::replace(">", gt_repl, ret);
- ret = utils::replace("'", apos_repl, ret);
- ret = utils::replace(""", quot_repl, ret);
-
- ret = utils::replace("&", "&", ret);
- ret = utils::replace("<", "<", ret);
- ret = utils::replace(">", ">", ret);
- ret = utils::replace("'", "'", ret);
- ret = utils::replace("\"", """, ret);
-
- ret = utils::replace(amp_repl, "&", ret);
- ret = utils::replace(lt_repl, "<", ret);
- ret = utils::replace(gt_repl, ">", ret);
- ret = utils::replace(apos_repl, "'", ret);
- ret = utils::replace(quot_repl, """, ret);
-
- return ret;
+ const String amp_repl("______AMP_REPLACEMENT_XML_KOJIKOJIKOJIKO______");
+ const String lt_repl("______LT_REPLACEMENT_XML_KOJIKOJIKOJIKO______");
+ const String gt_repl("______GT_REPLACEMENT_XML_KOJIKOJIKOJIKO______");
+ const String apos_repl("______APOS_REPLACEMENT_XML_KOJIKOJIKOJIKO______");
+ const String quot_repl("______QUOT_REPLACEMENT_XML_KOJIKOJIKOJIKO______");
+
+ String ret = utils::replace("&", amp_repl, str);
+ ret = utils::replace("<", lt_repl, ret);
+ ret = utils::replace(">", gt_repl, ret);
+ ret = utils::replace("'", apos_repl, ret);
+ ret = utils::replace(""", quot_repl, ret);
+
+ ret = utils::replace("&", "&", ret);
+ ret = utils::replace("<", "<", ret);
+ ret = utils::replace(">", ">", ret);
+ ret = utils::replace("'", "'", ret);
+ ret = utils::replace("\"", """, ret);
+
+ ret = utils::replace(amp_repl, "&", ret);
+ ret = utils::replace(lt_repl, "<", ret);
+ ret = utils::replace(gt_repl, ">", ret);
+ ret = utils::replace(apos_repl, "'", ret);
+ ret = utils::replace(quot_repl, """, ret);
+
+ return ret;
}
String
invert_chars(const String& str)
{
- String ret = utils::replace("&", "&", str);
- ret = utils::replace("<", "<", ret);
- ret = utils::replace(">", ">", ret);
- ret = utils::replace("'", "'", ret);
- ret = utils::replace(""", "\"", ret);
- return ret;
+ String ret = utils::replace("&", "&", str);
+ ret = utils::replace("<", "<", ret);
+ ret = utils::replace(">", ">", ret);
+ ret = utils::replace("'", "'", ret);
+ ret = utils::replace(""", "\"", ret);
+ return ret;
}
--- conga/ricci/common/daemon_init.c 2006/03/27 23:15:30 1.1
+++ conga/ricci/common/daemon_init.c 2007/08/31 04:57:37 1.2
@@ -20,16 +20,16 @@
/** @file
* daemon_init function, does sanity checks and calls daemon().
*
- * $Id: daemon_init.c,v 1.1 2006/03/27 23:15:30 kupcevic Exp $
+ * $Id: daemon_init.c,v 1.2 2007/08/31 04:57:37 rmccabe Exp $
*
* Author: Jeff Moyer <moyer@mclinux.com>
*/
/*
* TODO: Clean this up so that only one function constructs the
- * pidfile /var/run/loggerd.PID, and perhaps only one function
- * forms the /proc/PID/ path.
+ * pidfile /var/run/loggerd.PID, and perhaps only one function
+ * forms the /proc/PID/ path.
*
- * Also need to add file locking for the pid file.
+ * Also need to add file locking for the pid file.
*/
#include <stdio.h>
#include <stdlib.h>
--- conga/ricci/common/signals.c 2006/03/06 21:48:04 1.1
+++ conga/ricci/common/signals.c 2007/08/31 04:57:37 1.2
@@ -1,5 +1,5 @@
/*
- Copyright Red Hat, Inc. 2003
+ Copyright Red Hat, Inc. 2003-2007
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -13,7 +13,7 @@
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
@@ -21,7 +21,6 @@
#include <signal.h>
#include <stdlib.h>
#include <string.h>
-//#include <resgroup.h>
#include "signals.h"
@@ -52,12 +51,12 @@
int
block_signal(int sig)
{
- sigset_t set;
+ sigset_t set;
sigemptyset(&set);
sigaddset(&set, sig);
- return(sigprocmask(SIG_BLOCK, &set, NULL));
+ return (sigprocmask(SIG_BLOCK, &set, NULL));
}
@@ -70,21 +69,20 @@
int
unblock_signal(int sig)
{
- sigset_t set;
+ sigset_t set;
sigemptyset(&set);
sigaddset(&set, sig);
- return(sigprocmask(SIG_UNBLOCK, &set, NULL));
+ return (sigprocmask(SIG_UNBLOCK, &set, NULL));
}
-
int
block_all_signals(void)
{
- sigset_t set;
+ sigset_t set;
sigfillset(&set);
sigdelset(&set, SIGSEGV);
- return(sigprocmask(SIG_BLOCK, &set, NULL));
+ return (sigprocmask(SIG_BLOCK, &set, NULL));
}
--- conga/ricci/common/utils.cpp 2007/08/24 22:05:14 1.9
+++ conga/ricci/common/utils.cpp 2007/08/31 04:57:37 1.10
@@ -1,5 +1,5 @@
/*
- Copyright Red Hat, Inc. 2005
+ Copyright Red Hat, Inc. 2005-2007
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -13,7 +13,7 @@
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -33,268 +33,269 @@
using namespace std;
+String
+utils::replace(const String& what, const String& with, const String& in_str)
+{
+ vector<String> v(split(in_str, what));
+ String ret(v[0]);
-
-
-String
-utils::replace(const String& what,
- const String& with,
- const String& in_str)
-{
- vector<String> v(split(in_str, what));
- String ret(v[0]);
- for (vector<String>::size_type i=1;
- i < v.size();
- i++)
- ret += with + v[i];
- return ret;
+ for (vector<String>::size_type i = 1 ; i < v.size() ; i++)
+ ret += with + v[i];
+ return ret;
}
-
-
-String
+String
utils::hash_str(const String& txt)
{
- unsigned char buff[16];
- MD5((const unsigned char*) txt.c_str(), txt.size(), buff);
-
- String hash;
- for (unsigned int i=0; i<sizeof(buff); i++) {
- hash += (char) ('a' + (int) ((buff[i] & 0xf0)>>4));
- hash += (char) ('a' + (int) ((buff[i] & 0x0f)>>4));
- }
- return hash;
-}
-
-
+ unsigned char buff[16];
+ MD5((const unsigned char*) txt.c_str(), txt.size(), buff);
+ String hash;
+ for (size_t i = 0; i < sizeof(buff) ; i++) {
+ hash += (char) ('a' + (int) ((buff[i] & 0xf0) >> 4));
+ hash += (char) ('a' + (int) ((buff[i] & 0x0f) >> 4));
+ }
+ return hash;
+}
-String
+String
utils::lstrip(String str, const String& del)
{
- if (del.empty())
- throw String("empty separator");
-
- while (str.find(del) == 0) {
- str = str.substr(del.size());
- }
-
- return str;
+ if (del.empty())
+ throw String("empty separator");
+
+ while (str.find(del) == 0) {
+ str = str.substr(del.size());
+ }
+
+ return str;
}
-String
+
+String
utils::rstrip(String str, const String& del)
{
- if (del.empty())
- throw String("empty separator");
- if (str.size() < del.size())
- return str;
-
- unsigned int i;
- while (str.rfind(del) == (i = (str.size() - del.size()))) {
- if (str.rfind(del) == str.npos)
- break;
- str = str.substr(0, i);
- }
-
- return str;
+ if (del.empty())
+ throw String("empty separator");
+
+ if (str.size() < del.size())
+ return str;
+
+ unsigned int i;
+ while (str.rfind(del) == (i = (str.size() - del.size()))) {
+ if (str.rfind(del) == str.npos)
+ break;
+ str = str.substr(0, i);
+ }
+
+ return str;
}
-String
+String
utils::lstrip(String str)
{
- while (str.find_first_of(" \n\t") == 0)
- str = str.substr(1);
- return str;
+ while (str.find_first_of(" \n\t") == 0)
+ str = str.substr(1);
+
+ return str;
}
-String
+
+String
utils::rstrip(String str)
{
- unsigned int i;
- while ((i=str.size()) != 0) {
- i--;
- if (str[i] == ' ' || str[i] == '\n' || str[i] == '\t')
- str = str.substr(0, i);
- else
- break;
- }
- return str;
+ unsigned int i;
+
+ while ((i = str.size()) != 0) {
+ i--;
+ if (str[i] == ' ' || str[i] == '\n' || str[i] == '\t')
+ str = str.substr(0, i);
+ else
+ break;
+ }
+
+ return str;
}
-vector<String>
+vector<String>
utils::split(const String& t, const String& del)
{
- if (del.empty())
- throw String("empty separator");
-
- String txt(t);
-
- // merge separators
- if (del == " " || del == "\n") {
- String::size_type i;
- while ((i = txt.find(del+del)) != txt.npos)
- txt.erase(i, del.size());
- }
-
- // split
- vector<String> lines;
- for (String::size_type from=0, to=txt.find(del);
- from != txt.size();
- ) {
- String substr = txt.substr(from, to-from);
- lines.push_back(substr);
- if (to == txt.npos)
- return lines;
- from = to + del.size();
- to = txt.find(del, from);
- }
- lines.push_back(String());
- return lines;
+ if (del.empty())
+ throw String("empty separator");
+
+ String txt(t);
+
+ // merge separators
+ if (del == " " || del == "\n") {
+ String::size_type i;
+ while ((i = txt.find(del + del)) != txt.npos)
+ txt.erase(i, del.size());
+ }
+
+ // split
+ vector<String> lines;
+ for (String::size_type from=0, to = txt.find(del) ; from != txt.size() ;) {
+ String substr = txt.substr(from, to - from);
+ lines.push_back(substr);
+ if (to == txt.npos)
+ return lines;
+ from = to + del.size();
+ to = txt.find(del, from);
+ }
+
+ lines.push_back(String());
+ return lines;
}
-vector<String>
+vector<String>
utils::split(const String& t)
{
- String del(" ");
- String txt(t);
-
- // merge separators
- String::size_type i;
- while ((i = txt.find('\t')) != txt.npos)
- txt[i] = ' ';
- while ((i = txt.find(del+del)) != txt.npos)
- txt.erase(i, del.size());
-
- // split
- vector<String> lines;
- for (String::size_type from=0, to=txt.find(del);
- from != txt.size();
- ) {
- String substr = txt.substr(from, to-from);
- lines.push_back(substr);
- if (to == txt.npos)
- return lines;
- from = to + del.size();
- to = txt.find(del, from);
- }
-
- return lines;
+ String del(" ");
+ String txt(t);
+
+ // merge separators
+ String::size_type i;
+ while ((i = txt.find('\t')) != txt.npos)
+ txt[i] = ' ';
+
+ while ((i = txt.find(del + del)) != txt.npos)
+ txt.erase(i, del.size());
+
+ // split
+ vector<String> lines;
+ for (String::size_type from=0, to = txt.find(del) ; from != txt.size() ;) {
+ String substr = txt.substr(from, to - from);
+ lines.push_back(substr);
+ if (to == txt.npos)
+ return lines;
+ from = to + del.size();
+ to = txt.find(del, from);
+ }
+
+ return lines;
}
String
utils::to_lower(const String& str)
{
- String s;
- for (String::size_type i=0; i<str.size(); i++)
- s.push_back(tolower(str[i]));
- return s;
+ String s;
+
+ for (String::size_type i = 0 ; i < str.size() ; i++)
+ s.push_back(tolower(str[i]));
+ return s;
}
String
utils::to_upper(const String& str)
{
- String s;
- for (String::size_type i=0; i<str.size(); i++)
- s.push_back(toupper(str[i]));
- return s;
-}
-
-
+ String s;
+ for (String::size_type i = 0 ; i < str.size() ; i++)
+ s.push_back(toupper(str[i]));
+ return s;
+}
/*
int
utils::to_int(const String& str)
{
- return atoi(str.c_str());
+ return atoi(str.c_str());
}
*/
+
long long
utils::to_long(const String& str)
{
- return atoll(str.c_str());
+ return atoll(str.c_str());
}
+
float
utils::to_float(const String& str)
{
- float num=0;
-
- sscanf(strip(str).c_str(), "%f", &num);
-
- return num;
+ float num = 0;
+
+ sscanf(strip(str).c_str(), "%f", &num);
+ return num;
}
-String
+String
utils::to_string(int value)
{
- char tmp[100];
- sprintf(tmp, "%d", value);
- return tmp;
+ char tmp[64];
+
+ sprintf(tmp, "%d", value);
+ return tmp;
}
-String
+
+String
utils::to_string(long value)
{
- char tmp[100];
- sprintf(tmp, "%ld", value);
- return tmp;
+ char tmp[64];
+
+ sprintf(tmp, "%ld", value);
+ return tmp;
}
-String
+
+String
utils::to_string(long long value)
{
- char tmp[100];
- sprintf(tmp, "%lld", value);
- return tmp;
+ char tmp[64];
+
+ sprintf(tmp, "%lld", value);
+ return tmp;
}
-String
+
+String
utils::to_string(bool value)
{
- return (value)? "true" : "false";
+ return (value) ? "true" : "false";
}
+int
+utils::execute( const String& path,
+ const std::vector<String>& args,
+ String& out,
+ String& err,
+ int& status,
+ bool caching)
+{
+ String _command = path;
+ for (vector<String>::const_iterator
+ iter = args.begin() ;
+ iter != args.end() ;
+ iter++)
+ {
+ _command += " " + *iter;
+ }
+
+ map<String, exec_cache>::iterator iter = cache.find(_command);
+ if (iter != cache.end() && caching) {
+ exec_cache &c = iter->second;
+ //cout << "exec: " << _command << " cached" << endl;
+
+ out = c.out;
+ err = c.err;
+ status = c.status;
+
+ return c.exec_ret;
+ } else {
+ int ret = ::execute(path, args, out, err, status);
+ //cout << "exec: " << _command << " executed" << endl;
+ exec_cache c(_command, out, err, status, ret);
+
+ if (caching)
+ cache.insert(pair<String, exec_cache>(_command, c));
+
+ out = c.out;
+ err = c.err;
+ status = c.status;
-
-
-
-
-int
-utils::execute(const String& path,
- const std::vector<String>& args,
- String& out,
- String& err,
- int& status,
- bool caching)
-{
- String _command = path;
- for (vector<String>::const_iterator iter = args.begin();
- iter != args.end();
- iter++)
- _command += " " + *iter;
-
- map<String, exec_cache>::iterator iter = cache.find(_command);
- if (iter != cache.end() && caching) {
- exec_cache &c = iter->second;
- // cout << "exec: " << _command << " cached" << endl;
- out = c.out;
- err = c.err;
- status = c.status;
- return c.exec_ret;
- } else {
- int ret = ::execute(path, args, out, err, status);
- // cout << "exec: " << _command << " executed" << endl;
- exec_cache c(_command, out, err, status, ret);
- if (caching)
- cache.insert(pair<String, exec_cache>(_command, c));
- out = c.out;
- err = c.err;
- status = c.status;
- return c.exec_ret;
- }
+ return c.exec_ret;
+ }
}
void
utils::clear_cache()
{
- cache.clear();
+ cache.clear();
}
-std::map<String, exec_cache>
-utils::cache;
+std::map<String, exec_cache> utils::cache;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2007-08-31 4:57 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-31 4:57 [Cluster-devel] conga/ricci/common Logger.cpp Makefile Module. rmccabe
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.