diff options
author | Werner Koch <[email protected]> | 2014-04-10 12:17:19 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2014-04-10 12:17:19 +0000 |
commit | d3bd8fff863f62b6d0e228aea754efbbde861e9a (patch) | |
tree | ddccf579f1938a61e687b1f8b93054e5e9029f87 /src | |
parent | Add GPGME_PROTOCOL_SPAWN and gpgme_op_spawn. (diff) | |
download | gpgme-d3bd8fff863f62b6d0e228aea754efbbde861e9a.tar.gz gpgme-d3bd8fff863f62b6d0e228aea754efbbde861e9a.zip |
Actually implement flags for gpgme_op_spawn.
* src/spawn.c (gpgme_op_spawn_start, gpgme_op_spawn): Pass FLAGS dow
to spawn_start and add FLAGS args along the call path.
* src/engine-spawn.c (engspawn_start): Hack to automagically provide
argv[0].
Diffstat (limited to '')
-rw-r--r-- | src/engine-backend.h | 2 | ||||
-rw-r--r-- | src/engine-spawn.c | 8 | ||||
-rw-r--r-- | src/engine.c | 5 | ||||
-rw-r--r-- | src/engine.h | 3 | ||||
-rw-r--r-- | src/spawn.c | 9 |
5 files changed, 19 insertions, 8 deletions
diff --git a/src/engine-backend.h b/src/engine-backend.h index dbb9e932..b3cc412a 100644 --- a/src/engine-backend.h +++ b/src/engine-backend.h @@ -130,7 +130,7 @@ struct engine_ops const char *file, const char *argv[], gpgme_data_t datain, gpgme_data_t dataout, - gpgme_data_t dataerr); + gpgme_data_t dataerr, unsigned int flags); }; diff --git a/src/engine-spawn.c b/src/engine-spawn.c index 1e71c1cc..bfcad3d9 100644 --- a/src/engine-spawn.c +++ b/src/engine-spawn.c @@ -231,6 +231,7 @@ engspawn_start (engine_spawn_t esp, const char *file, const char *argv[], struct spawn_fd_item_s *fd_list; pid_t pid; unsigned int spflags; + const char *save_argv0 = NULL; if (!esp || !file || !argv || !argv[0]) return gpg_error (GPG_ERR_INV_VALUE); @@ -264,8 +265,15 @@ engspawn_start (engine_spawn_t esp, const char *file, const char *argv[], fd_list[n].fd = -1; fd_list[n].dup_to = -1; + if (argv[0] && !*argv[0]) + { + save_argv0 = argv[0]; + argv[0] = _gpgme_get_basename (file); + } status = _gpgme_io_spawn (file, (char * const *)argv, spflags, fd_list, NULL, NULL, &pid); + if (save_argv0) + argv[0] = save_argv0; free (fd_list); if (status == -1) return gpg_error_from_syserror (); diff --git a/src/engine.c b/src/engine.c index f5034306..ff015c00 100644 --- a/src/engine.c +++ b/src/engine.c @@ -944,7 +944,8 @@ gpgme_error_t _gpgme_engine_op_spawn (engine_t engine, const char *file, const char *argv[], gpgme_data_t datain, - gpgme_data_t dataout, gpgme_data_t dataerr) + gpgme_data_t dataout, gpgme_data_t dataerr, + unsigned int flags) { if (!engine) return gpg_error (GPG_ERR_INV_VALUE); @@ -953,5 +954,5 @@ _gpgme_engine_op_spawn (engine_t engine, return gpg_error (GPG_ERR_NOT_IMPLEMENTED); return (*engine->ops->opspawn) (engine->engine, file, argv, - datain, dataout, dataerr); + datain, dataout, dataerr, flags); } diff --git a/src/engine.h b/src/engine.h index ade7de15..bbf009d6 100644 --- a/src/engine.h +++ b/src/engine.h @@ -167,7 +167,8 @@ gpgme_error_t _gpgme_engine_op_spawn (engine_t engine, const char *file, const char *argv[], gpgme_data_t datain, gpgme_data_t dataout, - gpgme_data_t dataerr); + gpgme_data_t dataerr, + unsigned int flags); #endif /* ENGINE_H */ diff --git a/src/spawn.c b/src/spawn.c index e3454f3b..7b3b4476 100644 --- a/src/spawn.c +++ b/src/spawn.c @@ -34,7 +34,8 @@ static gpgme_error_t spawn_start (gpgme_ctx_t ctx, int synchronous, const char *file, const char *argv[], gpgme_data_t datain, - gpgme_data_t dataout, gpgme_data_t dataerr) + gpgme_data_t dataout, gpgme_data_t dataerr, + unsigned int flags) { gpgme_error_t err; const char *tmp_argv[2]; @@ -54,7 +55,7 @@ spawn_start (gpgme_ctx_t ctx, int synchronous, } return _gpgme_engine_op_spawn (ctx->engine, file, argv, - datain, dataout, dataerr); + datain, dataout, dataerr, flags); } @@ -75,7 +76,7 @@ gpgme_op_spawn_start (gpgme_ctx_t ctx, const char *file, const char *argv[], if (!ctx) return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE)); - err = spawn_start (ctx, 0, file, argv, datain, dataout, dataerr); + err = spawn_start (ctx, 0, file, argv, datain, dataout, dataerr, flags); return err; } @@ -97,7 +98,7 @@ gpgme_op_spawn (gpgme_ctx_t ctx, const char *file, const char *argv[], if (!ctx) return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE)); - err = spawn_start (ctx, 1, file, argv, datain, dataout, dataerr); + err = spawn_start (ctx, 1, file, argv, datain, dataout, dataerr, flags); if (!err) err = _gpgme_wait_one (ctx); |