Update to latest clar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
diff --git a/tests/clar/fs.h b/tests/clar/fs.h
index b7a1ff9..7c7dde6 100644
--- a/tests/clar/fs.h
+++ b/tests/clar/fs.h
@@ -12,7 +12,7 @@
#endif /* __MINGW32__ */
-static int
+static int
fs__dotordotdot(WCHAR *_tocheck)
{
return _tocheck[0] == '.' &&
@@ -201,7 +201,7 @@ fs_copy(const char *_source, const char *_dest)
DWORD source_attrs, dest_attrs;
HANDLE find_handle;
WIN32_FIND_DATAW find_data;
-
+
/* The input paths are UTF-8. Convert them to wide characters
* for use with the Windows API. */
cl_assert(MultiByteToWideChar(CP_UTF8,
@@ -251,17 +251,22 @@ cl_fs_cleanup(void)
}
#else
+
+#include <errno.h>
+#include <string.h>
+
static int
shell_out(char * const argv[])
{
- int status;
+ int status, piderr;
pid_t pid;
pid = fork();
if (pid < 0) {
fprintf(stderr,
- "System error: `fork()` call failed.\n");
+ "System error: `fork()` call failed (%d) - %s\n",
+ errno, strerror(errno));
exit(-1);
}
@@ -269,7 +274,10 @@ shell_out(char * const argv[])
execv(argv[0], argv);
}
- waitpid(pid, &status, 0);
+ do {
+ piderr = waitpid(pid, &status, WUNTRACED);
+ } while (piderr < 0 && (errno == EAGAIN || errno == EINTR));
+
return WEXITSTATUS(status);
}