1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

Add virRunWithHook util function

* src/util/util.[ch]: similar to virExecWithHook, but waits for child to
  exit. Useful for doing things like setuid after the fork but before the
  exec.
This commit is contained in:
Laine Stump 2010-01-21 00:30:36 +01:00 committed by Daniel Veillard
parent 1671b64702
commit d2259ada49
2 changed files with 21 additions and 7 deletions

View File

@ -804,9 +804,11 @@ error:
* only if the command could not be run.
*/
int
virRun(virConnectPtr conn,
const char *const*argv,
int *status) {
virRunWithHook(virConnectPtr conn,
const char *const*argv,
virExecHook hook,
void *data,
int *status) {
pid_t childpid;
int exitstatus, execret, waitret;
int ret = -1;
@ -823,7 +825,7 @@ virRun(virConnectPtr conn,
if ((execret = __virExec(conn, argv, NULL, NULL,
&childpid, -1, &outfd, &errfd,
VIR_EXEC_NONE, NULL, NULL, NULL)) < 0) {
VIR_EXEC_NONE, hook, data, NULL)) < 0) {
ret = execret;
goto error;
}
@ -879,9 +881,11 @@ virRun(virConnectPtr conn,
#else /* __MINGW32__ */
int
virRun(virConnectPtr conn,
const char *const *argv ATTRIBUTE_UNUSED,
int *status)
virRunWithHook(virConnectPtr conn,
const char *const *argv ATTRIBUTE_UNUSED,
virExecHook hook ATTRIBUTE_UNUSED,
void *data ATTRIBUTE_UNUSED,
int *status)
{
if (status)
*status = ENOTSUP;
@ -907,6 +911,13 @@ virExec(virConnectPtr conn,
#endif /* __MINGW32__ */
int
virRun(virConnectPtr conn,
const char *const*argv,
int *status) {
return virRunWithHook(conn, argv, NULL, NULL, status);
}
/* Like gnulib's fread_file, but read no more than the specified maximum
number of bytes. If the length of the input is <= max_len, and
upon error while reading that data, it works just like fread_file. */

View File

@ -81,6 +81,9 @@ int virExec(virConnectPtr conn,
int *errfd,
int flags) ATTRIBUTE_RETURN_CHECK;
int virRun(virConnectPtr conn, const char *const*argv, int *status) ATTRIBUTE_RETURN_CHECK;
int virRunWithHook(virConnectPtr conn, const char *const*argv,
virExecHook hook, void *data,
int *status) ATTRIBUTE_RETURN_CHECK;
int virFileReadLimFD(int fd, int maxlen, char **buf) ATTRIBUTE_RETURN_CHECK;