X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Fcmdline.cc;h=5e723350002cd22f8dbe22d23f64e2b3e3f65f68;hb=2897ccfa82591bd17d02c344465c4a74e3b3dbae;hp=709aac10a9e4a18579f1fe29dbf4455b152c59a7;hpb=482d0b2efc0a5b1e16818551892613c252c15f30;p=awesomized%2Flibmemcached diff --git a/libtest/cmdline.cc b/libtest/cmdline.cc index 709aac10..5e723350 100644 --- a/libtest/cmdline.cc +++ b/libtest/cmdline.cc @@ -34,7 +34,8 @@ * */ -#include "mem_config.h" +#include "libtest/yatlcon.h" + #include "libtest/common.h" using namespace libtest; @@ -74,8 +75,8 @@ namespace { std::stringstream arg_buffer; for (vchar_ptr_t::iterator iter= built_argv.begin(); - iter == built_argv.end(); - iter++) + iter != built_argv.end(); + ++iter) { arg_buffer << *iter << " "; } @@ -408,7 +409,6 @@ bool Application::slurp() Application::error_t Application::join() { pid_t waited_pid= waitpid(_pid, &_status, 0); - if (waited_pid == _pid and WIFEXITED(_status) == false) { /* @@ -426,7 +426,7 @@ Application::error_t Application::join() error_string+= built_argv[0]; throw std::logic_error(error_string); } - else if WIFSIGNALED(_status) + else if (WIFSIGNALED(_status)) { if (WTERMSIG(_status) != SIGTERM and WTERMSIG(_status) != SIGHUP) { @@ -437,11 +437,14 @@ Application::error_t Application::join() throw std::runtime_error(error_string); } -#if 0 // If we terminted it on purpose then it counts as a success. - Out << "waitpid() application terminated at request" - << " pid:" << _pid - << " name:" << built_argv[0]; +#if defined(DEBUG) + if (DEBUG) + { + Out << "waitpid() application terminated at request" + << " pid:" << _pid + << " name:" << built_argv[0]; + } #endif } else @@ -517,9 +520,10 @@ bool Application::Pipe::read(libtest::vchar_t& arg) bool data_was_read= false; + libtest::vchar_t buffer; + buffer.resize(1024); ssize_t read_length; - char buffer[1024]= { 0 }; - while ((read_length= ::read(_pipe_fd[READ], buffer, sizeof(buffer)))) + while ((read_length= ::read(_pipe_fd[READ], &buffer[0], buffer.size()))) { if (read_length == -1) { @@ -683,8 +687,8 @@ void Application::create_argv(const char *args[]) if (_use_libtool) { assert(libtool()); - built_argv.push_back(strdup(libtool())); - built_argv.push_back(strdup("--mode=execute")); + vchar::append(built_argv, libtool()); + vchar::append(built_argv, "--mode=execute"); } if (_use_valgrind) @@ -692,52 +696,54 @@ void Application::create_argv(const char *args[]) /* valgrind --error-exitcode=1 --leak-check=yes --track-fds=yes --malloc-fill=A5 --free-fill=DE */ - built_argv.push_back(strdup("valgrind")); - built_argv.push_back(strdup("--error-exitcode=1")); - built_argv.push_back(strdup("--leak-check=yes")); + vchar::append(built_argv, "valgrind"); + vchar::append(built_argv, "--error-exitcode=1"); + vchar::append(built_argv, "--leak-check=yes"); #if 0 - built_argv.push_back(strdup("--show-reachable=yes")); + vchar::append(built_argv, "--show-reachable=yes")); #endif - built_argv.push_back(strdup("--track-fds=yes")); + vchar::append(built_argv, "--track-fds=yes"); #if 0 built_argv[x++]= strdup("--track-origin=yes"); #endif - built_argv.push_back(strdup("--malloc-fill=A5")); - built_argv.push_back(strdup("--free-fill=DE")); + vchar::append(built_argv, "--malloc-fill=A5"); + vchar::append(built_argv, "--free-fill=DE"); std::string log_file= create_tmpfile("valgrind"); - char buffer[1024]; - int length= snprintf(buffer, sizeof(buffer), "--log-file=%s", log_file.c_str()); - fatal_assert(length > 0 and size_t(length) < sizeof(buffer)); - built_argv.push_back(strdup(buffer)); + libtest::vchar_t buffer; + buffer.resize(1024); + int length= snprintf(&buffer[0], buffer.size(), "--log-file=%s", log_file.c_str()); + fatal_assert(length > 0 and size_t(length) < buffer.size()); + vchar::append(built_argv, &buffer[0]); } else if (_use_ptrcheck) { /* valgrind --error-exitcode=1 --tool=exp-ptrcheck --log-file= */ - built_argv.push_back(strdup("valgrind")); - built_argv.push_back(strdup("--error-exitcode=1")); - built_argv.push_back(strdup("--tool=exp-ptrcheck")); + vchar::append(built_argv, "valgrind"); + vchar::append(built_argv, "--error-exitcode=1"); + vchar::append(built_argv, "--tool=exp-ptrcheck"); std::string log_file= create_tmpfile("ptrcheck"); - char buffer[1024]; - int length= snprintf(buffer, sizeof(buffer), "--log-file=%s", log_file.c_str()); - fatal_assert(length > 0 and size_t(length) < sizeof(buffer)); - built_argv.push_back(strdup(buffer)); + libtest::vchar_t buffer; + buffer.resize(1024); + int length= snprintf(&buffer[0], buffer.size(), "--log-file=%s", log_file.c_str()); + fatal_assert(length > 0 and size_t(length) < buffer.size()); + vchar::append(built_argv, &buffer[0]); } else if (_use_gdb) { - built_argv.push_back(strdup("gdb")); + vchar::append(built_argv, "gdb"); } - built_argv.push_back(strdup(_exectuble_with_path.c_str())); + vchar::append(built_argv, _exectuble_with_path.c_str()); for (Options::const_iterator iter= _options.begin(); iter != _options.end(); ++iter) { - built_argv.push_back(strdup((*iter).first.c_str())); + vchar::append(built_argv, (*iter).first.c_str()); if ((*iter).second.empty() == false) { - built_argv.push_back(strdup((*iter).second.c_str())); + vchar::append(built_argv, (*iter).second.c_str()); } } @@ -745,7 +751,7 @@ void Application::create_argv(const char *args[]) { for (const char **ptr= args; *ptr; ++ptr) { - built_argv.push_back(strdup(*ptr)); + vchar::append(built_argv, *ptr); } } built_argv.push_back(NULL); @@ -760,28 +766,21 @@ std::string Application::arguments() { std::stringstream arg_buffer; - for (size_t x= (1 +_use_libtool) ? 2 : 0; - x < _argc and built_argv[x]; - ++x) + // Skip printing out the libtool reference + for (size_t x= _use_libtool ? 2 : 0; x < _argc; ++x) { - arg_buffer << built_argv[x] << " "; + if (built_argv[x]) + { + arg_buffer << built_argv[x] << " "; + } } return arg_buffer.str(); } -struct DeleteFromVector -{ - template - void operator() ( T* ptr) const - { - free(ptr); - } -}; - void Application::delete_argv() { - std::for_each(built_argv.begin(), built_argv.end(), DeleteFromVector()); + std::for_each(built_argv.begin(), built_argv.end(), FreeFromVector()); built_argv.clear(); _argc= 0;