X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fpbd%2Fsystem_exec.h;h=1e36c3df9fcba136adc0f70738d52babd5b98ef1;hb=1759d1c9c9a487b69542bd0cebddd07d99fafbc7;hp=ce6e5a9c4f9367664107aa47b40340d8d39a89f0;hpb=8c9749e42faf7808034ed8b7afce4a2fe6dc6f33;p=ardour.git diff --git a/libs/pbd/pbd/system_exec.h b/libs/pbd/pbd/system_exec.h index ce6e5a9c4f..1e36c3df9f 100644 --- a/libs/pbd/pbd/system_exec.h +++ b/libs/pbd/pbd/system_exec.h @@ -37,6 +37,9 @@ #undef interface // VKamyshniy: to avoid "include/giomm-2.4/giomm/dbusmessage.h:270:94: error: expected ',' or '...' before 'struct'" #endif +#else // posix +#include +#include /* WNOHANG is part of the exposed API */ #endif #include @@ -115,6 +118,10 @@ class LIBPBD_API SystemExec virtual ~SystemExec (); + static char* format_key_value_parameter (std::string, std::string); + + std::string to_s() const; + /** fork and execute the given program * * @param stderr_mode select what to do with program's standard error @@ -159,12 +166,19 @@ class LIBPBD_API SystemExec */ void close_stdin (); /** write into child-program's STDIN - * @param d data to write + * @param d text to write * @param len length of data to write, if it is 0 (zero), d.length() is * used to determine the number of bytes to transmit. * @return number of bytes written. */ - int write_to_stdin (std::string d, size_t len=0); + size_t write_to_stdin (std::string const& d, size_t len=0); + + /** write into child-program's STDIN + * @param data data to write + * @param bytes length of data to write + * @return number of bytes written. + */ + size_t write_to_stdin (const void* d, size_t bytes=0); /** The ReadStdout signal is emitted when the application writes to STDOUT. * it passes the written data and its length in bytes as arguments to the bound @@ -217,11 +231,13 @@ class LIBPBD_API SystemExec void make_wargs(char **); #else pid_t pid; +# ifndef NO_VFORK + char **argx; +# endif #endif void init (); pthread_mutex_t write_lock; - int fdin; ///< file-descriptor for writing to child's STDIN. This variable is identical to pin[1] but also used as status check if the stdin pipe is open: <0 means closed. int pok[2]; int pin[2]; int pout[2];