Add an empty body for virCondWaitUntil and move virPipeReadUntilEOF
out of the '#ifndef WIN32' block, because it compiles fine with MinGW
in combination with gnulib.
---
src/util/threads-win32.c | 10 +++
src/util/util.c | 160 +++++++++++++++++++++++-----------------------
2 files changed, 90 insertions(+), 80 deletions(-)
diff --git a/src/util/threads-win32.c b/src/util/threads-win32.c
index a30bccf..e478560 100644
--- a/src/util/threads-win32.c
+++ b/src/util/threads-win32.c
@@ -157,6 +157,16 @@ int virCondWait(virCondPtr c, virMutexPtr m)
return 0;
}
+int virCondWaitUntil(virCondPtr c ATTRIBUTE_UNUSED,
+ virMutexPtr m ATTRIBUTE_UNUSED,
+ unsigned long long whenms ATTRIBUTE_UNUSED)
+{
+ /* FIXME: this function is currently only used by the QEMU driver that
+ * is not compiled on Windows, so it's okay for now to just
+ * miss an implementation */
+ return -1;
+}
+
void virCondSignal(virCondPtr c)
{
virMutexLock(&c->lock);
diff --git a/src/util/util.c b/src/util/util.c
index 3209185..e444c97 100644
--- a/src/util/util.c
+++ b/src/util/util.c
@@ -782,86 +782,6 @@ int virExecDaemonize(const char *const*argv,
return ret;
}
-int
-virPipeReadUntilEOF(int outfd, int errfd,
- char **outbuf, char **errbuf) {
-
- struct pollfd fds[2];
- int i;
- int finished[2];
-
- fds[0].fd = outfd;
- fds[0].events = POLLIN;
- finished[0] = 0;
- fds[1].fd = errfd;
- fds[1].events = POLLIN;
- finished[1] = 0;
-
- while(!(finished[0] && finished[1])) {
-
- if (poll(fds, ARRAY_CARDINALITY(fds), -1) < 0) {
- if ((errno == EAGAIN) || (errno == EINTR))
- continue;
- goto pollerr;
- }
-
- for (i = 0; i < ARRAY_CARDINALITY(fds); ++i) {
- char data[1024], **buf;
- int got, size;
-
- if (!(fds[i].revents))
- continue;
- else if (fds[i].revents & POLLHUP)
- finished[i] = 1;
-
- if (!(fds[i].revents & POLLIN)) {
- if (fds[i].revents & POLLHUP)
- continue;
-
- virUtilError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("Unknown poll response."));
- goto error;
- }
-
- got = read(fds[i].fd, data, sizeof(data));
-
- if (got == 0) {
- finished[i] = 1;
- continue;
- }
- if (got < 0) {
- if (errno == EINTR)
- continue;
- if (errno == EAGAIN)
- break;
- goto pollerr;
- }
-
- buf = ((fds[i].fd == outfd) ? outbuf : errbuf);
- size = (*buf ? strlen(*buf) : 0);
- if (VIR_REALLOC_N(*buf, size+got+1) < 0) {
- virReportOOMError();
- goto error;
- }
- memmove(*buf+size, data, got);
- (*buf)[size+got] = '\0';
- }
- continue;
-
- pollerr:
- virReportSystemError(errno,
- "%s", _("poll error"));
- goto error;
- }
-
- return 0;
-
-error:
- VIR_FREE(*outbuf);
- VIR_FREE(*errbuf);
- return -1;
-}
-
/**
* @argv NULL terminated argv to run
* @status optional variable to return exit status in
@@ -1008,6 +928,86 @@ virExecDaemonize(const char *const*argv ATTRIBUTE_UNUSED,
# endif /* WIN32 */
int
+virPipeReadUntilEOF(int outfd, int errfd,
+ char **outbuf, char **errbuf) {
+
+ struct pollfd fds[2];
+ int i;
+ int finished[2];
+
+ fds[0].fd = outfd;
+ fds[0].events = POLLIN;
+ finished[0] = 0;
+ fds[1].fd = errfd;
+ fds[1].events = POLLIN;
+ finished[1] = 0;
+
+ while(!(finished[0] && finished[1])) {
+
+ if (poll(fds, ARRAY_CARDINALITY(fds), -1) < 0) {
+ if ((errno == EAGAIN) || (errno == EINTR))
+ continue;
+ goto pollerr;
+ }
+
+ for (i = 0; i < ARRAY_CARDINALITY(fds); ++i) {
+ char data[1024], **buf;
+ int got, size;
+
+ if (!(fds[i].revents))
+ continue;
+ else if (fds[i].revents & POLLHUP)
+ finished[i] = 1;
+
+ if (!(fds[i].revents & POLLIN)) {
+ if (fds[i].revents & POLLHUP)
+ continue;
+
+ virUtilError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("Unknown poll response."));
+ goto error;
+ }
+
+ got = read(fds[i].fd, data, sizeof(data));
+
+ if (got == 0) {
+ finished[i] = 1;
+ continue;
+ }
+ if (got < 0) {
+ if (errno == EINTR)
+ continue;
+ if (errno == EAGAIN)
+ break;
+ goto pollerr;
+ }
+
+ buf = ((fds[i].fd == outfd) ? outbuf : errbuf);
+ size = (*buf ? strlen(*buf) : 0);
+ if (VIR_REALLOC_N(*buf, size+got+1) < 0) {
+ virReportOOMError();
+ goto error;
+ }
+ memmove(*buf+size, data, got);
+ (*buf)[size+got] = '\0';
+ }
+ continue;
+
+ pollerr:
+ virReportSystemError(errno,
+ "%s", _("poll error"));
+ goto error;
+ }
+
+ return 0;
+
+error:
+ VIR_FREE(*outbuf);
+ VIR_FREE(*errbuf);
+ return -1;
+}
+
+int
virRun(const char *const*argv,
int *status) {
return virRunWithHook(argv, NULL, NULL, status);
--
1.7.0.4