X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Fcmdline.cc;h=cbe8ff9a53ea70754cf7c8aa6f98c3a666c68576;hb=50532bea9eb770554e1e962d03b868987303acbe;hp=a63740607b3f0e1f02a3e2f23d98ac59f82d043f;hpb=b036e172e5839d530bce7c3831a8eaf36d68eca7;p=awesomized%2Flibmemcached diff --git a/libtest/cmdline.cc b/libtest/cmdline.cc index a6374060..cbe8ff9a 100644 --- a/libtest/cmdline.cc +++ b/libtest/cmdline.cc @@ -2,7 +2,7 @@ * * Data Differential YATL (i.e. libtest) library * - * Copyright (C) 2012 Data Differential, http://datadifferential.com/ + * Copyright (C) 2012-2013 Data Differential, http://datadifferential.com/ * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -59,6 +59,7 @@ using namespace libtest; #include #include +#include #ifndef __USE_GNU static char **environ= NULL; @@ -78,7 +79,10 @@ namespace { iter != built_argv.end(); ++iter) { - arg_buffer << *iter << " "; + if (*iter) + { + arg_buffer << *iter << " "; + } } return arg_buffer.str(); @@ -358,7 +362,7 @@ bool Application::slurp() int error; switch ((error= errno)) { -#ifdef TARGET_OS_LINUX +#ifdef __linux case ERESTART: #endif case EINTR: @@ -408,7 +412,7 @@ bool Application::slurp() Application::error_t Application::join() { - pid_t waited_pid= waitpid(_pid, &_status, 0); + pid_t waited_pid= waitpid(_pid, &_status, WUNTRACED); slurp(); if (waited_pid == _pid and WIFEXITED(_status) == false) { @@ -481,8 +485,20 @@ Application::error_t Application::join() } else if (waited_pid == -1) { + std::string error_string; + if (stdout_result_length()) + { + error_string+= " stdout: "; + error_string+= stdout_c_str(); + } + + if (stderr_result_length()) + { + error_string+= " stderr: "; + error_string+= stderr_c_str(); + } + Error << "waitpid() returned errno:" << strerror(errno) << " " << error_string; _app_exit_state= Application::UNKNOWN; - Error << "waitpid() returned errno:" << strerror(errno); } else { @@ -604,23 +620,21 @@ void Application::Pipe::reset() close(READ); close(WRITE); -#if defined(HAVE_PIPE2) && HAVE_PIPE2 +#ifdef HAVE_PIPE2 if (pipe2(_pipe_fd, O_NONBLOCK|O_CLOEXEC) == -1) -#else - if (pipe(_pipe_fd) == -1) #endif { - FATAL(strerror(errno)); - } - _open[0]= true; - _open[1]= true; + if (pipe(_pipe_fd) == -1) + { + FATAL(strerror(errno)); + } -#if defined(HAVE_PIPE2) && HAVE_PIPE2 - { + // Since either pipe2() was not found/called we set the pipe directly nonblock(); cloexec(); } -#endif + _open[0]= true; + _open[1]= true; } void Application::Pipe::cloexec() @@ -773,7 +787,7 @@ void Application::create_argv(const char *args[]) vchar::append(built_argv, *ptr); } } - built_argv.push_back(NULL); + built_argv.push_back(nullptr); } std::string Application::print() @@ -820,14 +834,4 @@ int exec_cmdline(const std::string& command, const char *args[], bool use_libtoo return int(app.join()); } -const char *gearmand_binary() -{ - return GEARMAND_BINARY; -} - -const char *drizzled_binary() -{ - return DRIZZLED_BINARY; -} - } // namespace exec_cmdline