* [PATCH v9 00/26] W32, W64 msys2/mingw patches
@ 2020-09-15 12:12 Yonggang Luo
2020-09-15 12:12 ` [PATCH v9 01/26] rcu: Implement drain_call_rcu Yonggang Luo
` (26 more replies)
0 siblings, 27 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:12 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
Xie Changlong, Peter Lieven, Markus Armbruster, Max Reitz,
Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
Richard Henderson, Li-Wen Hsu
V8-V9
* ci: Enable msys2 ci in cirrus
do not install libnfs, libcapstone and jemalloc
ident lines properly
Do not install libnfs when the add the msys2 ci,
* Revert "configure: add --ninja option"
Skip this revision
* block: Fixes nfs compiling error on msys2/mingw
Use typedef long long blkcnt_t; for libnfs on msys2/mingw
for futher implemenation, still disable nfs_get_allocated_file_size
on win32 as it not working yet, but preserve the possibility implemenation
it in futher
* gcrypt: test_tls_psk_init should write binary file instead text file.
only fixes the file open mode parameter
* osdep: file locking functions are not available on Win32:
Reword with "Do not declare the following locking functions on Win32:"
* meson: Use -b to ignore CR vs. CR-LF issues on Windows
Reword of commit message
* tests: Enable crypto tests under msys2/mingw
Reimplement qemu_socketpair in a simpler way. without thirdparty code
* block: enable libnfs on msys2/mingw in cirrus.yml
New commit
* tests: disable /char/stdio/* tests in test-char.c on win32
Needs review
* tests: fixes aio-win32 about aio_remove_fd_handler, get it consistence with=
aio-posix.c
Needs review
* rcu: fixes test-logging.c by call drain_call_rcu before rmdir_full
Needs review
It first introduce msys2 CI on cirrus by fixes nfs, capstone, curses and
disable partial test-char tests.
And then fixes all unit tests failure on msys2/mingw
This fixes the reviews suggested in the mailling list
All cirrus CI are passed
Maxim Levitsky (1):
rcu: Implement drain_call_rcu
Yonggang Luo (25):
ci: fixes msys2 build by upgrading capstone to 4.0.2
configure: Fixes ncursesw detection under msys2/mingw and enable
curses
win32: Simplify gmtime_r detection direct base on
_POSIX_THREAD_SAFE_FUNCTIONS.
curses: Fixes curses compiling errors.
tests: disable /char/stdio/* tests in test-char.c on win32
tests: Fixes test-replication.c on msys2/mingw.
tests: test-replication disable /replication/secondary/* on
msys2/mingw.
osdep: file locking functions are not available on Win32
meson: Use -b to ignore CR vs. CR-LF issues on Windows
gcrypt: test_tls_psk_init should write binary file instead text file.
tests: Enable crypto tests under msys2/mingw
meson: remove empty else and duplicated gio deps
vmstate: Fixes test-vmstate.c on msys2/mingw
cirrus: Building freebsd in a single short
tests: Convert g_free to g_autofree macro in test-logging.c
tests: Fixes test-io-channel-socket.c tests under msys2/mingw
tests: fixes aio-win32 about aio_remove_fd_handler, get it consistence
with aio-posix.c
tests: Fixes test-io-channel-file by mask only owner file state mask
bits
tests: fix test-util-sockets.c
tests: Fixes test-qdev-global-props.c
rcu: fixes test-logging.c by call drain_call_rcu before rmdir_full
meson: upgrade meson for execute custom ninjatool under msys2 properly
ci: Enable msys2 ci in cirrus
block: Fixes nfs compiling error on msys2/mingw
block: enable libnfs on msys2/mingw in cirrus.yml
.cirrus.yml | 97 ++++++++++++++++++++--------
block/nfs.c | 37 +++++++++--
capstone | 2 +-
configure | 61 +++++-------------
include/qemu/osdep.h | 2 +-
include/qemu/rcu.h | 1 +
include/sysemu/os-win32.h | 4 +-
meson | 2 +-
meson.build | 6 --
tests/crypto-tls-psk-helpers.c | 6 +-
tests/crypto-tls-x509-helpers.c | 106 ++++++++++++++++++++++++++++++-
tests/crypto-tls-x509-helpers.h | 9 ++-
tests/qapi-schema/meson.build | 2 +-
tests/test-char.c | 26 +++++---
tests/test-crypto-tlscredsx509.c | 47 +++++++-------
tests/test-crypto-tlssession.c | 68 +++++++++++---------
tests/test-io-channel-file.c | 10 ++-
tests/test-io-channel-socket.c | 2 +
tests/test-io-channel-tls.c | 51 ++++++++-------
tests/test-logging.c | 5 +-
tests/test-qdev-global-props.c | 6 +-
tests/test-replication.c | 22 +++++--
tests/test-util-sockets.c | 6 +-
tests/test-vmstate.c | 3 +-
ui/curses.c | 14 ++--
util/aio-win32.c | 11 +++-
util/oslib-win32.c | 2 +-
util/rcu.c | 55 ++++++++++++++++
28 files changed, 460 insertions(+), 203 deletions(-)
--=20
2.28.0.windows.1
^ permalink raw reply [flat|nested] 32+ messages in thread
* [PATCH v9 01/26] rcu: Implement drain_call_rcu
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
@ 2020-09-15 12:12 ` Yonggang Luo
2020-09-15 12:12 ` [PATCH v9 02/26] ci: fixes msys2 build by upgrading capstone to 4.0.2 Yonggang Luo
` (25 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:12 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Maxim Levitsky, Ed Maste, Michael Roth, qemu-block,
Stefan Hajnoczi, Stefan Weil, Xie Changlong, Peter Lieven,
Markus Armbruster, Max Reitz, Gerd Hoffmann, Stefan Hajnoczi,
Wen Congyang, Paolo Bonzini, Richard Henderson, Li-Wen Hsu
From: Maxim Levitsky <mlevitsk@redhat.com>
This will allow is to preserve the semantics of hmp_device_del,
that the device is deleted immediatly which was changed by previos
patch that delayed this to RCU callback
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
Suggested-by: Stefan Hajnoczi <stefanha@gmail.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
---
include/qemu/rcu.h | 1 +
util/rcu.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+)
diff --git a/include/qemu/rcu.h b/include/qemu/rcu.h
index 570aa603eb..0e375ebe13 100644
--- a/include/qemu/rcu.h
+++ b/include/qemu/rcu.h
@@ -133,6 +133,7 @@ struct rcu_head {
};
extern void call_rcu1(struct rcu_head *head, RCUCBFunc *func);
+extern void drain_call_rcu(void);
/* The operands of the minus operator must have the same type,
* which must be the one that we specify in the cast.
diff --git a/util/rcu.c b/util/rcu.c
index 60a37f72c3..c4fefa9333 100644
--- a/util/rcu.c
+++ b/util/rcu.c
@@ -293,6 +293,61 @@ void call_rcu1(struct rcu_head *node, void (*func)(struct rcu_head *node))
qemu_event_set(&rcu_call_ready_event);
}
+
+struct rcu_drain {
+ struct rcu_head rcu;
+ QemuEvent drain_complete_event;
+};
+
+static void drain_rcu_callback(struct rcu_head *node)
+{
+ struct rcu_drain *event = (struct rcu_drain *)node;
+ qemu_event_set(&event->drain_complete_event);
+}
+
+/*
+ * This function ensures that all pending RCU callbacks
+ * on the current thread are done executing
+
+ * drops big qemu lock during the wait to allow RCU thread
+ * to process the callbacks
+ *
+ */
+
+void drain_call_rcu(void)
+{
+ struct rcu_drain rcu_drain;
+ bool locked = qemu_mutex_iothread_locked();
+
+ memset(&rcu_drain, 0, sizeof(struct rcu_drain));
+ qemu_event_init(&rcu_drain.drain_complete_event, false);
+
+ if (locked) {
+ qemu_mutex_unlock_iothread();
+ }
+
+
+ /*
+ * RCU callbacks are invoked in the same order as in which they
+ * are registered, thus we can be sure that when 'drain_rcu_callback'
+ * is called, all RCU callbacks that were registered on this thread
+ * prior to calling this function are completed.
+ *
+ * Note that since we have only one global queue of the RCU callbacks,
+ * we also end up waiting for most of RCU callbacks that were registered
+ * on the other threads, but this is a side effect that shoudn't be
+ * assumed.
+ */
+
+ call_rcu1(&rcu_drain.rcu, drain_rcu_callback);
+ qemu_event_wait(&rcu_drain.drain_complete_event);
+
+ if (locked) {
+ qemu_mutex_lock_iothread();
+ }
+
+}
+
void rcu_register_thread(void)
{
assert(rcu_reader.ctr == 0);
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 02/26] ci: fixes msys2 build by upgrading capstone to 4.0.2
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
2020-09-15 12:12 ` [PATCH v9 01/26] rcu: Implement drain_call_rcu Yonggang Luo
@ 2020-09-15 12:12 ` Yonggang Luo
2020-09-15 12:12 ` [PATCH v9 03/26] configure: Fixes ncursesw detection under msys2/mingw and enable curses Yonggang Luo
` (24 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:12 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
Xie Changlong, Peter Lieven, Markus Armbruster, Max Reitz,
Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
Richard Henderson, Li-Wen Hsu
The currently random version capstone have the following compiling issue:
CC /c/work/xemu/qemu/build/slirp/src/arp_table.o
make[1]: *** No rule to make target “/c/work/xemu/qemu/build/capstone/capstone.lib”。 Stop.
Subproject commit 1d230532840a37ac032c6ab80128238fc930c6c1 are the tagged version 4.0.2
when upgrading to this version, the folder structure of include are changed to
qemu\capstone\include
│ platform.h
│
├─capstone
│ arm.h
│ arm64.h
│ capstone.h
│ evm.h
│ m680x.h
│ m68k.h
│ mips.h
│ platform.h
│ ppc.h
│ sparc.h
│ systemz.h
│ tms320c64x.h
│ x86.h
│ xcore.h
│
└─windowsce
intrin.h
stdint.h
in capstone. so we need add extra include path -I${source_path}/capstone/include/capstone
for directly #include <capstone.h>, and the exist include path should preserve, because
in capstone code there something like #include "capstone/capstone.h"
If only using
capstone_cflags="-I${source_path}/capstone/include/capstone"
Then will cause the following compiling error:
CC cs.o
cs.c:17:10: fatal error: 'capstone/capstone.h' file not found
#include <capstone/capstone.h>
^~~~~~~~~~~~~~~~~~~~~
1 error generated.
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
capstone | 2 +-
configure | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/capstone b/capstone
index 22ead3e0bf..1d23053284 160000
--- a/capstone
+++ b/capstone
@@ -1 +1 @@
-Subproject commit 22ead3e0bfdb87516656453336160e0a37b066bf
+Subproject commit 1d230532840a37ac032c6ab80128238fc930c6c1
diff --git a/configure b/configure
index ce27eafb0a..f59080703e 100755
--- a/configure
+++ b/configure
@@ -5157,7 +5157,7 @@ case "$capstone" in
LIBCAPSTONE=libcapstone.a
fi
capstone_libs="-Lcapstone -lcapstone"
- capstone_cflags="-I${source_path}/capstone/include"
+ capstone_cflags="-I${source_path}/capstone/include -I${source_path}/capstone/include/capstone"
;;
system)
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 03/26] configure: Fixes ncursesw detection under msys2/mingw and enable curses
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
2020-09-15 12:12 ` [PATCH v9 01/26] rcu: Implement drain_call_rcu Yonggang Luo
2020-09-15 12:12 ` [PATCH v9 02/26] ci: fixes msys2 build by upgrading capstone to 4.0.2 Yonggang Luo
@ 2020-09-15 12:12 ` Yonggang Luo
2020-09-15 12:12 ` [PATCH v9 04/26] win32: Simplify gmtime_r detection direct base on _POSIX_THREAD_SAFE_FUNCTIONS Yonggang Luo
` (23 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:12 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
Xie Changlong, Peter Lieven, Markus Armbruster, Max Reitz,
Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
Richard Henderson, Li-Wen Hsu
The mingw pkg-config are showing following absolute path and contains : as the separator,
so we must not use : as path separator. and we know the command line parameter are not likely
contains newline, we could use newline as path command line parameter separator
-D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199506L -IC:/CI-Tools/msys64/mingw64/include/ncursesw:-I/usr/include/ncursesw:
-DNCURSES_WIDECHAR -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199506L -IC -pipe -lncursesw -lgnurx -ltre -lintl -liconv
-DNCURSES_WIDECHAR -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199506L -IC -lncursesw
-DNCURSES_WIDECHAR -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199506L -IC -lcursesw
-DNCURSES_WIDECHAR /CI-Tools/msys64/mingw64/include/ncursesw -pipe -lncursesw -lgnurx -ltre -lintl -liconv
-DNCURSES_WIDECHAR /CI-Tools/msys64/mingw64/include/ncursesw -lncursesw
-DNCURSES_WIDECHAR /CI-Tools/msys64/mingw64/include/ncursesw -lcursesw
-DNCURSES_WIDECHAR -I/usr/include/ncursesw -pipe -lncursesw -lgnurx -ltre -lintl -liconv
-DNCURSES_WIDECHAR -I/usr/include/ncursesw -lncursesw
-DNCURSES_WIDECHAR -I/usr/include/ncursesw -lcursesw
Refer to https://unix.stackexchange.com/a/103011/218958
If your file names are guaranteed not to contain newlines, you can use newlines as the separator. W
hen you expand the variable, first turn off globbing with set -f and set the list of field splitting characters
IFS to contain only a newline.
msys2/mingw lacks the POSIX-required langinfo.h.
gcc test.c -DNCURSES_WIDECHAR -I/mingw64/include/ncursesw -pipe -lncursesw -lgnurx -ltre -lintl -liconv
test.c:4:10: fatal error: langinfo.h: No such file or directory
4 | #include <langinfo.h>
| ^~~~~~~~~~~~
compilation terminated.
So we using g_get_codeset instead of nl_langinfo(CODESET)
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
---
configure | 25 +++++++++++++++----------
ui/curses.c | 10 +++++-----
2 files changed, 20 insertions(+), 15 deletions(-)
diff --git a/configure b/configure
index f59080703e..dc4b7a2e55 100755
--- a/configure
+++ b/configure
@@ -3654,35 +3654,40 @@ if test "$iconv" = "no" ; then
fi
if test "$curses" != "no" ; then
if test "$mingw32" = "yes" ; then
- curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
- curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
+ curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null)
+ $($pkg_config --cflags ncursesw 2>/dev/null)"
+ curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null)
+ $($pkg_config --libs ncursesw 2>/dev/null)
+ -lpdcurses"
else
- curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
- curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
+ curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null)
+ -I/usr/include/ncursesw:"
+ curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null)
+ -lncursesw
+ -lcursesw"
fi
curses_found=no
cat > $TMPC << EOF
#include <locale.h>
#include <curses.h>
#include <wchar.h>
-#include <langinfo.h>
int main(void) {
- const char *codeset;
wchar_t wch = L'w';
setlocale(LC_ALL, "");
resize_term(0, 0);
addwstr(L"wide chars\n");
addnwstr(&wch, 1);
add_wch(WACS_DEGREE);
- codeset = nl_langinfo(CODESET);
- return codeset != 0;
+ return 0;
}
EOF
- IFS=:
+ IFS='
+' # turn off variable value expansion except for splitting at newlines
for curses_inc in $curses_inc_list; do
# Make sure we get the wide character prototypes
curses_inc="-DNCURSES_WIDECHAR $curses_inc"
- IFS=:
+ IFS='
+' # turn off variable value expansion except for splitting at newlines
for curses_lib in $curses_lib_list; do
unset IFS
if compile_prog "$curses_inc" "$curses_lib" ; then
diff --git a/ui/curses.c b/ui/curses.c
index a59b23a9cf..12bc682cf9 100644
--- a/ui/curses.c
+++ b/ui/curses.c
@@ -30,7 +30,6 @@
#endif
#include <locale.h>
#include <wchar.h>
-#include <langinfo.h>
#include <iconv.h>
#include "qapi/error.h"
@@ -526,6 +525,7 @@ static void font_setup(void)
iconv_t nativecharset_to_ucs2;
iconv_t font_conv;
int i;
+ g_autofree gchar *local_codeset = g_get_codeset();
/*
* Control characters are normally non-printable, but VGA does have
@@ -566,14 +566,14 @@ static void font_setup(void)
0x25bc
};
- ucs2_to_nativecharset = iconv_open(nl_langinfo(CODESET), "UCS-2");
+ ucs2_to_nativecharset = iconv_open(local_codeset, "UCS-2");
if (ucs2_to_nativecharset == (iconv_t) -1) {
fprintf(stderr, "Could not convert font glyphs from UCS-2: '%s'\n",
strerror(errno));
exit(1);
}
- nativecharset_to_ucs2 = iconv_open("UCS-2", nl_langinfo(CODESET));
+ nativecharset_to_ucs2 = iconv_open("UCS-2", local_codeset);
if (nativecharset_to_ucs2 == (iconv_t) -1) {
iconv_close(ucs2_to_nativecharset);
fprintf(stderr, "Could not convert font glyphs to UCS-2: '%s'\n",
@@ -581,7 +581,7 @@ static void font_setup(void)
exit(1);
}
- font_conv = iconv_open(nl_langinfo(CODESET), font_charset);
+ font_conv = iconv_open(local_codeset, font_charset);
if (font_conv == (iconv_t) -1) {
iconv_close(ucs2_to_nativecharset);
iconv_close(nativecharset_to_ucs2);
@@ -602,7 +602,7 @@ static void font_setup(void)
/* DEL */
convert_ucs(0x7F, 0x2302, ucs2_to_nativecharset);
- if (strcmp(nl_langinfo(CODESET), "UTF-8")) {
+ if (strcmp(local_codeset, "UTF-8")) {
/* Non-Unicode capable, use termcap equivalents for those available */
for (i = 0; i <= 0xFF; i++) {
wchar_t wch[CCHARW_MAX];
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 04/26] win32: Simplify gmtime_r detection direct base on _POSIX_THREAD_SAFE_FUNCTIONS.
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (2 preceding siblings ...)
2020-09-15 12:12 ` [PATCH v9 03/26] configure: Fixes ncursesw detection under msys2/mingw and enable curses Yonggang Luo
@ 2020-09-15 12:12 ` Yonggang Luo
2020-09-15 13:00 ` Daniel P. Berrangé
2020-09-15 12:12 ` [PATCH v9 05/26] curses: Fixes curses compiling errors Yonggang Luo
` (22 subsequent siblings)
26 siblings, 1 reply; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:12 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
Xie Changlong, Peter Lieven, Markus Armbruster, Max Reitz,
Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
Richard Henderson, Li-Wen Hsu
First, this reduce the size of configure, configure are tending to removal in future,
and this didn't introduce any new feature or remove any exist feature.
Second, the current localtime_r detection are conflict with ncursesw detection in
mingw, when ncursesw detected, it will provide the following compile flags
pkg-config --cflags ncursesw
-D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199506L -IC:/CI-Tools/msys64/mingw64/include/ncursesw
And the compile flag _POSIX_C_SOURCE will always cause _POSIX_THREAD_SAFE_FUNCTIONS to
be defined, in new version of mingw, that's will cause localtime_r to be defined.
But the configure script didn't provide _POSIX_C_SOURCE macro, and that's will result
localtime_r not detected because localtime_r are defined in forceinline manner.
And finally cause conflict between QEMU defined localtime_r
struct tm *localtime_r(const time_t *timep, struct tm *result);
with mingw defined localtime_r
```
#if defined(_POSIX_C_SOURCE) && !defined(_POSIX_THREAD_SAFE_FUNCTIONS)
#define _POSIX_THREAD_SAFE_FUNCTIONS 200112L
#endif
#ifdef _POSIX_THREAD_SAFE_FUNCTIONS
__forceinline struct tm *__CRTDECL localtime_r(const time_t *_Time, struct tm *_Tm) {
return localtime_s(_Tm, _Time) ? NULL : _Tm;
}
__forceinline struct tm *__CRTDECL gmtime_r(const time_t *_Time, struct tm *_Tm) {
return gmtime_s(_Tm, _Time) ? NULL : _Tm;
}
__forceinline char *__CRTDECL ctime_r(const time_t *_Time, char *_Str) {
return ctime_s(_Str, 0x7fffffff, _Time) ? NULL : _Str;
}
__forceinline char *__CRTDECL asctime_r(const struct tm *_Tm, char * _Str) {
return asctime_s(_Str, 0x7fffffff, _Tm) ? NULL : _Str;
}
#endif
```
So I suggest remove this configure script, and restrict msys2/mingw version to easy to maintain.
And use _POSIX_THREAD_SAFE_FUNCTIONS to guard the localtime_r and counterpart functions
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
configure | 34 ----------------------------------
include/sysemu/os-win32.h | 4 ++--
util/oslib-win32.c | 2 +-
3 files changed, 3 insertions(+), 37 deletions(-)
diff --git a/configure b/configure
index dc4b7a2e55..bac48b5b49 100755
--- a/configure
+++ b/configure
@@ -2496,37 +2496,6 @@ if test "$vhost_net" = ""; then
test "$vhost_kernel" = "yes" && vhost_net=yes
fi
-##########################################
-# MinGW / Mingw-w64 localtime_r/gmtime_r check
-
-if test "$mingw32" = "yes"; then
- # Some versions of MinGW / Mingw-w64 lack localtime_r
- # and gmtime_r entirely.
- #
- # Some versions of Mingw-w64 define a macro for
- # localtime_r/gmtime_r.
- #
- # Some versions of Mingw-w64 will define functions
- # for localtime_r/gmtime_r, but only if you have
- # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
- # though, unistd.h and pthread.h both define
- # that for you.
- #
- # So this #undef localtime_r and #include <unistd.h>
- # are not in fact redundant.
-cat > $TMPC << EOF
-#include <unistd.h>
-#include <time.h>
-#undef localtime_r
-int main(void) { localtime_r(NULL, NULL); return 0; }
-EOF
- if compile_prog "" "" ; then
- localtime_r="yes"
- else
- localtime_r="no"
- fi
-fi
-
##########################################
# pkg-config probe
@@ -7088,9 +7057,6 @@ if [ "$bsd" = "yes" ] ; then
echo "CONFIG_BSD=y" >> $config_host_mak
fi
-if test "$localtime_r" = "yes" ; then
- echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
-fi
if test "$qom_cast_debug" = "yes" ; then
echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
fi
diff --git a/include/sysemu/os-win32.h b/include/sysemu/os-win32.h
index d8978e28c0..3ac8a53bac 100644
--- a/include/sysemu/os-win32.h
+++ b/include/sysemu/os-win32.h
@@ -48,12 +48,12 @@
#define siglongjmp(env, val) longjmp(env, val)
/* Missing POSIX functions. Don't use MinGW-w64 macros. */
-#ifndef CONFIG_LOCALTIME_R
+#ifndef _POSIX_THREAD_SAFE_FUNCTIONS
#undef gmtime_r
struct tm *gmtime_r(const time_t *timep, struct tm *result);
#undef localtime_r
struct tm *localtime_r(const time_t *timep, struct tm *result);
-#endif /* CONFIG_LOCALTIME_R */
+#endif
static inline void os_setup_signal_handling(void) {}
static inline void os_daemonize(void) {}
diff --git a/util/oslib-win32.c b/util/oslib-win32.c
index c654dafd93..f2fa9a3549 100644
--- a/util/oslib-win32.c
+++ b/util/oslib-win32.c
@@ -106,7 +106,7 @@ void qemu_anon_ram_free(void *ptr, size_t size)
}
}
-#ifndef CONFIG_LOCALTIME_R
+#ifndef _POSIX_THREAD_SAFE_FUNCTIONS
/* FIXME: add proper locking */
struct tm *gmtime_r(const time_t *timep, struct tm *result)
{
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 05/26] curses: Fixes curses compiling errors.
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (3 preceding siblings ...)
2020-09-15 12:12 ` [PATCH v9 04/26] win32: Simplify gmtime_r detection direct base on _POSIX_THREAD_SAFE_FUNCTIONS Yonggang Luo
@ 2020-09-15 12:12 ` Yonggang Luo
2020-09-15 12:12 ` [PATCH v9 06/26] tests: disable /char/stdio/* tests in test-char.c on win32 Yonggang Luo
` (21 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:12 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P . Berrangé, Ed Maste, Michael Roth,
qemu-block, Stefan Weil, Xie Changlong, Peter Lieven,
Markus Armbruster, Max Reitz, Yonggang Luo, Gerd Hoffmann,
Wen Congyang, Paolo Bonzini, Richard Henderson, Li-Wen Hsu
This is the compiling error:
../ui/curses.c: In function 'curses_refresh':
../ui/curses.c:256:5: error: 'next_maybe_keycode' may be used uninitialized in this function [-Werror=maybe-uninitialized]
256 | curses2foo(_curses2keycode, _curseskey2keycode, chr, maybe_keycode)
| ^~~~~~~~~~
../ui/curses.c:302:32: note: 'next_maybe_keycode' was declared here
302 | enum maybe_keycode next_maybe_keycode;
| ^~~~~~~~~~~~~~~~~~
../ui/curses.c:256:5: error: 'maybe_keycode' may be used uninitialized in this function [-Werror=maybe-uninitialized]
256 | curses2foo(_curses2keycode, _curseskey2keycode, chr, maybe_keycode)
| ^~~~~~~~~~
../ui/curses.c:265:24: note: 'maybe_keycode' was declared here
265 | enum maybe_keycode maybe_keycode;
| ^~~~~~~~~~~~~
cc1.exe: all warnings being treated as errors
gcc version 10.2.0 (Rev1, Built by MSYS2 project)
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
ui/curses.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ui/curses.c b/ui/curses.c
index 12bc682cf9..e4f9588c3e 100644
--- a/ui/curses.c
+++ b/ui/curses.c
@@ -262,7 +262,7 @@ static int curses2foo(const int _curses2foo[], const int _curseskey2foo[],
static void curses_refresh(DisplayChangeListener *dcl)
{
int chr, keysym, keycode, keycode_alt;
- enum maybe_keycode maybe_keycode;
+ enum maybe_keycode maybe_keycode = CURSES_KEYCODE;
curses_winch_check();
@@ -299,7 +299,7 @@ static void curses_refresh(DisplayChangeListener *dcl)
/* alt or esc key */
if (keycode == 1) {
- enum maybe_keycode next_maybe_keycode;
+ enum maybe_keycode next_maybe_keycode = CURSES_KEYCODE;
int nextchr = console_getch(&next_maybe_keycode);
if (nextchr != -1) {
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 06/26] tests: disable /char/stdio/* tests in test-char.c on win32
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (4 preceding siblings ...)
2020-09-15 12:12 ` [PATCH v9 05/26] curses: Fixes curses compiling errors Yonggang Luo
@ 2020-09-15 12:12 ` Yonggang Luo
2020-09-15 12:12 ` [PATCH v9 07/26] tests: Fixes test-replication.c on msys2/mingw Yonggang Luo
` (20 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:12 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
Xie Changlong, Peter Lieven, Markus Armbruster, Max Reitz,
Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
Richard Henderson, Li-Wen Hsu
These tests are blocking test-char to be finished.
Disable them by using variable is_win32, so we doesn't
need macro to open it. and easy recover those function
latter.
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
tests/test-char.c | 26 ++++++++++++++++----------
1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/tests/test-char.c b/tests/test-char.c
index d35cc839bc..184ddceab8 100644
--- a/tests/test-char.c
+++ b/tests/test-char.c
@@ -77,7 +77,6 @@ static void fe_event(void *opaque, QEMUChrEvent event)
}
}
-#ifdef _WIN32
static void char_console_test_subprocess(void)
{
QemuOpts *opts;
@@ -102,7 +101,7 @@ static void char_console_test(void)
g_test_trap_assert_passed();
g_test_trap_assert_stdout("CONSOLE");
}
-#endif
+
static void char_stdio_test_subprocess(void)
{
Chardev *chr;
@@ -1448,7 +1447,11 @@ static SocketAddress unixaddr = {
int main(int argc, char **argv)
{
- bool has_ipv4, has_ipv6;
+ bool has_ipv4, has_ipv6, is_win32 = false;
+
+#ifdef _WIN32
+ is_win32 = true;
+#endif
qemu_init_main_loop(&error_abort);
socket_init();
@@ -1467,12 +1470,15 @@ int main(int argc, char **argv)
g_test_add_func("/char/invalid", char_invalid_test);
g_test_add_func("/char/ringbuf", char_ringbuf_test);
g_test_add_func("/char/mux", char_mux_test);
-#ifdef _WIN32
- g_test_add_func("/char/console/subprocess", char_console_test_subprocess);
- g_test_add_func("/char/console", char_console_test);
-#endif
- g_test_add_func("/char/stdio/subprocess", char_stdio_test_subprocess);
- g_test_add_func("/char/stdio", char_stdio_test);
+ if (0) {
+ g_test_add_func("/char/console/subprocess", char_console_test_subprocess);
+ g_test_add_func("/char/console", char_console_test);
+ }
+
+ if (!is_win32) {
+ g_test_add_func("/char/stdio/subprocess", char_stdio_test_subprocess);
+ g_test_add_func("/char/stdio", char_stdio_test);
+ }
#ifndef _WIN32
g_test_add_func("/char/pipe", char_pipe_test);
#endif
@@ -1534,7 +1540,7 @@ int main(int argc, char **argv)
g_test_add_data_func("/char/socket/client/dupid-reconnect/" # name, \
&client8 ##name, char_socket_client_dupid_test)
- if (has_ipv4) {
+ if (has_ipv4 && !is_win32) {
SOCKET_SERVER_TEST(tcp, &tcpaddr);
SOCKET_CLIENT_TEST(tcp, &tcpaddr);
g_test_add_data_func("/char/socket/server/two-clients/tcp", &tcpaddr,
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 07/26] tests: Fixes test-replication.c on msys2/mingw.
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (5 preceding siblings ...)
2020-09-15 12:12 ` [PATCH v9 06/26] tests: disable /char/stdio/* tests in test-char.c on win32 Yonggang Luo
@ 2020-09-15 12:12 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 08/26] tests: test-replication disable /replication/secondary/* " Yonggang Luo
` (19 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:12 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P . Berrangé, Ed Maste, Michael Roth,
qemu-block, Stefan Weil, Xie Changlong, Peter Lieven,
Markus Armbruster, Max Reitz, Yonggang Luo, Gerd Hoffmann,
Wen Congyang, Paolo Bonzini, Richard Henderson, Li-Wen Hsu
On Windows there is no path like /tmp/s_local_disk.XXXXXX
Use g_get_tmp_dir instead of /tmp.
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
tests/test-replication.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/tests/test-replication.c b/tests/test-replication.c
index 9ab3666a90..e7cbd6b144 100644
--- a/tests/test-replication.c
+++ b/tests/test-replication.c
@@ -23,14 +23,14 @@
/* primary */
#define P_ID "primary-id"
-static char p_local_disk[] = "/tmp/p_local_disk.XXXXXX";
+static char *p_local_disk;
/* secondary */
#define S_ID "secondary-id"
#define S_LOCAL_DISK_ID "secondary-local-disk-id"
-static char s_local_disk[] = "/tmp/s_local_disk.XXXXXX";
-static char s_active_disk[] = "/tmp/s_active_disk.XXXXXX";
-static char s_hidden_disk[] = "/tmp/s_hidden_disk.XXXXXX";
+static char *s_local_disk;
+static char *s_active_disk;
+static char *s_hidden_disk;
/* FIXME: steal from blockdev.c */
QemuOptsList qemu_drive_opts = {
@@ -571,6 +571,11 @@ static void setup_sigabrt_handler(void)
int main(int argc, char **argv)
{
int ret;
+ const char *tmpdir = g_get_tmp_dir();
+ p_local_disk = g_strdup_printf("%s/p_local_disk.XXXXXX", tmpdir);
+ s_local_disk = g_strdup_printf("%s/s_local_disk.XXXXXX", tmpdir);
+ s_active_disk = g_strdup_printf("%s/s_active_disk.XXXXXX", tmpdir);
+ s_hidden_disk = g_strdup_printf("%s/s_hidden_disk.XXXXXX", tmpdir);
qemu_init_main_loop(&error_fatal);
bdrv_init();
@@ -605,5 +610,10 @@ int main(int argc, char **argv)
cleanup_imgs();
+ g_free(p_local_disk);
+ g_free(s_local_disk);
+ g_free(s_active_disk);
+ g_free(s_hidden_disk);
+
return ret;
}
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 08/26] tests: test-replication disable /replication/secondary/* on msys2/mingw.
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (6 preceding siblings ...)
2020-09-15 12:12 ` [PATCH v9 07/26] tests: Fixes test-replication.c on msys2/mingw Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 09/26] osdep: file locking functions are not available on Win32 Yonggang Luo
` (18 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P . Berrangé, Ed Maste, Michael Roth,
qemu-block, Stefan Weil, Xie Changlong, Peter Lieven,
Markus Armbruster, Max Reitz, Yonggang Luo, Gerd Hoffmann,
Wen Congyang, Paolo Bonzini, Richard Henderson, Li-Wen Hsu
They caused failure on msys2/mingw, that's because file-win32.c not implement
.bdrv_reopen_prepare/commit/abort yet.
This is the error message:
> $ ./tests/test-replication.exe
> # random seed: R02S3f4d1c01af2b0a046990e0235c481faf
> 1..13
> # Start of replication tests
> # Start of primary tests
> ok 1 /replication/primary/read
> ok 2 /replication/primary/write
> ok 3 /replication/primary/start
> ok 4 /replication/primary/stop
> ok 5 /replication/primary/do_checkpoint
> ok 6 /replication/primary/get_error_all
> # End of primary tests
> # Start of secondary tests
> ok 7 /replication/secondary/read
> ok 8 /replication/secondary/write
> Unexpected error in bdrv_reopen_prepare() at ../block.c:4191:
> Block format 'file' used by node '#block4287' does not support reopening
> files
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
tests/test-replication.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/tests/test-replication.c b/tests/test-replication.c
index e7cbd6b144..b067240add 100644
--- a/tests/test-replication.c
+++ b/tests/test-replication.c
@@ -392,6 +392,7 @@ static void test_secondary_write(void)
teardown_secondary();
}
+#ifndef _WIN32
static void test_secondary_start(void)
{
BlockBackend *top_blk, *local_blk;
@@ -546,6 +547,7 @@ static void test_secondary_get_error_all(void)
teardown_secondary();
}
+#endif
static void sigabrt_handler(int signo)
{
@@ -597,6 +599,7 @@ int main(int argc, char **argv)
/* Secondary */
g_test_add_func("/replication/secondary/read", test_secondary_read);
g_test_add_func("/replication/secondary/write", test_secondary_write);
+#ifndef _WIN32
g_test_add_func("/replication/secondary/start", test_secondary_start);
g_test_add_func("/replication/secondary/stop", test_secondary_stop);
g_test_add_func("/replication/secondary/continuous_replication",
@@ -605,6 +608,7 @@ int main(int argc, char **argv)
test_secondary_do_checkpoint);
g_test_add_func("/replication/secondary/get_error_all",
test_secondary_get_error_all);
+#endif
ret = g_test_run();
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 09/26] osdep: file locking functions are not available on Win32
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (7 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 08/26] tests: test-replication disable /replication/secondary/* " Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 10/26] meson: Use -b to ignore CR vs. CR-LF issues on Windows Yonggang Luo
` (17 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P . Berrangé, Ed Maste, Michael Roth,
qemu-block, Stefan Weil, Xie Changlong, Peter Lieven,
Markus Armbruster, Max Reitz, Yonggang Luo, Gerd Hoffmann,
Wen Congyang, Paolo Bonzini, Richard Henderson, Li-Wen Hsu
Do not declare the following locking functions on Win32:
int qemu_lock_fd(int fd, int64_t start, int64_t len, bool exclusive);
int qemu_unlock_fd(int fd, int64_t start, int64_t len);
int qemu_lock_fd_test(int fd, int64_t start, int64_t len, bool exclusive);
bool qemu_has_ofd_lock(void);
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
include/qemu/osdep.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
index 412962d91a..e80fddd1e8 100644
--- a/include/qemu/osdep.h
+++ b/include/qemu/osdep.h
@@ -502,11 +502,11 @@ int qemu_close(int fd);
int qemu_unlink(const char *name);
#ifndef _WIN32
int qemu_dup(int fd);
-#endif
int qemu_lock_fd(int fd, int64_t start, int64_t len, bool exclusive);
int qemu_unlock_fd(int fd, int64_t start, int64_t len);
int qemu_lock_fd_test(int fd, int64_t start, int64_t len, bool exclusive);
bool qemu_has_ofd_lock(void);
+#endif
#if defined(__HAIKU__) && defined(__i386__)
#define FMT_pid "%ld"
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 10/26] meson: Use -b to ignore CR vs. CR-LF issues on Windows
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (8 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 09/26] osdep: file locking functions are not available on Win32 Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 11/26] gcrypt: test_tls_psk_init should write binary file instead text file Yonggang Luo
` (16 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P . Berrangé, Ed Maste, Michael Roth,
qemu-block, Stefan Weil, Xie Changlong, Peter Lieven,
Markus Armbruster, Max Reitz, Yonggang Luo, Gerd Hoffmann,
Wen Congyang, Paolo Bonzini, Richard Henderson, Li-Wen Hsu
Ideally we would use the '--strip-trailing-cr' option, but not
being POSIX is a portability problem (i.e. BSDs and Solaris
based OSes). Instead use the '-b' option which, although doing
slightly more, produce the expected result on Windows."
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
tests/qapi-schema/meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/qapi-schema/meson.build b/tests/qapi-schema/meson.build
index c87d141417..f1449298b0 100644
--- a/tests/qapi-schema/meson.build
+++ b/tests/qapi-schema/meson.build
@@ -220,6 +220,6 @@ qapi_doc = custom_target('QAPI doc',
# "full_path()" needed here to work around
# https://github.com/mesonbuild/meson/issues/7585
-test('QAPI doc', diff, args: ['-u', files('doc-good.texi'), qapi_doc[0].full_path()],
+test('QAPI doc', diff, args: ['-b', '-u', files('doc-good.texi'), qapi_doc[0].full_path()],
depends: qapi_doc,
suite: ['qapi-schema', 'qapi-doc'])
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 11/26] gcrypt: test_tls_psk_init should write binary file instead text file.
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (9 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 10/26] meson: Use -b to ignore CR vs. CR-LF issues on Windows Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 12/26] tests: Enable crypto tests under msys2/mingw Yonggang Luo
` (15 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
Xie Changlong, Peter Lieven, Markus Armbruster, Max Reitz,
Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
Richard Henderson, Li-Wen Hsu
On windows, if open file with "w", it's will automatically convert
"\n" to "\r\n" when writing to file.
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
tests/crypto-tls-psk-helpers.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/tests/crypto-tls-psk-helpers.c b/tests/crypto-tls-psk-helpers.c
index a8395477c3..4f3bd446ad 100644
--- a/tests/crypto-tls-psk-helpers.c
+++ b/tests/crypto-tls-psk-helpers.c
@@ -26,13 +26,15 @@
#include "crypto-tls-psk-helpers.h"
#include "qemu/sockets.h"
+#include <glib/gstdio.h>
+
#ifdef QCRYPTO_HAVE_TLS_TEST_SUPPORT
void test_tls_psk_init(const char *pskfile)
{
FILE *fp;
- fp = fopen(pskfile, "w");
+ fp = fopen(pskfile, "wb");
if (fp == NULL) {
g_critical("Failed to create pskfile %s", pskfile);
abort();
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 12/26] tests: Enable crypto tests under msys2/mingw
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (10 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 11/26] gcrypt: test_tls_psk_init should write binary file instead text file Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 13:11 ` Daniel P. Berrangé
2020-09-15 12:13 ` [PATCH v9 13/26] meson: remove empty else and duplicated gio deps Yonggang Luo
` (14 subsequent siblings)
26 siblings, 1 reply; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
Xie Changlong, Peter Lieven, Markus Armbruster, Max Reitz,
Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
Richard Henderson, Li-Wen Hsu
Fixes following tests on msys2/mingw
'test-crypto-tlscredsx509'
test-crypto-tlssession'
'test-io-channel-tls'
These tests are failure with:
ERROR test-crypto-tlscredsx509 - missing test plan
ERROR test-crypto-tlssession - missing test plan
ERROR test-io-channel-tls - missing test plan
Because on win32 those test case are all disabled in the header
Add qemu_socket_pair for cross platform support
Convert file system handling functions to glib
Add qemu_link function instead posix only link function.
Use send ad recv from qemu that convert Windows Socks error to errno properly.
Use g_remove instead unlink
Use g_mkdir instead mkdir
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
tests/crypto-tls-psk-helpers.c | 2 +-
tests/crypto-tls-x509-helpers.c | 106 ++++++++++++++++++++++++++++++-
tests/crypto-tls-x509-helpers.h | 9 ++-
tests/test-crypto-tlscredsx509.c | 47 +++++++-------
tests/test-crypto-tlssession.c | 68 +++++++++++---------
tests/test-io-channel-tls.c | 51 ++++++++-------
6 files changed, 204 insertions(+), 79 deletions(-)
diff --git a/tests/crypto-tls-psk-helpers.c b/tests/crypto-tls-psk-helpers.c
index 4f3bd446ad..58888d5537 100644
--- a/tests/crypto-tls-psk-helpers.c
+++ b/tests/crypto-tls-psk-helpers.c
@@ -46,7 +46,7 @@ void test_tls_psk_init(const char *pskfile)
void test_tls_psk_cleanup(const char *pskfile)
{
- unlink(pskfile);
+ g_remove(pskfile);
}
#endif /* QCRYPTO_HAVE_TLS_TEST_SUPPORT */
diff --git a/tests/crypto-tls-x509-helpers.c b/tests/crypto-tls-x509-helpers.c
index 01b3daf358..1238983755 100644
--- a/tests/crypto-tls-x509-helpers.c
+++ b/tests/crypto-tls-x509-helpers.c
@@ -23,6 +23,8 @@
#include "crypto-tls-x509-helpers.h"
#include "crypto/init.h"
#include "qemu/sockets.h"
+#include <glib.h>
+#include <glib/gstdio.h>
#ifdef QCRYPTO_HAVE_TLS_TEST_SUPPORT
@@ -133,7 +135,7 @@ void test_tls_init(const char *keyfile)
void test_tls_cleanup(const char *keyfile)
{
asn1_delete_structure(&pkix_asn1);
- unlink(keyfile);
+ g_remove(keyfile);
}
/*
@@ -501,8 +503,108 @@ void test_tls_discard_cert(QCryptoTLSTestCertReq *req)
req->crt = NULL;
if (getenv("QEMU_TEST_DEBUG_CERTS") == NULL) {
- unlink(req->filename);
+ g_remove(req->filename);
}
}
+int qemu_link(const char *exist_path1, const char *new_path2)
+{
+#if defined(_WIN32)
+ g_autofree gchar *current_dir = g_get_current_dir();
+ g_autofree gchar *full_path = g_build_filename(current_dir, exist_path1, NULL);
+ return CreateSymbolicLinkA(
+ new_path2, full_path, 0 | SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE) ? 0 : -1;
+#else
+ return link(exist_path1, new_path2);
+#endif
+}
+
+#if defined(_WIN32)
+
+int qemu_socketpair(int family, int type, int protocol, int channel[2])
+{
+ struct addrinfo addr_data;
+ struct addrinfo *addr = NULL;
+ int sock_listener = -1;
+ int sock_client = -1;
+ int sock_server = -1;
+ int one = 1;
+
+ memset(&addr_data, 0, sizeof(addr_data));
+ addr_data.ai_family = AF_INET;
+ addr_data.ai_socktype = type;
+ addr_data.ai_protocol = protocol;
+ if (0 != getaddrinfo("127.0.0.1", "0", &addr_data, &addr)) {
+ goto error;
+ }
+
+ if (NULL == addr) {
+ goto error;
+ }
+
+ sock_listener = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
+ if (-1 == sock_listener) {
+ goto error;
+ }
+
+ if (-1 == setsockopt(sock_listener, SOL_SOCKET, SO_REUSEADDR, (const char *)&one, sizeof(one))) {
+ goto error;
+ }
+ if (-1 == bind(sock_listener, addr->ai_addr, addr->ai_addrlen)) {
+ goto error;
+ }
+ if (-1 == getsockname(sock_listener, addr->ai_addr, (int *)&(addr->ai_addrlen))) {
+ goto error;
+ }
+ if (-1 == listen(sock_listener, 1)) {
+ goto error;
+ }
+
+ sock_client = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
+
+ if (-1 == sock_client) {
+ goto error;
+ }
+
+ if (-1 == connect(sock_client, addr->ai_addr, addr->ai_addrlen)) {
+ goto error;
+ }
+
+ sock_server = accept(sock_listener, 0, 0);
+
+ if (-1 == sock_server) {
+ goto error;
+ }
+
+ closesocket(sock_listener);
+
+ channel[0] = sock_client;
+ channel[1] = sock_server;
+ return 0;
+
+error:
+ if (-1 != sock_server) {
+ closesocket(sock_server);
+ }
+ if (-1 != sock_client) {
+ closesocket(sock_client);
+ }
+ if (-1 != sock_listener) {
+ closesocket(sock_listener);
+ }
+ if (NULL != addr) {
+ freeaddrinfo(addr);
+ }
+ return -1;
+}
+
+#else
+
+int qemu_socketpair(int family, int type, int protocol, int recv[2])
+{
+ return socketpair(family, type, protocol, recv);
+}
+
+#endif
+
#endif /* QCRYPTO_HAVE_TLS_TEST_SUPPORT */
diff --git a/tests/crypto-tls-x509-helpers.h b/tests/crypto-tls-x509-helpers.h
index 08efba4e19..6902d43af7 100644
--- a/tests/crypto-tls-x509-helpers.h
+++ b/tests/crypto-tls-x509-helpers.h
@@ -24,8 +24,9 @@
#include <gnutls/gnutls.h>
#include <gnutls/x509.h>
-#if !(defined WIN32) && \
- defined(CONFIG_TASN1)
+#include "qemu/osdep.h"
+
+#if defined(CONFIG_TASN1)
# define QCRYPTO_HAVE_TLS_TEST_SUPPORT
#endif
@@ -127,6 +128,10 @@ void test_tls_cleanup(const char *keyfile);
extern const ASN1_ARRAY_TYPE pkix_asn1_tab[];
+int qemu_link(const char *exist_path1, const char *new_path2);
+
+int qemu_socketpair(int family, int type, int protocol, int channel[2]);
+
#endif /* QCRYPTO_HAVE_TLS_TEST_SUPPORT */
#endif
diff --git a/tests/test-crypto-tlscredsx509.c b/tests/test-crypto-tlscredsx509.c
index f487349c32..620fbde1ca 100644
--- a/tests/test-crypto-tlscredsx509.c
+++ b/tests/test-crypto-tlscredsx509.c
@@ -25,6 +25,9 @@
#include "qapi/error.h"
#include "qemu/module.h"
+#include <glib.h>
+#include <glib/gstdio.h>
+
#ifdef QCRYPTO_HAVE_TLS_TEST_SUPPORT
#define WORKDIR "tests/test-crypto-tlscredsx509-work/"
@@ -77,34 +80,34 @@ static void test_tls_creds(const void *opaque)
QCryptoTLSCreds *creds;
#define CERT_DIR "tests/test-crypto-tlscredsx509-certs/"
- mkdir(CERT_DIR, 0700);
+ g_mkdir_with_parents(CERT_DIR, 0700);
- unlink(CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+ g_remove (CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
if (data->isServer) {
- unlink(CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
- unlink(CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY);
+ g_remove (CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
+ g_remove (CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY);
} else {
- unlink(CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
- unlink(CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY);
+ g_remove (CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
+ g_remove (CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY);
}
- if (access(data->cacrt, R_OK) == 0) {
- g_assert(link(data->cacrt,
+ if (g_access(data->cacrt, R_OK) == 0) {
+ g_assert(qemu_link(data->cacrt,
CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT) == 0);
}
if (data->isServer) {
- if (access(data->crt, R_OK) == 0) {
- g_assert(link(data->crt,
+ if (g_access(data->crt, R_OK) == 0) {
+ g_assert(qemu_link(data->crt,
CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT) == 0);
}
- g_assert(link(KEYFILE,
+ g_assert(qemu_link(KEYFILE,
CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY) == 0);
} else {
- if (access(data->crt, R_OK) == 0) {
- g_assert(link(data->crt,
+ if (g_access(data->crt, R_OK) == 0) {
+ g_assert(qemu_link(data->crt,
CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT) == 0);
}
- g_assert(link(KEYFILE,
+ g_assert(qemu_link(KEYFILE,
CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY) == 0);
}
@@ -121,15 +124,15 @@ static void test_tls_creds(const void *opaque)
g_assert(creds != NULL);
}
- unlink(CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+ g_remove(CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
if (data->isServer) {
- unlink(CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
- unlink(CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY);
+ g_remove(CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
+ g_remove(CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY);
} else {
- unlink(CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
- unlink(CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY);
+ g_remove(CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
+ g_remove(CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY);
}
- rmdir(CERT_DIR);
+ g_rmdir(CERT_DIR);
if (creds) {
object_unparent(OBJECT(creds));
}
@@ -143,7 +146,7 @@ int main(int argc, char **argv)
g_test_init(&argc, &argv, NULL);
g_setenv("GNUTLS_FORCE_FIPS_MODE", "2", 1);
- mkdir(WORKDIR, 0700);
+ g_mkdir_with_parents(WORKDIR, 0700);
test_tls_init(KEYFILE);
@@ -699,7 +702,7 @@ int main(int argc, char **argv)
test_tls_discard_cert(&cacertlevel2areq);
test_tls_discard_cert(&servercertlevel3areq);
test_tls_discard_cert(&clientcertlevel2breq);
- unlink(WORKDIR "cacertchain-ctx.pem");
+ g_remove(WORKDIR "cacertchain-ctx.pem");
test_tls_cleanup(KEYFILE);
rmdir(WORKDIR);
diff --git a/tests/test-crypto-tlssession.c b/tests/test-crypto-tlssession.c
index 8b2453fa79..f726219593 100644
--- a/tests/test-crypto-tlssession.c
+++ b/tests/test-crypto-tlssession.c
@@ -28,9 +28,13 @@
#include "qom/object_interfaces.h"
#include "qapi/error.h"
#include "qemu/module.h"
+#include "qemu/main-loop.h"
#include "qemu/sockets.h"
#include "authz/list.h"
+#include <glib.h>
+#include <glib/gstdio.h>
+
#ifdef QCRYPTO_HAVE_TLS_TEST_SUPPORT
#define WORKDIR "tests/test-crypto-tlssession-work/"
@@ -40,15 +44,16 @@
static ssize_t testWrite(const char *buf, size_t len, void *opaque)
{
int *fd = opaque;
-
- return write(*fd, buf, len);
+ int written = send(*fd, buf, len, 0);
+ return written;
}
static ssize_t testRead(char *buf, size_t len, void *opaque)
{
int *fd = opaque;
- return read(*fd, buf, len);
+ int readed = recv(*fd, buf, len, 0);
+ return readed;
}
static QCryptoTLSCreds *test_tls_creds_psk_create(
@@ -84,7 +89,7 @@ static void test_crypto_tls_session_psk(void)
int ret;
/* We'll use this for our fake client-server connection */
- ret = socketpair(AF_UNIX, SOCK_STREAM, 0, channel);
+ ret = qemu_socketpair(AF_UNIX, SOCK_STREAM, 0, channel);
g_assert(ret == 0);
/*
@@ -238,7 +243,7 @@ static void test_crypto_tls_session_x509(const void *opaque)
int ret;
/* We'll use this for our fake client-server connection */
- ret = socketpair(AF_UNIX, SOCK_STREAM, 0, channel);
+ ret = qemu_socketpair(AF_UNIX, SOCK_STREAM, 0, channel);
g_assert(ret == 0);
/*
@@ -251,29 +256,29 @@ static void test_crypto_tls_session_x509(const void *opaque)
#define CLIENT_CERT_DIR "tests/test-crypto-tlssession-client/"
#define SERVER_CERT_DIR "tests/test-crypto-tlssession-server/"
- mkdir(CLIENT_CERT_DIR, 0700);
- mkdir(SERVER_CERT_DIR, 0700);
+ g_mkdir_with_parents(CLIENT_CERT_DIR, 0700);
+ g_mkdir_with_parents(SERVER_CERT_DIR, 0700);
- unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
- unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
- unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY);
+ g_remove(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+ g_remove(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
+ g_remove(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY);
- unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
- unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
- unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY);
+ g_remove(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+ g_remove(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
+ g_remove(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY);
- g_assert(link(data->servercacrt,
+ g_assert(qemu_link(data->servercacrt,
SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT) == 0);
- g_assert(link(data->servercrt,
+ g_assert(qemu_link(data->servercrt,
SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT) == 0);
- g_assert(link(KEYFILE,
+ g_assert(qemu_link(KEYFILE,
SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY) == 0);
- g_assert(link(data->clientcacrt,
+ g_assert(qemu_link(data->clientcacrt,
CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT) == 0);
- g_assert(link(data->clientcrt,
+ g_assert(qemu_link(data->clientcrt,
CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT) == 0);
- g_assert(link(KEYFILE,
+ g_assert(qemu_link(KEYFILE,
CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY) == 0);
clientCreds = test_tls_creds_x509_create(
@@ -369,16 +374,16 @@ static void test_crypto_tls_session_x509(const void *opaque)
g_assert(!data->expectClientFail);
}
- unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
- unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
- unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY);
+ g_remove(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+ g_remove(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
+ g_remove(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY);
- unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
- unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
- unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY);
+ g_remove(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+ g_remove(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
+ g_remove(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY);
- rmdir(CLIENT_CERT_DIR);
- rmdir(SERVER_CERT_DIR);
+ g_rmdir(CLIENT_CERT_DIR);
+ g_rmdir(SERVER_CERT_DIR);
object_unparent(OBJECT(serverCreds));
object_unparent(OBJECT(clientCreds));
@@ -397,10 +402,13 @@ int main(int argc, char **argv)
int ret;
module_call_init(MODULE_INIT_QOM);
+ qemu_init_main_loop(&error_abort);
+ socket_init();
+
g_test_init(&argc, &argv, NULL);
g_setenv("GNUTLS_FORCE_FIPS_MODE", "2", 1);
- mkdir(WORKDIR, 0700);
+ g_mkdir_with_parents(WORKDIR, 0700);
test_tls_init(KEYFILE);
test_tls_psk_init(PSKFILE);
@@ -640,11 +648,11 @@ int main(int argc, char **argv)
test_tls_discard_cert(&cacertlevel2areq);
test_tls_discard_cert(&servercertlevel3areq);
test_tls_discard_cert(&clientcertlevel2breq);
- unlink(WORKDIR "cacertchain-sess.pem");
+ g_remove(WORKDIR "cacertchain-sess.pem");
test_tls_psk_cleanup(PSKFILE);
test_tls_cleanup(KEYFILE);
- rmdir(WORKDIR);
+ g_rmdir(WORKDIR);
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
diff --git a/tests/test-io-channel-tls.c b/tests/test-io-channel-tls.c
index ad7554c534..e858716192 100644
--- a/tests/test-io-channel-tls.c
+++ b/tests/test-io-channel-tls.c
@@ -31,9 +31,13 @@
#include "crypto/tlscredsx509.h"
#include "qapi/error.h"
#include "qemu/module.h"
+#include "qemu/main-loop.h"
#include "authz/list.h"
#include "qom/object_interfaces.h"
+#include <glib.h>
+#include <glib/gstdio.h>
+
#ifdef QCRYPTO_HAVE_TLS_TEST_SUPPORT
#define WORKDIR "tests/test-io-channel-tls-work/"
@@ -123,33 +127,33 @@ static void test_io_channel_tls(const void *opaque)
GMainContext *mainloop;
/* We'll use this for our fake client-server connection */
- g_assert(socketpair(AF_UNIX, SOCK_STREAM, 0, channel) == 0);
+ g_assert(qemu_socketpair(AF_UNIX, SOCK_STREAM, 0, channel) == 0);
#define CLIENT_CERT_DIR "tests/test-io-channel-tls-client/"
#define SERVER_CERT_DIR "tests/test-io-channel-tls-server/"
- mkdir(CLIENT_CERT_DIR, 0700);
- mkdir(SERVER_CERT_DIR, 0700);
+ g_mkdir(CLIENT_CERT_DIR, 0700);
+ g_mkdir(SERVER_CERT_DIR, 0700);
- unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
- unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
- unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY);
+ g_remove(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+ g_remove(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
+ g_remove(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY);
- unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
- unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
- unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY);
+ g_remove(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+ g_remove(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
+ g_remove(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY);
- g_assert(link(data->servercacrt,
+ g_assert(qemu_link(data->servercacrt,
SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT) == 0);
- g_assert(link(data->servercrt,
+ g_assert(qemu_link(data->servercrt,
SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT) == 0);
- g_assert(link(KEYFILE,
+ g_assert(qemu_link(KEYFILE,
SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY) == 0);
- g_assert(link(data->clientcacrt,
+ g_assert(qemu_link(data->clientcacrt,
CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT) == 0);
- g_assert(link(data->clientcrt,
+ g_assert(qemu_link(data->clientcrt,
CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT) == 0);
- g_assert(link(KEYFILE,
+ g_assert(qemu_link(KEYFILE,
CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY) == 0);
clientCreds = test_tls_creds_create(
@@ -238,13 +242,13 @@ static void test_io_channel_tls(const void *opaque)
QIO_CHANNEL(serverChanTLS));
qio_channel_test_validate(test);
- unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
- unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
- unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY);
+ g_remove(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+ g_remove(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
+ g_remove(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY);
- unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
- unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
- unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY);
+ g_remove(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+ g_remove(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
+ g_remove(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY);
rmdir(CLIENT_CERT_DIR);
rmdir(SERVER_CERT_DIR);
@@ -272,10 +276,13 @@ int main(int argc, char **argv)
g_assert(qcrypto_init(NULL) == 0);
module_call_init(MODULE_INIT_QOM);
+ qemu_init_main_loop(&error_abort);
+ socket_init();
+
g_test_init(&argc, &argv, NULL);
g_setenv("GNUTLS_FORCE_FIPS_MODE", "2", 1);
- mkdir(WORKDIR, 0700);
+ g_mkdir(WORKDIR, 0700);
test_tls_init(KEYFILE);
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 13/26] meson: remove empty else and duplicated gio deps
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (11 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 12/26] tests: Enable crypto tests under msys2/mingw Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 14/26] vmstate: Fixes test-vmstate.c on msys2/mingw Yonggang Luo
` (13 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P . Berrangé, Ed Maste, Michael Roth,
qemu-block, Stefan Weil, Xie Changlong, Peter Lieven,
Markus Armbruster, Max Reitz, Yonggang Luo, Gerd Hoffmann,
Wen Congyang, Paolo Bonzini, Richard Henderson, Li-Wen Hsu
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
meson.build | 6 ------
1 file changed, 6 deletions(-)
diff --git a/meson.build b/meson.build
index 690723b470..23cb1b8742 100644
--- a/meson.build
+++ b/meson.build
@@ -317,7 +317,6 @@ opengl = not_found
if 'CONFIG_OPENGL' in config_host
opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(),
link_args: config_host['OPENGL_LIBS'].split())
-else
endif
gtk = not_found
if 'CONFIG_GTK' in config_host
@@ -344,11 +343,6 @@ if 'CONFIG_ICONV' in config_host
iconv = declare_dependency(compile_args: config_host['ICONV_CFLAGS'].split(),
link_args: config_host['ICONV_LIBS'].split())
endif
-gio = not_found
-if 'CONFIG_GIO' in config_host
- gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(),
- link_args: config_host['GIO_LIBS'].split())
-endif
vnc = not_found
png = not_found
jpeg = not_found
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 14/26] vmstate: Fixes test-vmstate.c on msys2/mingw
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (12 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 13/26] meson: remove empty else and duplicated gio deps Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 15/26] cirrus: Building freebsd in a single short Yonggang Luo
` (12 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Thomas Huth, Ed Maste, Michael Roth, qemu-block,
Stefan Weil, Xie Changlong, Peter Lieven, Markus Armbruster,
Max Reitz, Yonggang Luo, Gerd Hoffmann, Daniel P . Berrangé,
Wen Congyang, Paolo Bonzini, Richard Henderson,
Philippe Mathieu-Daudé, Li-Wen Hsu
The vmstate are valid on win32, just need generate tmp path properly
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
tests/test-vmstate.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tests/test-vmstate.c b/tests/test-vmstate.c
index 1c763015d0..ac38bfcfe8 100644
--- a/tests/test-vmstate.c
+++ b/tests/test-vmstate.c
@@ -34,7 +34,6 @@
#include "qemu/module.h"
#include "io/channel-file.h"
-static char temp_file[] = "/tmp/vmst.test.XXXXXX";
static int temp_fd;
@@ -1484,6 +1483,8 @@ static void test_tmp_struct(void)
int main(int argc, char **argv)
{
+ g_autofree char *temp_file = g_strdup_printf(
+ "%s/vmst.test.XXXXXX", g_get_tmp_dir());
temp_fd = mkstemp(temp_file);
module_call_init(MODULE_INIT_QOM);
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 15/26] cirrus: Building freebsd in a single short
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (13 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 14/26] vmstate: Fixes test-vmstate.c on msys2/mingw Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 16/26] tests: Convert g_free to g_autofree macro in test-logging.c Yonggang Luo
` (11 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P . Berrangé, Ed Maste, Michael Roth,
qemu-block, Stefan Weil, Xie Changlong, Peter Lieven,
Markus Armbruster, Max Reitz, Yonggang Luo, Gerd Hoffmann,
Wen Congyang, Paolo Bonzini, Richard Henderson, Li-Wen Hsu
This reverts commit 45f7b7b9f38f5c4d1529a37c93dedfc26a231bba
("cirrus.yml: Split FreeBSD job into two parts").
freebsd 1 hour limit not hit anymore
I think we going to a wrong direction, I think there is some tests a stall the test runner,
please look at
https://cirrus-ci.com/task/5110577531977728
When its running properly, the consumed time are little, but when tests running too long,
look at the cpu usage, the cpu usage are nearly zero. doesn't consuming time.
And look at
https://cirrus-ci.com/task/6119341601062912
If the tests running properly, the time consuming are little
We should not hide the error by split them
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Ed Maste <emaste@FreeBSD.org>
---
.cirrus.yml | 35 ++++++++---------------------------
1 file changed, 8 insertions(+), 27 deletions(-)
diff --git a/.cirrus.yml b/.cirrus.yml
index 3dd9fcff7f..690c6882e8 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -1,38 +1,19 @@
env:
CIRRUS_CLONE_DEPTH: 1
-freebsd_1st_task:
+freebsd_12_task:
freebsd_instance:
image_family: freebsd-12-1
- cpu: 4
- memory: 4G
- install_script: ASSUME_ALWAYS_YES=yes pkg bootstrap -f ; pkg install -y
- bash curl cyrus-sasl git glib gmake gnutls gsed
- nettle perl5 pixman pkgconf png usbredir
+ cpu: 8
+ memory: 8G
+ install_script:
+ - ASSUME_ALWAYS_YES=yes pkg bootstrap -f ;
+ - pkg install -y bash curl cyrus-sasl git glib gmake gnutls gsed
+ nettle perl5 pixman pkgconf png usbredir
script:
- mkdir build
- cd build
- - ../configure --disable-user --target-list-exclude='alpha-softmmu
- ppc64-softmmu ppc-softmmu riscv32-softmmu riscv64-softmmu s390x-softmmu
- sparc64-softmmu sparc-softmmu x86_64-softmmu i386-softmmu'
- --enable-werror || { cat config.log; exit 1; }
- - gmake -j$(sysctl -n hw.ncpu)
- - gmake -j$(sysctl -n hw.ncpu) check
-
-freebsd_2nd_task:
- freebsd_instance:
- image_family: freebsd-12-1
- cpu: 4
- memory: 4G
- install_script: ASSUME_ALWAYS_YES=yes pkg bootstrap -f ; pkg install -y
- bash curl cyrus-sasl git glib gmake gnutls gtk3 gsed libepoxy mesa-libs
- nettle perl5 pixman pkgconf png SDL2 usbredir
- script:
- - ./configure --enable-werror --target-list='alpha-softmmu ppc64-softmmu
- ppc-softmmu riscv32-softmmu riscv64-softmmu s390x-softmmu
- sparc64-softmmu sparc-softmmu x86_64-softmmu i386-softmmu
- sparc-bsd-user sparc64-bsd-user x86_64-bsd-user i386-bsd-user'
- || { cat config.log; exit 1; }
+ - ../configure --enable-werror || { cat config.log; exit 1; }
- gmake -j$(sysctl -n hw.ncpu)
- gmake -j$(sysctl -n hw.ncpu) check
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 16/26] tests: Convert g_free to g_autofree macro in test-logging.c
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (14 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 15/26] cirrus: Building freebsd in a single short Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 17/26] tests: Fixes test-io-channel-socket.c tests under msys2/mingw Yonggang Luo
` (10 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P . Berrangé, Ed Maste, Michael Roth,
qemu-block, Stefan Weil, Xie Changlong, Peter Lieven,
Markus Armbruster, Max Reitz, Yonggang Luo, Gerd Hoffmann,
Wen Congyang, Paolo Bonzini, Richard Henderson,
Philippe Mathieu-Daudé, Li-Wen Hsu
g_autofree are prefer than g_free when possible.
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
tests/test-logging.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/tests/test-logging.c b/tests/test-logging.c
index 8a1161de1d..783fe09a27 100644
--- a/tests/test-logging.c
+++ b/tests/test-logging.c
@@ -196,7 +196,7 @@ static void rmdir_full(gchar const *root)
int main(int argc, char **argv)
{
- gchar *tmp_path = g_dir_make_tmp("qemu-test-logging.XXXXXX", NULL);
+ g_autofree gchar *tmp_path = g_dir_make_tmp("qemu-test-logging.XXXXXX", NULL);
int rc;
g_test_init(&argc, &argv, NULL);
@@ -212,6 +212,5 @@ int main(int argc, char **argv)
rc = g_test_run();
rmdir_full(tmp_path);
- g_free(tmp_path);
return rc;
}
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 17/26] tests: Fixes test-io-channel-socket.c tests under msys2/mingw
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (15 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 16/26] tests: Convert g_free to g_autofree macro in test-logging.c Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 18/26] tests: fixes aio-win32 about aio_remove_fd_handler, get it consistence with aio-posix.c Yonggang Luo
` (9 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P . Berrangé, Ed Maste, Michael Roth,
qemu-block, Stefan Weil, Xie Changlong, Peter Lieven,
Markus Armbruster, Max Reitz, Yonggang Luo, Gerd Hoffmann,
Wen Congyang, Paolo Bonzini, Richard Henderson, Li-Wen Hsu
Currently test-io-channel-socket doesn't init with
qemu_init_main_loop
and that's cause the qemu_aio_context not inited,
and the following is the stack when null pointer accessed:
qemu_fd_register (c:\work\xemu\qemu\util\main-loop.c:336)
qemu_try_set_nonblock (c:\work\xemu\qemu\util\oslib-win32.c:224)
qemu_set_nonblock (c:\work\xemu\qemu\util\oslib-win32.c:230)
socket_can_bind_connect (c:\work\xemu\qemu\tests\socket-helpers.c:93)
socket_check_protocol_support (c:\work\xemu\qemu\tests\socket-helpers.c:141)
main (c:\work\xemu\qemu\tests\test-io-channel-socket.c:568)
__tmainCRTStartup (@__tmainCRTStartup:142)
mainCRTStartup (@1400014f6..140001539:3)
BaseThreadInitThunk (@BaseThreadInitThunk:9)
RtlUserThreadStart (@RtlUserThreadStart:12)
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
tests/test-io-channel-socket.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tests/test-io-channel-socket.c b/tests/test-io-channel-socket.c
index d43083a766..743577d744 100644
--- a/tests/test-io-channel-socket.c
+++ b/tests/test-io-channel-socket.c
@@ -25,6 +25,7 @@
#include "socket-helpers.h"
#include "qapi/error.h"
#include "qemu/module.h"
+#include "qemu/main-loop.h"
static void test_io_channel_set_socket_bufs(QIOChannel *src,
@@ -556,6 +557,7 @@ int main(int argc, char **argv)
bool has_ipv4, has_ipv6;
module_call_init(MODULE_INIT_QOM);
+ qemu_init_main_loop(&error_abort);
socket_init();
g_test_init(&argc, &argv, NULL);
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 18/26] tests: fixes aio-win32 about aio_remove_fd_handler, get it consistence with aio-posix.c
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (16 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 17/26] tests: Fixes test-io-channel-socket.c tests under msys2/mingw Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 19/26] tests: Fixes test-io-channel-file by mask only owner file state mask bits Yonggang Luo
` (8 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
Xie Changlong, Peter Lieven, Markus Armbruster, Max Reitz,
Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
Richard Henderson, Li-Wen Hsu
This is a fixes for
(C:\work\xemu\qemu\build\tests\test-aio-multithread.exe:19100): GLib-CRITICAL **: 23:03:24.965: g_source_remove_poll: assertion '!SOURCE_DESTROYED (source)' failed
ERROR test-aio-multithread - Bail out! GLib-FATAL-CRITICAL: g_source_remove_poll: assertion '!SOURCE_DESTROYED (source)' failed
(C:\work\xemu\qemu\build\tests\test-bdrv-drain.exe:21036): GLib-CRITICAL **: 23:03:29.861: g_source_remove_poll: assertion '!SOURCE_DESTROYED (source)' failed
ERROR test-bdrv-drain - Bail out! GLib-FATAL-CRITICAL: g_source_remove_poll: assertion '!SOURCE_DESTROYED (source)' failed
And the idea comes from https://patchwork.kernel.org/patch/9975239/
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
util/aio-win32.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/util/aio-win32.c b/util/aio-win32.c
index 953c56ab48..9899546a8a 100644
--- a/util/aio-win32.c
+++ b/util/aio-win32.c
@@ -37,6 +37,15 @@ struct AioHandler {
static void aio_remove_fd_handler(AioContext *ctx, AioHandler *node)
{
+ /* If the GSource is in the process of being destroyed then
+ * g_source_remove_poll() causes an assertion failure. Skip
+ * removal in that case, because glib cleans up its state during
+ * destruction anyway.
+ */
+ if (!g_source_is_destroyed(&ctx->source)) {
+ g_source_remove_poll(&ctx->source, &node->pfd);
+ }
+
/* If aio_poll is in progress, just mark the node as deleted */
if (qemu_lockcnt_count(&ctx->list_lock)) {
node->deleted = 1;
@@ -139,8 +148,6 @@ void aio_set_event_notifier(AioContext *ctx,
/* Are we deleting the fd handler? */
if (!io_notify) {
if (node) {
- g_source_remove_poll(&ctx->source, &node->pfd);
-
aio_remove_fd_handler(ctx, node);
}
} else {
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 19/26] tests: Fixes test-io-channel-file by mask only owner file state mask bits
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (17 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 18/26] tests: fixes aio-win32 about aio_remove_fd_handler, get it consistence with aio-posix.c Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 13:15 ` Daniel P. Berrangé
2020-09-15 12:13 ` [PATCH v9 20/26] tests: fix test-util-sockets.c Yonggang Luo
` (7 subsequent siblings)
26 siblings, 1 reply; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
Xie Changlong, Peter Lieven, Markus Armbruster, Max Reitz,
Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
Richard Henderson, Li-Wen Hsu
This is the error on msys2/mingw
Running test test-io-channel-file
**
ERROR:../tests/test-io-channel-file.c:59:test_io_channel_file_helper: assertion failed (TEST_MASK & ~mask == st.st_mode & 0777): (384 == 438)
ERROR test-io-channel-file - Bail out! ERROR:../tests/test-io-channel-file.c:59:test_io_channel_file_helper: assertion failed (TEST_MASK & ~mask == st.st_mode & 0777): (384 == 438)
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
tests/test-io-channel-file.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/tests/test-io-channel-file.c b/tests/test-io-channel-file.c
index bac2b07562..1b0e8d7c1b 100644
--- a/tests/test-io-channel-file.c
+++ b/tests/test-io-channel-file.c
@@ -28,6 +28,12 @@
#define TEST_FILE "tests/test-io-channel-file.txt"
#define TEST_MASK 0600
+#ifdef _WIN32
+#define TEST_MASK_EXPECT 0700
+#else
+#define TEST_MASK_EXPECT 0777
+#endif
+
static void test_io_channel_file_helper(int flags)
{
QIOChannel *src, *dst;
@@ -56,7 +62,9 @@ static void test_io_channel_file_helper(int flags)
umask(mask);
ret = stat(TEST_FILE, &st);
g_assert_cmpint(ret, >, -1);
- g_assert_cmpuint(TEST_MASK & ~mask, ==, st.st_mode & 0777);
+ /* On Windows the stat() function in the C library checks only
+ the FAT-style READONLY attribute and does not look at the ACL at all. */
+ g_assert_cmpuint(TEST_MASK & ~mask, ==, st.st_mode & TEST_MASK_EXPECT);
unlink(TEST_FILE);
object_unref(OBJECT(src));
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 20/26] tests: fix test-util-sockets.c
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (18 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 19/26] tests: Fixes test-io-channel-file by mask only owner file state mask bits Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 21/26] tests: Fixes test-qdev-global-props.c Yonggang Luo
` (6 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P . Berrangé, Ed Maste, Michael Roth,
qemu-block, Stefan Weil, Xie Changlong, Peter Lieven,
Markus Armbruster, Max Reitz, Yonggang Luo, Gerd Hoffmann,
Wen Congyang, Paolo Bonzini, Richard Henderson, Li-Wen Hsu
Fixes following errors:
Running test test-util-sockets
ERROR test-util-sockets - missing test plan
# Start of name tests
**
ERROR:../tests/test-util-sockets.c:93:test_socket_fd_pass_name_good: assertion failed (fd != -1): (-1 != -1)
Bail out! ERROR:../tests/test-util-sockets.c:93:test_socket_fd_pass_name_good: assertion failed (fd != -1): (-1 != -1)
First should call to qemu_init_main_loop before socket_init,
then on win32 doesn't support for SOCKET_ADDRESS_TYPE_FD socket type
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
tests/test-util-sockets.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/tests/test-util-sockets.c b/tests/test-util-sockets.c
index af9f5c0c70..1bbb16d9b1 100644
--- a/tests/test-util-sockets.c
+++ b/tests/test-util-sockets.c
@@ -75,7 +75,7 @@ int monitor_vprintf(Monitor *mon, const char *fmt, va_list ap) { abort(); }
void monitor_init_qmp(Chardev *chr, bool pretty, Error **errp) {}
void monitor_init_hmp(Chardev *chr, bool use_readline, Error **errp) {}
-
+#ifndef _WIN32
static void test_socket_fd_pass_name_good(void)
{
SocketAddress addr;
@@ -227,6 +227,7 @@ static void test_socket_fd_pass_num_nocli(void)
g_free(addr.u.fd.str);
}
+#endif
#ifdef __linux__
static gchar *abstract_sock_name;
@@ -321,6 +322,7 @@ int main(int argc, char **argv)
{
bool has_ipv4, has_ipv6;
+ qemu_init_main_loop(&error_abort);
socket_init();
g_test_init(&argc, &argv, NULL);
@@ -340,6 +342,7 @@ int main(int argc, char **argv)
test_fd_is_socket_bad);
g_test_add_func("/util/socket/is-socket/good",
test_fd_is_socket_good);
+#ifndef _WIN32
g_test_add_func("/socket/fd-pass/name/good",
test_socket_fd_pass_name_good);
g_test_add_func("/socket/fd-pass/name/bad",
@@ -352,6 +355,7 @@ int main(int argc, char **argv)
test_socket_fd_pass_num_bad);
g_test_add_func("/socket/fd-pass/num/nocli",
test_socket_fd_pass_num_nocli);
+#endif
}
#ifdef __linux__
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 21/26] tests: Fixes test-qdev-global-props.c
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (19 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 20/26] tests: fix test-util-sockets.c Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 22/26] rcu: fixes test-logging.c by call drain_call_rcu before rmdir_full Yonggang Luo
` (5 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P . Berrangé, Ed Maste, Michael Roth,
qemu-block, Stefan Weil, Xie Changlong, Peter Lieven,
Markus Armbruster, Max Reitz, Yonggang Luo, Gerd Hoffmann,
Wen Congyang, Paolo Bonzini, Richard Henderson, Li-Wen Hsu
On win32 the line ending are \r\n, so we skip the \n in function test_dynamic_globalprop
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
tests/test-qdev-global-props.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tests/test-qdev-global-props.c b/tests/test-qdev-global-props.c
index 8a3c14d92c..be6bcfc46b 100644
--- a/tests/test-qdev-global-props.c
+++ b/tests/test-qdev-global-props.c
@@ -251,10 +251,10 @@ static void test_dynamic_globalprop(void)
g_test_trap_assert_passed();
g_test_trap_assert_stderr_unmatched("*prop1*");
g_test_trap_assert_stderr_unmatched("*prop2*");
- g_test_trap_assert_stderr("*warning: global dynamic-prop-type-bad.prop3 has invalid class name\n*");
+ g_test_trap_assert_stderr("*warning: global dynamic-prop-type-bad.prop3 has invalid class name*");
g_test_trap_assert_stderr_unmatched("*prop4*");
- g_test_trap_assert_stderr("*warning: global nohotplug-type.prop5=105 not used\n*");
- g_test_trap_assert_stderr("*warning: global nondevice-type.prop6 has invalid class name\n*");
+ g_test_trap_assert_stderr("*warning: global nohotplug-type.prop5=105 not used*");
+ g_test_trap_assert_stderr("*warning: global nondevice-type.prop6 has invalid class name*");
g_test_trap_assert_stdout("");
}
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 22/26] rcu: fixes test-logging.c by call drain_call_rcu before rmdir_full
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (20 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 21/26] tests: Fixes test-qdev-global-props.c Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 23/26] meson: upgrade meson for execute custom ninjatool under msys2 properly Yonggang Luo
` (4 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
Xie Changlong, Peter Lieven, Markus Armbruster, Max Reitz,
Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
Richard Henderson, Li-Wen Hsu
drain_call_rcu is necessary on win32, because under win32, if you
don't close the file before remove it, the remove would be fail.
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
tests/test-logging.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tests/test-logging.c b/tests/test-logging.c
index 783fe09a27..8b1522cfed 100644
--- a/tests/test-logging.c
+++ b/tests/test-logging.c
@@ -210,6 +210,8 @@ int main(int argc, char **argv)
tmp_path, test_logfile_lock);
rc = g_test_run();
+ qemu_log_close();
+ drain_call_rcu();
rmdir_full(tmp_path);
return rc;
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 23/26] meson: upgrade meson for execute custom ninjatool under msys2 properly
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (21 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 22/26] rcu: fixes test-logging.c by call drain_call_rcu before rmdir_full Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 24/26] ci: Enable msys2 ci in cirrus Yonggang Luo
` (3 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
Xie Changlong, Peter Lieven, Markus Armbruster, Max Reitz,
Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
Richard Henderson, Li-Wen Hsu
* Bump versions to 0.55.2 for release
* Tag Info:
object 008d13038f95e7c7d8ad553f14e408da5b94c360
type commit
tag 0.55.2
tagger Jussi Pakkanen <jpakkane@gmail.com> 2020/9/11 1:24:47
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
meson | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meson b/meson
index 68ed748f84..008d13038f 160000
--- a/meson
+++ b/meson
@@ -1 +1 @@
-Subproject commit 68ed748f84f14c2d4e62dcbd123816e5898eb04c
+Subproject commit 008d13038f95e7c7d8ad553f14e408da5b94c360
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 24/26] ci: Enable msys2 ci in cirrus
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (22 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 23/26] meson: upgrade meson for execute custom ninjatool under msys2 properly Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 25/26] block: Fixes nfs compiling error on msys2/mingw Yonggang Luo
` (2 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P . Berrangé, Ed Maste, Michael Roth,
qemu-block, Stefan Weil, Xie Changlong, Peter Lieven,
Markus Armbruster, Max Reitz, Yonggang Luo, Gerd Hoffmann,
Wen Congyang, Paolo Bonzini, Richard Henderson, Li-Wen Hsu
Install msys2 in a proper way refer to https://github.com/cirruslabs/cirrus-ci-docs/issues/699
The https://wiki.qemu.org/Hosts/W32#Native_builds_with_MSYS2 need to be updated.
There is no need of --cross-prefix, open mingw64.exe instead of msys2.exe then we don't
need the --cross-prefix, besides we using environment variable settings:
MSYS: winsymlinks:nativestrict
MSYSTEM: MINGW64
CHERE_INVOKING: 1
to opening mingw64 native shell.
We now running tests with make -i check to skip tests errors.
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
.cirrus.yml | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
diff --git a/.cirrus.yml b/.cirrus.yml
index 690c6882e8..176ccba76c 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -44,3 +44,64 @@ macos_xcode_task:
--enable-werror --cc=clang || { cat config.log; exit 1; }
- gmake -j$(sysctl -n hw.ncpu)
- gmake check
+
+windows_msys2_task:
+ windows_container:
+ image: cirrusci/windowsservercore:cmake
+ os_version: 2019
+ cpu: 8
+ memory: 8G
+ env:
+ MSYS: winsymlinks:nativestrict
+ MSYSTEM: MINGW64
+ CHERE_INVOKING: 1
+ printenv_script:
+ - C:\tools\msys64\usr\bin\bash.exe -lc 'printenv'
+ install_script:
+ - C:\tools\msys64\usr\bin\bash.exe -lc "cd /c/tools &&
+ curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz"
+ - C:\tools\msys64\usr\bin\bash.exe -lc "cd /c/tools &&
+ curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig"
+ - C:\tools\msys64\usr\bin\bash.exe -lc "cd /c/tools &&
+ pacman -U --noconfirm msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz"
+ - C:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -Sy"
+ - C:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -S --needed
+ bash pacman pacman-mirrors msys2-runtime"
+ - taskkill /F /IM gpg-agent.exe
+ - C:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -Su"
+ - C:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -S --needed
+ base-devel
+ git
+ mingw-w64-x86_64-python
+ mingw-w64-x86_64-python-setuptools
+ mingw-w64-x86_64-toolchain
+ mingw-w64-x86_64-SDL2
+ mingw-w64-x86_64-SDL2_image
+ mingw-w64-x86_64-gtk3
+ mingw-w64-x86_64-glib2
+ mingw-w64-x86_64-ninja
+ mingw-w64-x86_64-make
+ mingw-w64-x86_64-lzo2
+ mingw-w64-x86_64-zstd
+ mingw-w64-x86_64-libjpeg-turbo
+ mingw-w64-x86_64-pixman
+ mingw-w64-x86_64-libgcrypt
+ mingw-w64-x86_64-libpng
+ mingw-w64-x86_64-libssh
+ mingw-w64-x86_64-libxml2
+ mingw-w64-x86_64-snappy
+ mingw-w64-x86_64-libusb
+ mingw-w64-x86_64-usbredir
+ mingw-w64-x86_64-libtasn1
+ mingw-w64-x86_64-nettle
+ mingw-w64-x86_64-cyrus-sasl
+ mingw-w64-x86_64-curl
+ mingw-w64-x86_64-gnutls
+ mingw-w64-x86_64-zstd"
+ script:
+ - C:\tools\msys64\usr\bin\bash.exe -lc "mkdir build"
+ - C:\tools\msys64\usr\bin\bash.exe -lc "cd build && ../configure --python=python3"
+ - C:\tools\msys64\usr\bin\bash.exe -lc "cd build && make -j$NUMBER_OF_PROCESSORS"
+ test_script:
+ - C:\tools\msys64\usr\bin\bash.exe -lc "cd build && make V=1 check"
+
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 25/26] block: Fixes nfs compiling error on msys2/mingw
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (23 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 24/26] ci: Enable msys2 ci in cirrus Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 26/26] block: enable libnfs on msys2/mingw in cirrus.yml Yonggang Luo
2020-09-15 13:00 ` [PATCH v9 00/26] W32, W64 msys2/mingw patches no-reply
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
Xie Changlong, Peter Lieven, Markus Armbruster, Max Reitz,
Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
Richard Henderson, Li-Wen Hsu
These compiling errors are fixed:
../block/nfs.c:27:10: fatal error: poll.h: No such file or directory
27 | #include <poll.h>
| ^~~~~~~~
compilation terminated.
../block/nfs.c:63:5: error: unknown type name 'blkcnt_t'
63 | blkcnt_t st_blocks;
| ^~~~~~~~
../block/nfs.c: In function 'nfs_client_open':
../block/nfs.c:550:27: error: 'struct _stat64' has no member named 'st_blocks'
550 | client->st_blocks = st.st_blocks;
| ^
../block/nfs.c: In function 'nfs_get_allocated_file_size':
../block/nfs.c:751:41: error: 'struct _stat64' has no member named 'st_blocks'
751 | return (task.ret < 0 ? task.ret : st.st_blocks * 512);
| ^
../block/nfs.c: In function 'nfs_reopen_prepare':
../block/nfs.c:805:31: error: 'struct _stat64' has no member named 'st_blocks'
805 | client->st_blocks = st.st_blocks;
| ^
../block/nfs.c: In function 'nfs_get_allocated_file_size':
../block/nfs.c:752:1: error: control reaches end of non-void function [-Werror=return-type]
752 | }
| ^
On msys2/mingw, there is no st_blocks in struct _stat64 yet, we disable the usage of it
on msys2/mingw, and create a typedef long long blkcnt_t; for further implementation
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
block/nfs.c | 37 ++++++++++++++++++++++++++++++-------
1 file changed, 30 insertions(+), 7 deletions(-)
diff --git a/block/nfs.c b/block/nfs.c
index 61a249a9fc..a8a8ef9e4f 100644
--- a/block/nfs.c
+++ b/block/nfs.c
@@ -24,7 +24,9 @@
#include "qemu/osdep.h"
+#if !defined(_WIN32)
#include <poll.h>
+#endif
#include "qemu/config-file.h"
#include "qemu/error-report.h"
#include "qapi/error.h"
@@ -51,6 +53,13 @@
#define QEMU_NFS_MAX_PAGECACHE_SIZE (8388608 / NFS_BLKSIZE)
#define QEMU_NFS_MAX_DEBUG_LEVEL 2
+#if defined (_WIN32)
+#define nfs_stat __stat64
+typedef long long blkcnt_t;
+#else
+#define nfs_stat stat
+#endif
+
typedef struct NFSClient {
struct nfs_context *context;
struct nfsfh *fh;
@@ -70,7 +79,7 @@ typedef struct NFSRPC {
int ret;
int complete;
QEMUIOVector *iov;
- struct stat *st;
+ struct nfs_stat *st;
Coroutine *co;
NFSClient *client;
} NFSRPC;
@@ -415,11 +424,21 @@ static void nfs_file_close(BlockDriverState *bs)
nfs_client_close(client);
}
+static blkcnt_t nfs_get_st_blocks(const struct nfs_stat *st)
+{
+#if defined(_WIN32)
+ /* TODO: Not be possible implement on win32 yet, place here for futher implementation */
+ return 0;
+#else
+ return st->st_blocks;
+#endif
+}
+
static int64_t nfs_client_open(NFSClient *client, BlockdevOptionsNfs *opts,
int flags, int open_flags, Error **errp)
{
int64_t ret = -EINVAL;
- struct stat st;
+ struct nfs_stat st;
char *file = NULL, *strp = NULL;
qemu_mutex_init(&client->mutex);
@@ -545,7 +564,7 @@ static int64_t nfs_client_open(NFSClient *client, BlockdevOptionsNfs *opts,
}
ret = DIV_ROUND_UP(st.st_size, BDRV_SECTOR_SIZE);
- client->st_blocks = st.st_blocks;
+ client->st_blocks = nfs_get_st_blocks(&st);
client->has_zero_init = S_ISREG(st.st_mode);
*strp = '/';
goto out;
@@ -706,6 +725,7 @@ static int nfs_has_zero_init(BlockDriverState *bs)
return client->has_zero_init;
}
+#if !defined (_WIN32)
/* Called (via nfs_service) with QemuMutex held. */
static void
nfs_get_allocated_file_size_cb(int ret, struct nfs_context *nfs, void *data,
@@ -729,7 +749,7 @@ static int64_t nfs_get_allocated_file_size(BlockDriverState *bs)
{
NFSClient *client = bs->opaque;
NFSRPC task = {0};
- struct stat st;
+ struct nfs_stat st;
if (bdrv_is_read_only(bs) &&
!(bs->open_flags & BDRV_O_NOCACHE)) {
@@ -746,8 +766,9 @@ static int64_t nfs_get_allocated_file_size(BlockDriverState *bs)
nfs_set_events(client);
BDRV_POLL_WHILE(bs, !task.complete);
- return (task.ret < 0 ? task.ret : st.st_blocks * 512);
+ return (task.ret < 0 ? task.ret : nfs_get_st_blocks(&st) * 512);
}
+#endif
static int coroutine_fn
nfs_file_co_truncate(BlockDriverState *bs, int64_t offset, bool exact,
@@ -778,7 +799,7 @@ static int nfs_reopen_prepare(BDRVReopenState *state,
BlockReopenQueue *queue, Error **errp)
{
NFSClient *client = state->bs->opaque;
- struct stat st;
+ struct nfs_stat st;
int ret = 0;
if (state->flags & BDRV_O_RDWR && bdrv_is_read_only(state->bs)) {
@@ -800,7 +821,7 @@ static int nfs_reopen_prepare(BDRVReopenState *state,
nfs_get_error(client->context));
return ret;
}
- client->st_blocks = st.st_blocks;
+ client->st_blocks = nfs_get_st_blocks(&st);
}
return 0;
@@ -869,7 +890,9 @@ static BlockDriver bdrv_nfs = {
.create_opts = &nfs_create_opts,
.bdrv_has_zero_init = nfs_has_zero_init,
+#if !defined (_WIN32)
.bdrv_get_allocated_file_size = nfs_get_allocated_file_size,
+#endif
.bdrv_co_truncate = nfs_file_co_truncate,
.bdrv_file_open = nfs_file_open,
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v9 26/26] block: enable libnfs on msys2/mingw in cirrus.yml
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (24 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 25/26] block: Fixes nfs compiling error on msys2/mingw Yonggang Luo
@ 2020-09-15 12:13 ` Yonggang Luo
2020-09-15 13:00 ` [PATCH v9 00/26] W32, W64 msys2/mingw patches no-reply
26 siblings, 0 replies; 32+ messages in thread
From: Yonggang Luo @ 2020-09-15 12:13 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
Xie Changlong, Peter Lieven, Markus Armbruster, Max Reitz,
Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
Richard Henderson, Li-Wen Hsu
At the begging libnfs are not enabled because of compiling error,
now it's fixed so enable it
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
---
.cirrus.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.cirrus.yml b/.cirrus.yml
index 176ccba76c..9566ec0439 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -93,6 +93,7 @@ windows_msys2_task:
mingw-w64-x86_64-libusb
mingw-w64-x86_64-usbredir
mingw-w64-x86_64-libtasn1
+ mingw-w64-x86_64-libnfs
mingw-w64-x86_64-nettle
mingw-w64-x86_64-cyrus-sasl
mingw-w64-x86_64-curl
--
2.28.0.windows.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* Re: [PATCH v9 04/26] win32: Simplify gmtime_r detection direct base on _POSIX_THREAD_SAFE_FUNCTIONS.
2020-09-15 12:12 ` [PATCH v9 04/26] win32: Simplify gmtime_r detection direct base on _POSIX_THREAD_SAFE_FUNCTIONS Yonggang Luo
@ 2020-09-15 13:00 ` Daniel P. Berrangé
2020-09-15 13:23 ` 罗勇刚(Yonggang Luo)
0 siblings, 1 reply; 32+ messages in thread
From: Daniel P. Berrangé @ 2020-09-15 13:00 UTC (permalink / raw)
To: Yonggang Luo
Cc: Kevin Wolf, Ed Maste, qemu-block, Stefan Weil, Xie Changlong,
Peter Lieven, qemu-devel, Michael Roth, Richard Henderson,
Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Max Reitz, Li-Wen Hsu,
Markus Armbruster
On Tue, Sep 15, 2020 at 08:12:56PM +0800, Yonggang Luo wrote:
> First, this reduce the size of configure, configure are tending to removal in future,
> and this didn't introduce any new feature or remove any exist feature.
> Second, the current localtime_r detection are conflict with ncursesw detection in
> mingw, when ncursesw detected, it will provide the following compile flags
> pkg-config --cflags ncursesw
> -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199506L -IC:/CI-Tools/msys64/mingw64/include/ncursesw
> And the compile flag _POSIX_C_SOURCE will always cause _POSIX_THREAD_SAFE_FUNCTIONS to
> be defined, in new version of mingw, that's will cause localtime_r to be defined.
> But the configure script didn't provide _POSIX_C_SOURCE macro, and that's will result
> localtime_r not detected because localtime_r are defined in forceinline manner.
ncursesw is just one of the three curses impls we can select for
building against, so it doesn't feel right to make an assumption
that _POSIX_C_SOURCE is always defined.
>
> And finally cause conflict between QEMU defined localtime_r
> struct tm *localtime_r(const time_t *timep, struct tm *result);
> with mingw defined localtime_r
>
> ```
> #if defined(_POSIX_C_SOURCE) && !defined(_POSIX_THREAD_SAFE_FUNCTIONS)
> #define _POSIX_THREAD_SAFE_FUNCTIONS 200112L
> #endif
>
> #ifdef _POSIX_THREAD_SAFE_FUNCTIONS
> __forceinline struct tm *__CRTDECL localtime_r(const time_t *_Time, struct tm *_Tm) {
> return localtime_s(_Tm, _Time) ? NULL : _Tm;
> }
> __forceinline struct tm *__CRTDECL gmtime_r(const time_t *_Time, struct tm *_Tm) {
> return gmtime_s(_Tm, _Time) ? NULL : _Tm;
> }
> __forceinline char *__CRTDECL ctime_r(const time_t *_Time, char *_Str) {
> return ctime_s(_Str, 0x7fffffff, _Time) ? NULL : _Str;
> }
> __forceinline char *__CRTDECL asctime_r(const struct tm *_Tm, char * _Str) {
> return asctime_s(_Str, 0x7fffffff, _Tm) ? NULL : _Str;
> }
> #endif
> ```
>
> So I suggest remove this configure script, and restrict msys2/mingw version to easy to maintain.
> And use _POSIX_THREAD_SAFE_FUNCTIONS to guard the localtime_r and counterpart functions
>
> Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
> ---
> configure | 34 ----------------------------------
> include/sysemu/os-win32.h | 4 ++--
> util/oslib-win32.c | 2 +-
> 3 files changed, 3 insertions(+), 37 deletions(-)
>
> diff --git a/configure b/configure
> index dc4b7a2e55..bac48b5b49 100755
> --- a/configure
> +++ b/configure
> @@ -2496,37 +2496,6 @@ if test "$vhost_net" = ""; then
> test "$vhost_kernel" = "yes" && vhost_net=yes
> fi
>
> -##########################################
> -# MinGW / Mingw-w64 localtime_r/gmtime_r check
> -
> -if test "$mingw32" = "yes"; then
> - # Some versions of MinGW / Mingw-w64 lack localtime_r
> - # and gmtime_r entirely.
> - #
> - # Some versions of Mingw-w64 define a macro for
> - # localtime_r/gmtime_r.
> - #
> - # Some versions of Mingw-w64 will define functions
> - # for localtime_r/gmtime_r, but only if you have
> - # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
> - # though, unistd.h and pthread.h both define
> - # that for you.
> - #
> - # So this #undef localtime_r and #include <unistd.h>
> - # are not in fact redundant.
> -cat > $TMPC << EOF
> -#include <unistd.h>
> -#include <time.h>
> -#undef localtime_r
> -int main(void) { localtime_r(NULL, NULL); return 0; }
> -EOF
> - if compile_prog "" "" ; then
> - localtime_r="yes"
> - else
> - localtime_r="no"
> - fi
> -fi
> -
> ##########################################
> # pkg-config probe
>
> @@ -7088,9 +7057,6 @@ if [ "$bsd" = "yes" ] ; then
> echo "CONFIG_BSD=y" >> $config_host_mak
> fi
>
> -if test "$localtime_r" = "yes" ; then
> - echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
> -fi
> if test "$qom_cast_debug" = "yes" ; then
> echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
> fi
> diff --git a/include/sysemu/os-win32.h b/include/sysemu/os-win32.h
> index d8978e28c0..3ac8a53bac 100644
> --- a/include/sysemu/os-win32.h
> +++ b/include/sysemu/os-win32.h
> @@ -48,12 +48,12 @@
> #define siglongjmp(env, val) longjmp(env, val)
>
> /* Missing POSIX functions. Don't use MinGW-w64 macros. */
> -#ifndef CONFIG_LOCALTIME_R
> +#ifndef _POSIX_THREAD_SAFE_FUNCTIONS
> #undef gmtime_r
> struct tm *gmtime_r(const time_t *timep, struct tm *result);
> #undef localtime_r
> struct tm *localtime_r(const time_t *timep, struct tm *result);
> -#endif /* CONFIG_LOCALTIME_R */
> +#endif
>
> static inline void os_setup_signal_handling(void) {}
> static inline void os_daemonize(void) {}
> diff --git a/util/oslib-win32.c b/util/oslib-win32.c
> index c654dafd93..f2fa9a3549 100644
> --- a/util/oslib-win32.c
> +++ b/util/oslib-win32.c
> @@ -106,7 +106,7 @@ void qemu_anon_ram_free(void *ptr, size_t size)
> }
> }
>
> -#ifndef CONFIG_LOCALTIME_R
> +#ifndef _POSIX_THREAD_SAFE_FUNCTIONS
> /* FIXME: add proper locking */
> struct tm *gmtime_r(const time_t *timep, struct tm *result)
> {
> --
> 2.28.0.windows.1
>
>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v9 00/26] W32, W64 msys2/mingw patches
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
` (25 preceding siblings ...)
2020-09-15 12:13 ` [PATCH v9 26/26] block: enable libnfs on msys2/mingw in cirrus.yml Yonggang Luo
@ 2020-09-15 13:00 ` no-reply
26 siblings, 0 replies; 32+ messages in thread
From: no-reply @ 2020-09-15 13:00 UTC (permalink / raw)
To: luoyonggang
Cc: kwolf, emaste, qemu-block, sw, xiechanglong.d, pl, qemu-devel,
mdroth, luoyonggang, richard.henderson, kraxel, wencongyang2,
pbonzini, mreitz, lwhsu, armbru
Patchew URL: https://patchew.org/QEMU/20200915121318.247-1-luoyonggang@gmail.com/
Hi,
This series seems to have some coding style problems. See output below for
more information:
Type: series
Message-id: 20200915121318.247-1-luoyonggang@gmail.com
Subject: [PATCH v9 00/26] W32, W64 msys2/mingw patches
=== TEST SCRIPT BEGIN ===
#!/bin/bash
git rev-parse base > /dev/null || exit 0
git config --local diff.renamelimit 0
git config --local diff.renames True
git config --local diff.algorithm histogram
./scripts/checkpatch.pl --mailback base..
=== TEST SCRIPT END ===
From https://github.com/patchew-project/qemu
* [new tag] patchew/20200915121318.247-1-luoyonggang@gmail.com -> patchew/20200915121318.247-1-luoyonggang@gmail.com
Switched to a new branch 'test'
0b113c6 block: enable libnfs on msys2/mingw in cirrus.yml
948c78c block: Fixes nfs compiling error on msys2/mingw
083ce32 ci: Enable msys2 ci in cirrus
bc69278 meson: upgrade meson for execute custom ninjatool under msys2 properly
fef8a0c rcu: fixes test-logging.c by call drain_call_rcu before rmdir_full
58f2e78 tests: Fixes test-qdev-global-props.c
4a17a57 tests: fix test-util-sockets.c
6d2b926 tests: Fixes test-io-channel-file by mask only owner file state mask bits
e170301 tests: fixes aio-win32 about aio_remove_fd_handler, get it consistence with aio-posix.c
95d2579 tests: Fixes test-io-channel-socket.c tests under msys2/mingw
7e27f27 tests: Convert g_free to g_autofree macro in test-logging.c
07bddec cirrus: Building freebsd in a single short
ae61ebd vmstate: Fixes test-vmstate.c on msys2/mingw
787eeb4 meson: remove empty else and duplicated gio deps
ad29b42 tests: Enable crypto tests under msys2/mingw
eb97064 gcrypt: test_tls_psk_init should write binary file instead text file.
7ebfac6 meson: Use -b to ignore CR vs. CR-LF issues on Windows
6c6166c osdep: file locking functions are not available on Win32
5ae548a tests: test-replication disable /replication/secondary/* on msys2/mingw.
74a6589 tests: Fixes test-replication.c on msys2/mingw.
4a06ce7 tests: disable /char/stdio/* tests in test-char.c on win32
1c1fb53 curses: Fixes curses compiling errors.
bbfe966 win32: Simplify gmtime_r detection direct base on _POSIX_THREAD_SAFE_FUNCTIONS.
588c2f6 configure: Fixes ncursesw detection under msys2/mingw and enable curses
44ed485 ci: fixes msys2 build by upgrading capstone to 4.0.2
2f25baf rcu: Implement drain_call_rcu
=== OUTPUT BEGIN ===
1/26 Checking commit 2f25baf35413 (rcu: Implement drain_call_rcu)
2/26 Checking commit 44ed4856e1ef (ci: fixes msys2 build by upgrading capstone to 4.0.2)
3/26 Checking commit 588c2f6c1827 (configure: Fixes ncursesw detection under msys2/mingw and enable curses)
4/26 Checking commit bbfe966b472f (win32: Simplify gmtime_r detection direct base on _POSIX_THREAD_SAFE_FUNCTIONS.)
5/26 Checking commit 1c1fb5366733 (curses: Fixes curses compiling errors.)
6/26 Checking commit 4a06ce772c82 (tests: disable /char/stdio/* tests in test-char.c on win32)
WARNING: line over 80 characters
#60: FILE: tests/test-char.c:1474:
+ g_test_add_func("/char/console/subprocess", char_console_test_subprocess);
total: 0 errors, 1 warnings, 56 lines checked
Patch 6/26 has style problems, please review. If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
7/26 Checking commit 74a6589a34e0 (tests: Fixes test-replication.c on msys2/mingw.)
8/26 Checking commit 5ae548ac2ff9 (tests: test-replication disable /replication/secondary/* on msys2/mingw.)
9/26 Checking commit 6c6166c50138 (osdep: file locking functions are not available on Win32)
10/26 Checking commit 7ebfac6615e0 (meson: Use -b to ignore CR vs. CR-LF issues on Windows)
11/26 Checking commit eb97064abc00 (gcrypt: test_tls_psk_init should write binary file instead text file.)
12/26 Checking commit ad29b4253ac2 (tests: Enable crypto tests under msys2/mingw)
WARNING: line over 80 characters
#77: FILE: tests/crypto-tls-x509-helpers.c:514:
+ g_autofree gchar *full_path = g_build_filename(current_dir, exist_path1, NULL);
WARNING: line over 80 characters
#79: FILE: tests/crypto-tls-x509-helpers.c:516:
+ new_path2, full_path, 0 | SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE) ? 0 : -1;
WARNING: line over 80 characters
#108: FILE: tests/crypto-tls-x509-helpers.c:545:
+ sock_listener = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
ERROR: line over 90 characters
#113: FILE: tests/crypto-tls-x509-helpers.c:550:
+ if (-1 == setsockopt(sock_listener, SOL_SOCKET, SO_REUSEADDR, (const char *)&one, sizeof(one))) {
WARNING: line over 80 characters
#119: FILE: tests/crypto-tls-x509-helpers.c:556:
+ if (-1 == getsockname(sock_listener, addr->ai_addr, (int *)&(addr->ai_addrlen))) {
ERROR: space prohibited between function name and open parenthesis '('
#223: FILE: tests/test-crypto-tlscredsx509.c:85:
+ g_remove (CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
ERROR: space prohibited between function name and open parenthesis '('
#227: FILE: tests/test-crypto-tlscredsx509.c:87:
+ g_remove (CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
ERROR: space prohibited between function name and open parenthesis '('
#228: FILE: tests/test-crypto-tlscredsx509.c:88:
+ g_remove (CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_KEY);
ERROR: space prohibited between function name and open parenthesis '('
#232: FILE: tests/test-crypto-tlscredsx509.c:90:
+ g_remove (CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
ERROR: space prohibited between function name and open parenthesis '('
#233: FILE: tests/test-crypto-tlscredsx509.c:91:
+ g_remove (CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_KEY);
total: 6 errors, 4 warnings, 484 lines checked
Patch 12/26 has style problems, please review. If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
13/26 Checking commit 787eeb4e379b (meson: remove empty else and duplicated gio deps)
14/26 Checking commit ae61ebd5b394 (vmstate: Fixes test-vmstate.c on msys2/mingw)
15/26 Checking commit 07bddec81421 (cirrus: Building freebsd in a single short)
ERROR: trailing whitespace
#50: FILE: .cirrus.yml:11:
+ - pkg install -y bash curl cyrus-sasl git glib gmake gnutls gsed $
total: 1 errors, 0 warnings, 46 lines checked
Patch 15/26 has style problems, please review. If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
16/26 Checking commit 7e27f274ff7d (tests: Convert g_free to g_autofree macro in test-logging.c)
WARNING: line over 80 characters
#23: FILE: tests/test-logging.c:199:
+ g_autofree gchar *tmp_path = g_dir_make_tmp("qemu-test-logging.XXXXXX", NULL);
total: 0 errors, 1 warnings, 14 lines checked
Patch 16/26 has style problems, please review. If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
17/26 Checking commit 95d25796fe97 (tests: Fixes test-io-channel-socket.c tests under msys2/mingw)
18/26 Checking commit e170301e71d0 (tests: fixes aio-win32 about aio_remove_fd_handler, get it consistence with aio-posix.c)
WARNING: Block comments use a leading /* on a separate line
#27: FILE: util/aio-win32.c:40:
+ /* If the GSource is in the process of being destroyed then
total: 0 errors, 1 warnings, 23 lines checked
Patch 18/26 has style problems, please review. If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
19/26 Checking commit 6d2b926af4c1 (tests: Fixes test-io-channel-file by mask only owner file state mask bits)
WARNING: Block comments use a leading /* on a separate line
#38: FILE: tests/test-io-channel-file.c:65:
+ /* On Windows the stat() function in the C library checks only
WARNING: Block comments use * on subsequent lines
#39: FILE: tests/test-io-channel-file.c:66:
+ /* On Windows the stat() function in the C library checks only
+ the FAT-style READONLY attribute and does not look at the ACL at all. */
WARNING: Block comments use a trailing */ on a separate line
#39: FILE: tests/test-io-channel-file.c:66:
+ the FAT-style READONLY attribute and does not look at the ACL at all. */
total: 0 errors, 3 warnings, 22 lines checked
Patch 19/26 has style problems, please review. If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
20/26 Checking commit 4a17a57935f0 (tests: fix test-util-sockets.c)
21/26 Checking commit 58f2e782a28e (tests: Fixes test-qdev-global-props.c)
ERROR: line over 90 characters
#22: FILE: tests/test-qdev-global-props.c:254:
+ g_test_trap_assert_stderr("*warning: global dynamic-prop-type-bad.prop3 has invalid class name*");
WARNING: line over 80 characters
#26: FILE: tests/test-qdev-global-props.c:256:
+ g_test_trap_assert_stderr("*warning: global nohotplug-type.prop5=105 not used*");
ERROR: line over 90 characters
#27: FILE: tests/test-qdev-global-props.c:257:
+ g_test_trap_assert_stderr("*warning: global nondevice-type.prop6 has invalid class name*");
total: 2 errors, 1 warnings, 13 lines checked
Patch 21/26 has style problems, please review. If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
22/26 Checking commit fef8a0ca31eb (rcu: fixes test-logging.c by call drain_call_rcu before rmdir_full)
23/26 Checking commit bc6927878363 (meson: upgrade meson for execute custom ninjatool under msys2 properly)
24/26 Checking commit 083ce32943f5 (ci: Enable msys2 ci in cirrus)
25/26 Checking commit 948c78c3f338 (block: Fixes nfs compiling error on msys2/mingw)
ERROR: space prohibited between function name and open parenthesis '('
#57: FILE: block/nfs.c:56:
+#if defined (_WIN32)
ERROR: line over 90 characters
#83: FILE: block/nfs.c:430:
+ /* TODO: Not be possible implement on win32 yet, place here for futher implementation */
ERROR: space prohibited between function name and open parenthesis '('
#112: FILE: block/nfs.c:728:
+#if !defined (_WIN32)
ERROR: space prohibited between function name and open parenthesis '('
#158: FILE: block/nfs.c:893:
+#if !defined (_WIN32)
total: 4 errors, 0 warnings, 110 lines checked
Patch 25/26 has style problems, please review. If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
26/26 Checking commit 0b113c632dab (block: enable libnfs on msys2/mingw in cirrus.yml)
=== OUTPUT END ===
Test command exited with code: 1
The full log is available at
http://patchew.org/logs/20200915121318.247-1-luoyonggang@gmail.com/testing.checkpatch/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v9 12/26] tests: Enable crypto tests under msys2/mingw
2020-09-15 12:13 ` [PATCH v9 12/26] tests: Enable crypto tests under msys2/mingw Yonggang Luo
@ 2020-09-15 13:11 ` Daniel P. Berrangé
0 siblings, 0 replies; 32+ messages in thread
From: Daniel P. Berrangé @ 2020-09-15 13:11 UTC (permalink / raw)
To: Yonggang Luo
Cc: Kevin Wolf, Ed Maste, qemu-block, Stefan Weil, Xie Changlong,
Peter Lieven, qemu-devel, Michael Roth, Richard Henderson,
Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Max Reitz, Li-Wen Hsu,
Markus Armbruster
On Tue, Sep 15, 2020 at 08:13:04PM +0800, Yonggang Luo wrote:
> Fixes following tests on msys2/mingw
> 'test-crypto-tlscredsx509'
> test-crypto-tlssession'
> 'test-io-channel-tls'
>
> These tests are failure with:
> ERROR test-crypto-tlscredsx509 - missing test plan
> ERROR test-crypto-tlssession - missing test plan
> ERROR test-io-channel-tls - missing test plan
>
> Because on win32 those test case are all disabled in the header
>
> Add qemu_socket_pair for cross platform support
> Convert file system handling functions to glib
> Add qemu_link function instead posix only link function.
> Use send ad recv from qemu that convert Windows Socks error to errno properly.
> Use g_remove instead unlink
> Use g_mkdir instead mkdir
>
> Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
> ---
> tests/crypto-tls-psk-helpers.c | 2 +-
> tests/crypto-tls-x509-helpers.c | 106 ++++++++++++++++++++++++++++++-
> tests/crypto-tls-x509-helpers.h | 9 ++-
> tests/test-crypto-tlscredsx509.c | 47 +++++++-------
> tests/test-crypto-tlssession.c | 68 +++++++++++---------
> tests/test-io-channel-tls.c | 51 ++++++++-------
> 6 files changed, 204 insertions(+), 79 deletions(-)
>
> diff --git a/tests/crypto-tls-psk-helpers.c b/tests/crypto-tls-psk-helpers.c
> index 4f3bd446ad..58888d5537 100644
> --- a/tests/crypto-tls-psk-helpers.c
> +++ b/tests/crypto-tls-psk-helpers.c
> @@ -46,7 +46,7 @@ void test_tls_psk_init(const char *pskfile)
>
> void test_tls_psk_cleanup(const char *pskfile)
> {
> - unlink(pskfile);
> + g_remove(pskfile);
> }
>
> #endif /* QCRYPTO_HAVE_TLS_TEST_SUPPORT */
> diff --git a/tests/crypto-tls-x509-helpers.c b/tests/crypto-tls-x509-helpers.c
> index 01b3daf358..1238983755 100644
> --- a/tests/crypto-tls-x509-helpers.c
> +++ b/tests/crypto-tls-x509-helpers.c
> @@ -23,6 +23,8 @@
> #include "crypto-tls-x509-helpers.h"
> #include "crypto/init.h"
> #include "qemu/sockets.h"
> +#include <glib.h>
> +#include <glib/gstdio.h>
>
> #ifdef QCRYPTO_HAVE_TLS_TEST_SUPPORT
>
> @@ -133,7 +135,7 @@ void test_tls_init(const char *keyfile)
> void test_tls_cleanup(const char *keyfile)
> {
> asn1_delete_structure(&pkix_asn1);
> - unlink(keyfile);
> + g_remove(keyfile);
> }
>
> /*
> @@ -501,8 +503,108 @@ void test_tls_discard_cert(QCryptoTLSTestCertReq *req)
> req->crt = NULL;
>
> if (getenv("QEMU_TEST_DEBUG_CERTS") == NULL) {
> - unlink(req->filename);
> + g_remove(req->filename);
> }
> }
>
> +int qemu_link(const char *exist_path1, const char *new_path2)
> +{
> +#if defined(_WIN32)
> + g_autofree gchar *current_dir = g_get_current_dir();
> + g_autofree gchar *full_path = g_build_filename(current_dir, exist_path1, NULL);
> + return CreateSymbolicLinkA(
> + new_path2, full_path, 0 | SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE) ? 0 : -1;
> +#else
> + return link(exist_path1, new_path2);
> +#endif
> +}
> +
> +#if defined(_WIN32)
> +
> +int qemu_socketpair(int family, int type, int protocol, int channel[2])
> +{
> + struct addrinfo addr_data;
> + struct addrinfo *addr = NULL;
> + int sock_listener = -1;
> + int sock_client = -1;
> + int sock_server = -1;
> + int one = 1;
> +
> + memset(&addr_data, 0, sizeof(addr_data));
> + addr_data.ai_family = AF_INET;
> + addr_data.ai_socktype = type;
> + addr_data.ai_protocol = protocol;
> + if (0 != getaddrinfo("127.0.0.1", "0", &addr_data, &addr)) {
This test is backwards - QEMU style is "getaddrinfo(...) != 0"
> + goto error;
> + }
> +
> + if (NULL == addr) {
> + goto error;
> + }
> +
> + sock_listener = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
> + if (-1 == sock_listener) {
> + goto error;
> + }
Normal code style is "sock_listener < 0"
> +
> + if (-1 == setsockopt(sock_listener, SOL_SOCKET, SO_REUSEADDR, (const char *)&one, sizeof(one))) {
> + goto error;
> + }
SO_REUSEADDR is not desirable on Windows - see os-win32.c comments about
it.
> + if (-1 == bind(sock_listener, addr->ai_addr, addr->ai_addrlen)) {
> + goto error;
> + }
> + if (-1 == getsockname(sock_listener, addr->ai_addr, (int *)&(addr->ai_addrlen))) {
> + goto error;
> + }
> + if (-1 == listen(sock_listener, 1)) {
> + goto error;
> + }
> +
> + sock_client = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
> +
> + if (-1 == sock_client) {
> + goto error;
> + }
> +
> + if (-1 == connect(sock_client, addr->ai_addr, addr->ai_addrlen)) {
> + goto error;
> + }
> +
> + sock_server = accept(sock_listener, 0, 0);
> +
> + if (-1 == sock_server) {
> + goto error;
> + }
> +
> + closesocket(sock_listener);
> +
> + channel[0] = sock_client;
> + channel[1] = sock_server;
> + return 0;
> +
> +error:
> + if (-1 != sock_server) {
> + closesocket(sock_server);
> + }
> + if (-1 != sock_client) {
> + closesocket(sock_client);
> + }
> + if (-1 != sock_listener) {
> + closesocket(sock_listener);
> + }
> + if (NULL != addr) {
> + freeaddrinfo(addr);
> + }
> + return -1;
> +}
> +
> +#else
> +
> +int qemu_socketpair(int family, int type, int protocol, int recv[2])
> +{
> + return socketpair(family, type, protocol, recv);
> +}
> +
> +#endif
> +
> #endif /* QCRYPTO_HAVE_TLS_TEST_SUPPORT */
> diff --git a/tests/crypto-tls-x509-helpers.h b/tests/crypto-tls-x509-helpers.h
> index 08efba4e19..6902d43af7 100644
> --- a/tests/crypto-tls-x509-helpers.h
> +++ b/tests/crypto-tls-x509-helpers.h
> @@ -24,8 +24,9 @@
> #include <gnutls/gnutls.h>
> #include <gnutls/x509.h>
>
> -#if !(defined WIN32) && \
> - defined(CONFIG_TASN1)
> +#include "qemu/osdep.h"
> +
> +#if defined(CONFIG_TASN1)
> # define QCRYPTO_HAVE_TLS_TEST_SUPPORT
> #endif
>
> @@ -127,6 +128,10 @@ void test_tls_cleanup(const char *keyfile);
>
> extern const ASN1_ARRAY_TYPE pkix_asn1_tab[];
>
> +int qemu_link(const char *exist_path1, const char *new_path2);
> +
> +int qemu_socketpair(int family, int type, int protocol, int channel[2]);
> +
THese aren't really related t the TLS tests - they're platform
portability wrappers, so osdep.{ch} and qemu-sockets.c is where
they ought to live
> #endif /* QCRYPTO_HAVE_TLS_TEST_SUPPORT */
>
> #endif
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v9 19/26] tests: Fixes test-io-channel-file by mask only owner file state mask bits
2020-09-15 12:13 ` [PATCH v9 19/26] tests: Fixes test-io-channel-file by mask only owner file state mask bits Yonggang Luo
@ 2020-09-15 13:15 ` Daniel P. Berrangé
0 siblings, 0 replies; 32+ messages in thread
From: Daniel P. Berrangé @ 2020-09-15 13:15 UTC (permalink / raw)
To: Yonggang Luo
Cc: Kevin Wolf, Ed Maste, qemu-block, Stefan Weil, Xie Changlong,
Peter Lieven, qemu-devel, Michael Roth, Richard Henderson,
Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Max Reitz, Li-Wen Hsu,
Markus Armbruster
On Tue, Sep 15, 2020 at 08:13:11PM +0800, Yonggang Luo wrote:
> This is the error on msys2/mingw
> Running test test-io-channel-file
> **
> ERROR:../tests/test-io-channel-file.c:59:test_io_channel_file_helper: assertion failed (TEST_MASK & ~mask == st.st_mode & 0777): (384 == 438)
> ERROR test-io-channel-file - Bail out! ERROR:../tests/test-io-channel-file.c:59:test_io_channel_file_helper: assertion failed (TEST_MASK & ~mask == st.st_mode & 0777): (384 == 438)
>
> Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
> ---
> tests/test-io-channel-file.c | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v9 04/26] win32: Simplify gmtime_r detection direct base on _POSIX_THREAD_SAFE_FUNCTIONS.
2020-09-15 13:00 ` Daniel P. Berrangé
@ 2020-09-15 13:23 ` 罗勇刚(Yonggang Luo)
0 siblings, 0 replies; 32+ messages in thread
From: 罗勇刚(Yonggang Luo) @ 2020-09-15 13:23 UTC (permalink / raw)
To: Daniel P. Berrangé
Cc: Kevin Wolf, Ed Maste, Qemu-block, Stefan Weil, Xie Changlong,
Peter Lieven, qemu-level, Michael Roth, Richard Henderson,
Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Max Reitz, Li-Wen Hsu,
Markus Armbruster
[-- Attachment #1: Type: text/plain, Size: 6441 bytes --]
On Tue, Sep 15, 2020 at 9:00 PM Daniel P. Berrangé <berrange@redhat.com>
wrote:
>
> On Tue, Sep 15, 2020 at 08:12:56PM +0800, Yonggang Luo wrote:
> > First, this reduce the size of configure, configure are tending to
removal in future,
> > and this didn't introduce any new feature or remove any exist feature.
> > Second, the current localtime_r detection are conflict with ncursesw
detection in
> > mingw, when ncursesw detected, it will provide the following compile
flags
> > pkg-config --cflags ncursesw
> > -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199506L
-IC:/CI-Tools/msys64/mingw64/include/ncursesw
> > And the compile flag _POSIX_C_SOURCE will always cause
_POSIX_THREAD_SAFE_FUNCTIONS to
> > be defined, in new version of mingw, that's will cause localtime_r to
be defined.
> > But the configure script didn't provide _POSIX_C_SOURCE macro, and
that's will result
> > localtime_r not detected because localtime_r are defined in forceinline
manner.
>
> ncursesw is just one of the three curses impls we can select for
> building against, so it doesn't feel right to make an assumption
> that _POSIX_C_SOURCE is always defined.
That's what I am trying to do, not depends on if _POSIX_C_SOURCE are
defined.
After this patch, whenever ncursesw or other curses lib trying define or
not define _POSIX_C_SOURCE, the source will building properly
Because now, we don't make any assumption about _POSIX_C_SOURCE, but
before this patch,
The configure always assume msys2/mingw `not define _POSIX_C_SOURCE ` at
all.
Now this restriction are removed, only depends on mingw related
_POSIX_THREAD_SAFE_FUNCTIONS
>
> >
> > And finally cause conflict between QEMU defined localtime_r
> > struct tm *localtime_r(const time_t *timep, struct tm *result);
> > with mingw defined localtime_r
> >
> > ```
> > #if defined(_POSIX_C_SOURCE) && !defined(_POSIX_THREAD_SAFE_FUNCTIONS)
> > #define _POSIX_THREAD_SAFE_FUNCTIONS 200112L
> > #endif
> >
> > #ifdef _POSIX_THREAD_SAFE_FUNCTIONS
> > __forceinline struct tm *__CRTDECL localtime_r(const time_t *_Time,
struct tm *_Tm) {
> > return localtime_s(_Tm, _Time) ? NULL : _Tm;
> > }
> > __forceinline struct tm *__CRTDECL gmtime_r(const time_t *_Time, struct
tm *_Tm) {
> > return gmtime_s(_Tm, _Time) ? NULL : _Tm;
> > }
> > __forceinline char *__CRTDECL ctime_r(const time_t *_Time, char *_Str) {
> > return ctime_s(_Str, 0x7fffffff, _Time) ? NULL : _Str;
> > }
> > __forceinline char *__CRTDECL asctime_r(const struct tm *_Tm, char *
_Str) {
> > return asctime_s(_Str, 0x7fffffff, _Tm) ? NULL : _Str;
> > }
> > #endif
> > ```
> >
> > So I suggest remove this configure script, and restrict msys2/mingw
version to easy to maintain.
> > And use _POSIX_THREAD_SAFE_FUNCTIONS to guard the localtime_r and
counterpart functions
> >
> > Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
> > ---
> > configure | 34 ----------------------------------
> > include/sysemu/os-win32.h | 4 ++--
> > util/oslib-win32.c | 2 +-
> > 3 files changed, 3 insertions(+), 37 deletions(-)
> >
> > diff --git a/configure b/configure
> > index dc4b7a2e55..bac48b5b49 100755
> > --- a/configure
> > +++ b/configure
> > @@ -2496,37 +2496,6 @@ if test "$vhost_net" = ""; then
> > test "$vhost_kernel" = "yes" && vhost_net=yes
> > fi
> >
> > -##########################################
> > -# MinGW / Mingw-w64 localtime_r/gmtime_r check
> > -
> > -if test "$mingw32" = "yes"; then
> > - # Some versions of MinGW / Mingw-w64 lack localtime_r
> > - # and gmtime_r entirely.
> > - #
> > - # Some versions of Mingw-w64 define a macro for
> > - # localtime_r/gmtime_r.
> > - #
> > - # Some versions of Mingw-w64 will define functions
> > - # for localtime_r/gmtime_r, but only if you have
> > - # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
> > - # though, unistd.h and pthread.h both define
> > - # that for you.
> > - #
> > - # So this #undef localtime_r and #include <unistd.h>
> > - # are not in fact redundant.
> > -cat > $TMPC << EOF
> > -#include <unistd.h>
> > -#include <time.h>
> > -#undef localtime_r
> > -int main(void) { localtime_r(NULL, NULL); return 0; }
> > -EOF
> > - if compile_prog "" "" ; then
> > - localtime_r="yes"
> > - else
> > - localtime_r="no"
> > - fi
> > -fi
> > -
> > ##########################################
> > # pkg-config probe
> >
> > @@ -7088,9 +7057,6 @@ if [ "$bsd" = "yes" ] ; then
> > echo "CONFIG_BSD=y" >> $config_host_mak
> > fi
> >
> > -if test "$localtime_r" = "yes" ; then
> > - echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
> > -fi
> > if test "$qom_cast_debug" = "yes" ; then
> > echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
> > fi
> > diff --git a/include/sysemu/os-win32.h b/include/sysemu/os-win32.h
> > index d8978e28c0..3ac8a53bac 100644
> > --- a/include/sysemu/os-win32.h
> > +++ b/include/sysemu/os-win32.h
> > @@ -48,12 +48,12 @@
> > #define siglongjmp(env, val) longjmp(env, val)
> >
> > /* Missing POSIX functions. Don't use MinGW-w64 macros. */
> > -#ifndef CONFIG_LOCALTIME_R
> > +#ifndef _POSIX_THREAD_SAFE_FUNCTIONS
> > #undef gmtime_r
> > struct tm *gmtime_r(const time_t *timep, struct tm *result);
> > #undef localtime_r
> > struct tm *localtime_r(const time_t *timep, struct tm *result);
> > -#endif /* CONFIG_LOCALTIME_R */
> > +#endif
> >
> > static inline void os_setup_signal_handling(void) {}
> > static inline void os_daemonize(void) {}
> > diff --git a/util/oslib-win32.c b/util/oslib-win32.c
> > index c654dafd93..f2fa9a3549 100644
> > --- a/util/oslib-win32.c
> > +++ b/util/oslib-win32.c
> > @@ -106,7 +106,7 @@ void qemu_anon_ram_free(void *ptr, size_t size)
> > }
> > }
> >
> > -#ifndef CONFIG_LOCALTIME_R
> > +#ifndef _POSIX_THREAD_SAFE_FUNCTIONS
> > /* FIXME: add proper locking */
> > struct tm *gmtime_r(const time_t *timep, struct tm *result)
> > {
> > --
> > 2.28.0.windows.1
> >
> >
>
> Regards,
> Daniel
> --
> |: https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
> |: https://libvirt.org -o-
https://fstop138.berrange.com :|
> |: https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|
>
--
此致
礼
罗勇刚
Yours
sincerely,
Yonggang Luo
[-- Attachment #2: Type: text/html, Size: 8435 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
end of thread, other threads:[~2020-09-15 13:37 UTC | newest]
Thread overview: 32+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-09-15 12:12 [PATCH v9 00/26] W32, W64 msys2/mingw patches Yonggang Luo
2020-09-15 12:12 ` [PATCH v9 01/26] rcu: Implement drain_call_rcu Yonggang Luo
2020-09-15 12:12 ` [PATCH v9 02/26] ci: fixes msys2 build by upgrading capstone to 4.0.2 Yonggang Luo
2020-09-15 12:12 ` [PATCH v9 03/26] configure: Fixes ncursesw detection under msys2/mingw and enable curses Yonggang Luo
2020-09-15 12:12 ` [PATCH v9 04/26] win32: Simplify gmtime_r detection direct base on _POSIX_THREAD_SAFE_FUNCTIONS Yonggang Luo
2020-09-15 13:00 ` Daniel P. Berrangé
2020-09-15 13:23 ` 罗勇刚(Yonggang Luo)
2020-09-15 12:12 ` [PATCH v9 05/26] curses: Fixes curses compiling errors Yonggang Luo
2020-09-15 12:12 ` [PATCH v9 06/26] tests: disable /char/stdio/* tests in test-char.c on win32 Yonggang Luo
2020-09-15 12:12 ` [PATCH v9 07/26] tests: Fixes test-replication.c on msys2/mingw Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 08/26] tests: test-replication disable /replication/secondary/* " Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 09/26] osdep: file locking functions are not available on Win32 Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 10/26] meson: Use -b to ignore CR vs. CR-LF issues on Windows Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 11/26] gcrypt: test_tls_psk_init should write binary file instead text file Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 12/26] tests: Enable crypto tests under msys2/mingw Yonggang Luo
2020-09-15 13:11 ` Daniel P. Berrangé
2020-09-15 12:13 ` [PATCH v9 13/26] meson: remove empty else and duplicated gio deps Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 14/26] vmstate: Fixes test-vmstate.c on msys2/mingw Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 15/26] cirrus: Building freebsd in a single short Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 16/26] tests: Convert g_free to g_autofree macro in test-logging.c Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 17/26] tests: Fixes test-io-channel-socket.c tests under msys2/mingw Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 18/26] tests: fixes aio-win32 about aio_remove_fd_handler, get it consistence with aio-posix.c Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 19/26] tests: Fixes test-io-channel-file by mask only owner file state mask bits Yonggang Luo
2020-09-15 13:15 ` Daniel P. Berrangé
2020-09-15 12:13 ` [PATCH v9 20/26] tests: fix test-util-sockets.c Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 21/26] tests: Fixes test-qdev-global-props.c Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 22/26] rcu: fixes test-logging.c by call drain_call_rcu before rmdir_full Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 23/26] meson: upgrade meson for execute custom ninjatool under msys2 properly Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 24/26] ci: Enable msys2 ci in cirrus Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 25/26] block: Fixes nfs compiling error on msys2/mingw Yonggang Luo
2020-09-15 12:13 ` [PATCH v9 26/26] block: enable libnfs on msys2/mingw in cirrus.yml Yonggang Luo
2020-09-15 13:00 ` [PATCH v9 00/26] W32, W64 msys2/mingw patches no-reply
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).