class Pipe {
public:
- Pipe();
+ Pipe(int);
~Pipe();
- int* fd()
- {
- return _fd;
- }
+ int fd();
enum close_t {
- READ,
- WRITE
+ READ= 0,
+ WRITE= 1
};
void reset();
void close(const close_t& arg);
void dup_for_spawn(const close_t& arg,
- posix_spawn_file_actions_t& file_actions,
- const int newfildes);
+ posix_spawn_file_actions_t& file_actions);
+
+ void nonblock();
+ void cloexec();
+ bool read(libtest::vchar_t&);
private:
- int _fd[2];
+ const int _std_fd;
+ int _pipe_fd[2];
bool _open[2];
};
void add_option(const std::string&);
void add_option(const std::string&, const std::string&);
+ void add_long_option(const std::string& option_name, const std::string& option_value);
error_t run(const char *args[]= NULL);
- error_t wait();
+ error_t wait(bool nohang= true);
libtest::vchar_t stdout_result() const
{
return _stderr_buffer;
}
+ const char* stderr_c_str() const
+ {
+ return &_stderr_buffer[0];
+ }
+
size_t stderr_result_length() const
{
return _stderr_buffer.size();
std::string print();
+ void use_valgrind(bool arg= true)
+ {
+ _use_valgrind= arg;
+ }
+
+ bool check() const;
+
+ bool slurp();
+ void murder();
+
+ void use_gdb(bool arg= true)
+ {
+ _use_gdb= arg;
+ }
+
+ void use_ptrcheck(bool arg= true)
+ {
+ _use_ptrcheck= arg;
+ }
+
+ std::string arguments();
+
+ std::string gdb_filename()
+ {
+ return _gdb_filename;
+ }
+
+ pid_t pid() const
+ {
+ return _pid;
+ }
+
private:
void create_argv(const char *args[]);
void delete_argv();
private:
const bool _use_libtool;
+ bool _use_valgrind;
+ bool _use_gdb;
+ bool _use_ptrcheck;
size_t _argc;
+ std::string _exectuble_name;
std::string _exectuble;
std::string _exectuble_with_path;
+ std::string _gdb_filename;
Options _options;
Pipe stdin_fd;
Pipe stdout_fd;