All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v10 00/26] W32, W64 msys2/mingw patches
@ 2020-09-15 17:12 Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 01/26] rcu: Implement drain_call_rcu Yonggang Luo
                   ` (26 more replies)
  0 siblings, 27 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
	Xie Changlong, Richard Henderson, Markus Armbruster, Max Reitz,
	Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
	Li-Wen Hsu, Peter Lieven

V9-V10
* gcrypt: test_tls_psk_init should write binary file instead text file.
  Split #include <glib/gstdio.h> out, that line not belong this patch

* tests: Enable crypto tests under msys2/mingw
  move qemu_socketpair into oslib-win32.c and rename to socketpair
  move qemu_link into osdep.c
  Fixes code style warning

* tests: Fixes test-io-channel-file by mask only owner file state mask bits
  Update comment place

* ci: Enable msys2 ci in cirrus
  Fixes misleading error message

Fixes all checkpatch error messages

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             |  3 +-
 include/qemu/rcu.h               |  1 +
 include/sysemu/os-win32.h        |  9 ++-
 meson                            |  2 +-
 meson.build                      |  6 --
 tests/crypto-tls-psk-helpers.c   |  6 +-
 tests/crypto-tls-x509-helpers.c  |  6 +-
 tests/crypto-tls-x509-helpers.h  |  5 +-
 tests/qapi-schema/meson.build    |  2 +-
 tests/test-char.c                | 27 +++++----
 tests/test-crypto-tlscredsx509.c | 47 ++++++++--------
 tests/test-crypto-tlssession.c   | 64 ++++++++++++---------
 tests/test-io-channel-file.c     | 12 +++-
 tests/test-io-channel-socket.c   |  2 +
 tests/test-io-channel-tls.c      | 49 +++++++++-------
 tests/test-logging.c             |  6 +-
 tests/test-qdev-global-props.c   |  9 ++-
 tests/test-replication.c         | 22 ++++++--
 tests/test-util-sockets.c        |  6 +-
 tests/test-vmstate.c             |  3 +-
 ui/curses.c                      | 14 ++---
 util/aio-win32.c                 | 12 +++-
 util/osdep.c                     | 16 ++++++
 util/oslib-win32.c               | 78 ++++++++++++++++++++++++-
 util/rcu.c                       | 55 ++++++++++++++++++
 29 files changed, 459 insertions(+), 200 deletions(-)

--=20
2.28.0.windows.1



^ permalink raw reply	[flat|nested] 33+ messages in thread

* [PATCH v10 01/26] rcu: Implement drain_call_rcu
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 02/26] ci: fixes msys2 build by upgrading capstone to 4.0.2 Yonggang Luo
                   ` (25 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Hajnoczi,
	Stefan Weil, Xie Changlong, Richard Henderson, Markus Armbruster,
	Max Reitz, Gerd Hoffmann, Stefan Hajnoczi, Wen Congyang,
	Paolo Bonzini, Maxim Levitsky, Li-Wen Hsu, Peter Lieven

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] 33+ messages in thread

* [PATCH v10 02/26] ci: fixes msys2 build by upgrading capstone to 4.0.2
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 01/26] rcu: Implement drain_call_rcu Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 03/26] configure: Fixes ncursesw detection under msys2/mingw and enable curses Yonggang Luo
                   ` (24 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
	Xie Changlong, Richard Henderson, Markus Armbruster, Max Reitz,
	Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
	Li-Wen Hsu, Peter Lieven

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] 33+ messages in thread

* [PATCH v10 03/26] configure: Fixes ncursesw detection under msys2/mingw and enable curses
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 01/26] rcu: Implement drain_call_rcu Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 02/26] ci: fixes msys2 build by upgrading capstone to 4.0.2 Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 04/26] win32: Simplify gmtime_r detection direct base on _POSIX_THREAD_SAFE_FUNCTIONS Yonggang Luo
                   ` (23 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
	Xie Changlong, Richard Henderson, Markus Armbruster, Max Reitz,
	Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
	Li-Wen Hsu, Peter Lieven

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] 33+ messages in thread

* [PATCH v10 04/26] win32: Simplify gmtime_r detection direct base on _POSIX_THREAD_SAFE_FUNCTIONS.
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (2 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 03/26] configure: Fixes ncursesw detection under msys2/mingw and enable curses Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 05/26] curses: Fixes curses compiling errors Yonggang Luo
                   ` (22 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
	Xie Changlong, Richard Henderson, Markus Armbruster, Max Reitz,
	Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
	Li-Wen Hsu, Peter Lieven

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] 33+ messages in thread

* [PATCH v10 05/26] curses: Fixes curses compiling errors.
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (3 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 04/26] win32: Simplify gmtime_r detection direct base on _POSIX_THREAD_SAFE_FUNCTIONS Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 06/26] tests: disable /char/stdio/* tests in test-char.c on win32 Yonggang Luo
                   ` (21 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Daniel P . Berrangé,
	Ed Maste, Michael Roth, qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, Markus Armbruster, Max Reitz, Yonggang Luo,
	Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Li-Wen Hsu,
	Peter Lieven

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] 33+ messages in thread

* [PATCH v10 06/26] tests: disable /char/stdio/* tests in test-char.c on win32
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (4 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 05/26] curses: Fixes curses compiling errors Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 07/26] tests: Fixes test-replication.c on msys2/mingw Yonggang Luo
                   ` (20 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
	Xie Changlong, Richard Henderson, Markus Armbruster, Max Reitz,
	Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
	Li-Wen Hsu, Peter Lieven

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 | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/tests/test-char.c b/tests/test-char.c
index d35cc839bc..09e4069306 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,16 @@ 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 +1541,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] 33+ messages in thread

* [PATCH v10 07/26] tests: Fixes test-replication.c on msys2/mingw.
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (5 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 06/26] tests: disable /char/stdio/* tests in test-char.c on win32 Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 08/26] tests: test-replication disable /replication/secondary/* " Yonggang Luo
                   ` (19 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Daniel P . Berrangé,
	Ed Maste, Michael Roth, qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, Markus Armbruster, Max Reitz, Yonggang Luo,
	Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Li-Wen Hsu,
	Peter Lieven

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] 33+ messages in thread

* [PATCH v10 08/26] tests: test-replication disable /replication/secondary/* on msys2/mingw.
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (6 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 07/26] tests: Fixes test-replication.c on msys2/mingw Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 09/26] osdep: file locking functions are not available on Win32 Yonggang Luo
                   ` (18 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Daniel P . Berrangé,
	Ed Maste, Michael Roth, qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, Markus Armbruster, Max Reitz, Yonggang Luo,
	Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Li-Wen Hsu,
	Peter Lieven

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] 33+ messages in thread

* [PATCH v10 09/26] osdep: file locking functions are not available on Win32
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (7 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 08/26] tests: test-replication disable /replication/secondary/* " Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 10/26] meson: Use -b to ignore CR vs. CR-LF issues on Windows Yonggang Luo
                   ` (17 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Daniel P . Berrangé,
	Ed Maste, Michael Roth, qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, Markus Armbruster, Max Reitz, Yonggang Luo,
	Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Li-Wen Hsu,
	Peter Lieven

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] 33+ messages in thread

* [PATCH v10 10/26] meson: Use -b to ignore CR vs. CR-LF issues on Windows
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (8 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 09/26] osdep: file locking functions are not available on Win32 Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 11/26] gcrypt: test_tls_psk_init should write binary file instead text file Yonggang Luo
                   ` (16 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Daniel P . Berrangé,
	Ed Maste, Michael Roth, qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, Markus Armbruster, Max Reitz, Yonggang Luo,
	Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Li-Wen Hsu,
	Peter Lieven

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] 33+ messages in thread

* [PATCH v10 11/26] gcrypt: test_tls_psk_init should write binary file instead text file.
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (9 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 10/26] meson: Use -b to ignore CR vs. CR-LF issues on Windows Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 12/26] tests: Enable crypto tests under msys2/mingw Yonggang Luo
                   ` (15 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
	Xie Changlong, Richard Henderson, Markus Armbruster, Max Reitz,
	Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
	Li-Wen Hsu, Peter Lieven

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 | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/crypto-tls-psk-helpers.c b/tests/crypto-tls-psk-helpers.c
index a8395477c3..11ae26368c 100644
--- a/tests/crypto-tls-psk-helpers.c
+++ b/tests/crypto-tls-psk-helpers.c
@@ -32,7 +32,7 @@ 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] 33+ messages in thread

* [PATCH v10 12/26] tests: Enable crypto tests under msys2/mingw
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (10 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 11/26] gcrypt: test_tls_psk_init should write binary file instead text file Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 13/26] meson: remove empty else and duplicated gio deps Yonggang Luo
                   ` (14 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
	Xie Changlong, Richard Henderson, Markus Armbruster, Max Reitz,
	Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
	Li-Wen Hsu, Peter Lieven

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>
---
 include/qemu/osdep.h             |  1 +
 include/sysemu/os-win32.h        |  5 +++
 tests/crypto-tls-psk-helpers.c   |  4 +-
 tests/crypto-tls-x509-helpers.c  |  6 ++-
 tests/crypto-tls-x509-helpers.h  |  5 ++-
 tests/test-crypto-tlscredsx509.c | 47 +++++++++++---------
 tests/test-crypto-tlssession.c   | 64 +++++++++++++++------------
 tests/test-io-channel-tls.c      | 49 +++++++++++---------
 util/osdep.c                     | 16 +++++++
 util/oslib-win32.c               | 76 ++++++++++++++++++++++++++++++++
 10 files changed, 197 insertions(+), 76 deletions(-)

diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
index e80fddd1e8..dd4c63e4b6 100644
--- a/include/qemu/osdep.h
+++ b/include/qemu/osdep.h
@@ -499,6 +499,7 @@ int qemu_mprotect_none(void *addr, size_t size);
 
 int qemu_open(const char *name, int flags, ...);
 int qemu_close(int fd);
+int qemu_link(const char *exist_path1, const char *new_path2);
 int qemu_unlink(const char *name);
 #ifndef _WIN32
 int qemu_dup(int fd);
diff --git a/include/sysemu/os-win32.h b/include/sysemu/os-win32.h
index 3ac8a53bac..8863833f67 100644
--- a/include/sysemu/os-win32.h
+++ b/include/sysemu/os-win32.h
@@ -194,4 +194,9 @@ ssize_t qemu_recv_wrap(int sockfd, void *buf, size_t len, int flags);
 ssize_t qemu_recvfrom_wrap(int sockfd, void *buf, size_t len, int flags,
                            struct sockaddr *addr, socklen_t *addrlen);
 
+#undef socketpair
+#define socketpair qemu_socketpair
+int qemu_socketpair(int family, int type, int protocol, int channel[2]);
+
+
 #endif
diff --git a/tests/crypto-tls-psk-helpers.c b/tests/crypto-tls-psk-helpers.c
index 11ae26368c..6f82bfceb2 100644
--- a/tests/crypto-tls-psk-helpers.c
+++ b/tests/crypto-tls-psk-helpers.c
@@ -26,6 +26,8 @@
 #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)
@@ -44,7 +46,7 @@ void test_tls_psk_init(const char *pskfile)
 
 void test_tls_psk_cleanup(const char *pskfile)
 {
-    unlink(pskfile);
+    qemu_unlink(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..051f045657 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);
+    qemu_unlink(keyfile);
 }
 
 /*
@@ -501,7 +503,7 @@ void test_tls_discard_cert(QCryptoTLSTestCertReq *req)
     req->crt = NULL;
 
     if (getenv("QEMU_TEST_DEBUG_CERTS") == NULL) {
-        unlink(req->filename);
+        qemu_unlink(req->filename);
     }
 }
 
diff --git a/tests/crypto-tls-x509-helpers.h b/tests/crypto-tls-x509-helpers.h
index 08efba4e19..0856934a70 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
 
diff --git a/tests/test-crypto-tlscredsx509.c b/tests/test-crypto-tlscredsx509.c
index f487349c32..62d5d2defd 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);
+    qemu_unlink(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);
+        qemu_unlink(CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
+        qemu_unlink(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);
+        qemu_unlink(CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
+        qemu_unlink(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);
+    qemu_unlink(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);
+        qemu_unlink(CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
+        qemu_unlink(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);
+        qemu_unlink(CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
+        qemu_unlink(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");
+    qemu_unlink(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..0fcd0789f1 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(
@@ -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);
+    qemu_unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+    qemu_unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
+    qemu_unlink(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);
+    qemu_unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+    qemu_unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
+    qemu_unlink(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);
+    qemu_unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+    qemu_unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
+    qemu_unlink(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);
+    qemu_unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+    qemu_unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
+    qemu_unlink(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");
+    qemu_unlink(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..851dbb26e3 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/"
@@ -127,29 +131,29 @@ static void test_io_channel_tls(const void *opaque)
 
 #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);
+    qemu_unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+    qemu_unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
+    qemu_unlink(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);
+    qemu_unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+    qemu_unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
+    qemu_unlink(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);
+    qemu_unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+    qemu_unlink(SERVER_CERT_DIR QCRYPTO_TLS_CREDS_X509_SERVER_CERT);
+    qemu_unlink(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);
+    qemu_unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CA_CERT);
+    qemu_unlink(CLIENT_CERT_DIR QCRYPTO_TLS_CREDS_X509_CLIENT_CERT);
+    qemu_unlink(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);
 
diff --git a/util/osdep.c b/util/osdep.c
index 4829c07ff6..3d6f827cd6 100644
--- a/util/osdep.c
+++ b/util/osdep.c
@@ -370,6 +370,22 @@ int qemu_close(int fd)
     return close(fd);
 }
 
+/*
+ * Create a symbolic link file from new_path2 to exist_path1
+ */
+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
+}
+
 /*
  * Delete a file from the filesystem, unless the filename is /dev/fdset/...
  *
diff --git a/util/oslib-win32.c b/util/oslib-win32.c
index f2fa9a3549..5fedd1194a 100644
--- a/util/oslib-win32.c
+++ b/util/oslib-win32.c
@@ -839,3 +839,79 @@ size_t qemu_get_host_physmem(void)
     }
     return 0;
 }
+
+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;
+
+    memset(&addr_data, 0, sizeof(addr_data));
+    addr_data.ai_family = AF_INET;
+    addr_data.ai_socktype = type;
+    addr_data.ai_protocol = protocol;
+    if (getaddrinfo("127.0.0.1", "0", &addr_data, &addr) < 0) {
+        goto error;
+    }
+
+    if (NULL == addr) {
+        goto error;
+    }
+
+    sock_listener = socket(addr->ai_family,
+        addr->ai_socktype, addr->ai_protocol);
+    if (sock_listener < 0) {
+        goto error;
+    }
+
+    if (bind(sock_listener, addr->ai_addr, addr->ai_addrlen) < 0) {
+        goto error;
+    }
+    if (getsockname(sock_listener,
+        addr->ai_addr, (int *)&(addr->ai_addrlen)) < 0) {
+        goto error;
+    }
+    if (listen(sock_listener, 1) < 0) {
+        goto error;
+    }
+
+    sock_client = socket(addr->ai_family,
+        addr->ai_socktype, addr->ai_protocol);
+
+    if (sock_client < 0) {
+        goto error;
+    }
+
+    if (connect(sock_client, addr->ai_addr, addr->ai_addrlen) < 0) {
+        goto error;
+    }
+
+    sock_server = accept(sock_listener, 0, 0);
+
+    if (sock_server < 0) {
+        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;
+}
-- 
2.28.0.windows.1



^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH v10 13/26] meson: remove empty else and duplicated gio deps
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (11 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 12/26] tests: Enable crypto tests under msys2/mingw Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-16  9:10   ` Laurent Vivier
  2020-09-15 17:12 ` [PATCH v10 14/26] vmstate: Fixes test-vmstate.c on msys2/mingw Yonggang Luo
                   ` (13 subsequent siblings)
  26 siblings, 1 reply; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Daniel P . Berrangé,
	Ed Maste, Michael Roth, qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, Markus Armbruster, Max Reitz, Yonggang Luo,
	Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Li-Wen Hsu,
	Peter Lieven

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] 33+ messages in thread

* [PATCH v10 14/26] vmstate: Fixes test-vmstate.c on msys2/mingw
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (12 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 13/26] meson: remove empty else and duplicated gio deps Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 15/26] cirrus: Building freebsd in a single short Yonggang Luo
                   ` (12 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Thomas Huth, Ed Maste, Michael Roth, qemu-block,
	Stefan Weil, Xie Changlong, Richard Henderson, Markus Armbruster,
	Max Reitz, Yonggang Luo, Gerd Hoffmann, Daniel P . Berrangé,
	Wen Congyang, Paolo Bonzini, Philippe Mathieu-Daudé,
	Li-Wen Hsu, Peter Lieven

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] 33+ messages in thread

* [PATCH v10 15/26] cirrus: Building freebsd in a single short
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (13 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 14/26] vmstate: Fixes test-vmstate.c on msys2/mingw Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:48   ` Philippe Mathieu-Daudé
  2020-09-15 17:12 ` [PATCH v10 16/26] tests: Convert g_free to g_autofree macro in test-logging.c Yonggang Luo
                   ` (11 subsequent siblings)
  26 siblings, 1 reply; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Daniel P . Berrangé,
	Ed Maste, Michael Roth, qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, Markus Armbruster, Max Reitz, Yonggang Luo,
	Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Li-Wen Hsu,
	Peter Lieven

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..25fb4add9b 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] 33+ messages in thread

* [PATCH v10 16/26] tests: Convert g_free to g_autofree macro in test-logging.c
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (14 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 15/26] cirrus: Building freebsd in a single short Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 17/26] tests: Fixes test-io-channel-socket.c tests under msys2/mingw Yonggang Luo
                   ` (10 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Daniel P . Berrangé,
	Ed Maste, Michael Roth, qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, Markus Armbruster, Max Reitz, Yonggang Luo,
	Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
	Philippe Mathieu-Daudé,
	Li-Wen Hsu, Peter Lieven

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 | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/test-logging.c b/tests/test-logging.c
index 8a1161de1d..cec18b31b4 100644
--- a/tests/test-logging.c
+++ b/tests/test-logging.c
@@ -196,7 +196,8 @@ 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 +213,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] 33+ messages in thread

* [PATCH v10 17/26] tests: Fixes test-io-channel-socket.c tests under msys2/mingw
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (15 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 16/26] tests: Convert g_free to g_autofree macro in test-logging.c Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 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; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Daniel P . Berrangé,
	Ed Maste, Michael Roth, qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, Markus Armbruster, Max Reitz, Yonggang Luo,
	Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Li-Wen Hsu,
	Peter Lieven

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] 33+ messages in thread

* [PATCH v10 18/26] tests: fixes aio-win32 about aio_remove_fd_handler, get it consistence with aio-posix.c
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (16 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 17/26] tests: Fixes test-io-channel-socket.c tests under msys2/mingw Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 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; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
	Xie Changlong, Richard Henderson, Markus Armbruster, Max Reitz,
	Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
	Li-Wen Hsu, Peter Lieven

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 | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/util/aio-win32.c b/util/aio-win32.c
index 953c56ab48..49bd90e62e 100644
--- a/util/aio-win32.c
+++ b/util/aio-win32.c
@@ -37,6 +37,16 @@ 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 +149,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] 33+ messages in thread

* [PATCH v10 19/26] tests: Fixes test-io-channel-file by mask only owner file state mask bits
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (17 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 18/26] tests: fixes aio-win32 about aio_remove_fd_handler, get it consistence with aio-posix.c Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 20/26] tests: fix test-util-sockets.c Yonggang Luo
                   ` (7 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Daniel P . Berrangé,
	Ed Maste, Michael Roth, qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, Markus Armbruster, Max Reitz, Yonggang Luo,
	Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Li-Wen Hsu,
	Peter Lieven

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>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
 tests/test-io-channel-file.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/tests/test-io-channel-file.c b/tests/test-io-channel-file.c
index bac2b07562..0aa0477541 100644
--- a/tests/test-io-channel-file.c
+++ b/tests/test-io-channel-file.c
@@ -28,6 +28,16 @@
 #define TEST_FILE "tests/test-io-channel-file.txt"
 #define TEST_MASK 0600
 
+/*
+ * 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.
+ */
+#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 +66,7 @@ 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);
+    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] 33+ messages in thread

* [PATCH v10 20/26] tests: fix test-util-sockets.c
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (18 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 19/26] tests: Fixes test-io-channel-file by mask only owner file state mask bits Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 21/26] tests: Fixes test-qdev-global-props.c Yonggang Luo
                   ` (6 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Daniel P . Berrangé,
	Ed Maste, Michael Roth, qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, Markus Armbruster, Max Reitz, Yonggang Luo,
	Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Li-Wen Hsu,
	Peter Lieven

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] 33+ messages in thread

* [PATCH v10 21/26] tests: Fixes test-qdev-global-props.c
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (19 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 20/26] tests: fix test-util-sockets.c Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 22/26] rcu: fixes test-logging.c by call drain_call_rcu before rmdir_full Yonggang Luo
                   ` (5 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Daniel P . Berrangé,
	Ed Maste, Michael Roth, qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, Markus Armbruster, Max Reitz, Yonggang Luo,
	Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Li-Wen Hsu,
	Peter Lieven

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 | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/tests/test-qdev-global-props.c b/tests/test-qdev-global-props.c
index 8a3c14d92c..c8862cac5f 100644
--- a/tests/test-qdev-global-props.c
+++ b/tests/test-qdev-global-props.c
@@ -251,10 +251,13 @@ 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] 33+ messages in thread

* [PATCH v10 22/26] rcu: fixes test-logging.c by call drain_call_rcu before rmdir_full
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (20 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 21/26] tests: Fixes test-qdev-global-props.c Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 23/26] meson: upgrade meson for execute custom ninjatool under msys2 properly Yonggang Luo
                   ` (4 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
	Xie Changlong, Richard Henderson, Markus Armbruster, Max Reitz,
	Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
	Li-Wen Hsu, Peter Lieven

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 cec18b31b4..a7e36dbfe8 100644
--- a/tests/test-logging.c
+++ b/tests/test-logging.c
@@ -211,6 +211,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] 33+ messages in thread

* [PATCH v10 23/26] meson: upgrade meson for execute custom ninjatool under msys2 properly
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (21 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 22/26] rcu: fixes test-logging.c by call drain_call_rcu before rmdir_full Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 24/26] ci: Enable msys2 ci in cirrus Yonggang Luo
                   ` (3 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
	Xie Changlong, Richard Henderson, Markus Armbruster, Max Reitz,
	Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
	Li-Wen Hsu, Peter Lieven

* 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] 33+ messages in thread

* [PATCH v10 24/26] ci: Enable msys2 ci in cirrus
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (22 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 23/26] meson: upgrade meson for execute custom ninjatool under msys2 properly Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-15 17:12 ` [PATCH v10 25/26] block: Fixes nfs compiling error on msys2/mingw Yonggang Luo
                   ` (2 subsequent siblings)
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Daniel P . Berrangé,
	Ed Maste, Michael Roth, qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, Markus Armbruster, Max Reitz, Yonggang Luo,
	Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Li-Wen Hsu,
	Peter Lieven

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.
Now all enabled msys2/tests are passed

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 25fb4add9b..90ed891865 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] 33+ messages in thread

* [PATCH v10 25/26] block: Fixes nfs compiling error on msys2/mingw
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (23 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 24/26] ci: Enable msys2 ci in cirrus Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-20 19:03   ` Peter Lieven
  2020-09-15 17:12 ` [PATCH v10 26/26] block: enable libnfs on msys2/mingw in cirrus.yml Yonggang Luo
  2020-09-16 11:52 ` [PATCH v10 00/26] W32, W64 msys2/mingw patches Thomas Huth
  26 siblings, 1 reply; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
	Xie Changlong, Richard Henderson, Markus Armbruster, Max Reitz,
	Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
	Li-Wen Hsu, Peter Lieven

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..5f83dbe407 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 */
+    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] 33+ messages in thread

* [PATCH v10 26/26] block: enable libnfs on msys2/mingw in cirrus.yml
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (24 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 25/26] block: Fixes nfs compiling error on msys2/mingw Yonggang Luo
@ 2020-09-15 17:12 ` Yonggang Luo
  2020-09-16 11:52 ` [PATCH v10 00/26] W32, W64 msys2/mingw patches Thomas Huth
  26 siblings, 0 replies; 33+ messages in thread
From: Yonggang Luo @ 2020-09-15 17:12 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
	Xie Changlong, Richard Henderson, Markus Armbruster, Max Reitz,
	Yonggang Luo, Gerd Hoffmann, Wen Congyang, Paolo Bonzini,
	Li-Wen Hsu, Peter Lieven

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 90ed891865..ca4d7db64f 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] 33+ messages in thread

* Re: [PATCH v10 15/26] cirrus: Building freebsd in a single short
  2020-09-15 17:12 ` [PATCH v10 15/26] cirrus: Building freebsd in a single short Yonggang Luo
@ 2020-09-15 17:48   ` Philippe Mathieu-Daudé
  2020-09-15 17:49     ` 罗勇刚(Yonggang Luo)
  0 siblings, 1 reply; 33+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-09-15 17:48 UTC (permalink / raw)
  To: Yonggang Luo, qemu-devel
  Cc: Kevin Wolf, Ed Maste, qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, Michael Roth, Markus Armbruster,
	Paolo Bonzini, Gerd Hoffmann, Wen Congyang,
	Daniel P . Berrangé,
	Max Reitz, Li-Wen Hsu, Peter Lieven

Typo "single shot" in subject?

On 9/15/20 7:12 PM, Yonggang Luo wrote:
> 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..25fb4add9b 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
>  
> 



^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH v10 15/26] cirrus: Building freebsd in a single short
  2020-09-15 17:48   ` Philippe Mathieu-Daudé
@ 2020-09-15 17:49     ` 罗勇刚(Yonggang Luo)
  0 siblings, 0 replies; 33+ messages in thread
From: 罗勇刚(Yonggang Luo) @ 2020-09-15 17:49 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: Kevin Wolf, Ed Maste, Qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, qemu-level, Michael Roth, Paolo Bonzini,
	Gerd Hoffmann, Wen Congyang, Daniel P . Berrangé,
	Max Reitz, Li-Wen Hsu, Markus Armbruster, Peter Lieven

[-- Attachment #1: Type: text/plain, Size: 3427 bytes --]

On Wed, Sep 16, 2020 at 1:48 AM Philippe Mathieu-Daudé <f4bug@amsat.org>
wrote:
>
> Typo "single shot" in subject?

Yeap, single shot, hope the maintainer fix it
>
>
> On 9/15/20 7:12 PM, Yonggang Luo wrote:
> > 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..25fb4add9b 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
> >
> >
>


--
         此致
礼
罗勇刚
Yours
    sincerely,
Yonggang Luo

[-- Attachment #2: Type: text/html, Size: 4516 bytes --]

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH v10 13/26] meson: remove empty else and duplicated gio deps
  2020-09-15 17:12 ` [PATCH v10 13/26] meson: remove empty else and duplicated gio deps Yonggang Luo
@ 2020-09-16  9:10   ` Laurent Vivier
  0 siblings, 0 replies; 33+ messages in thread
From: Laurent Vivier @ 2020-09-16  9:10 UTC (permalink / raw)
  To: Yonggang Luo, qemu-devel
  Cc: Kevin Wolf, Thomas Huth, Ed Maste, qemu-block, qemu-trivial,
	Stefan Weil, Xie Changlong, Richard Henderson, Michael Roth,
	Markus Armbruster, Paolo Bonzini, Gerd Hoffmann, Wen Congyang,
	Daniel P . Berrangé,
	Max Reitz, Li-Wen Hsu, Peter Lieven

Le 15/09/2020 à 19:12, Yonggang Luo a écrit :
> 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
> 

Applied to my trivial-patches branch.

Thanks,
Laurent



^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH v10 00/26] W32, W64 msys2/mingw patches
  2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
                   ` (25 preceding siblings ...)
  2020-09-15 17:12 ` [PATCH v10 26/26] block: enable libnfs on msys2/mingw in cirrus.yml Yonggang Luo
@ 2020-09-16 11:52 ` Thomas Huth
  2020-09-16 12:04   ` 罗勇刚(Yonggang Luo)
  26 siblings, 1 reply; 33+ messages in thread
From: Thomas Huth @ 2020-09-16 11:52 UTC (permalink / raw)
  To: Yonggang Luo, qemu-devel
  Cc: Kevin Wolf, Ed Maste, qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, Michael Roth, Markus Armbruster,
	Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Max Reitz,
	Li-Wen Hsu, Peter Lieven

On 15/09/2020 19.12, Yonggang Luo wrote:
[...]
> 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

Thanks a lot for your work, I've added most of your patches to my latest
"testing" pull request now, so that we should get basic test coverage on
msys2 now in the Cirrus-CI if it gets merged.

I skipped the NFS, capstone, test-char and crypto patches for now (and
replaced them with older versions of your patches where you've disabled
them) - I think these patches still need some more review / work and
then should go through the trees of the corresponding maintainers later.

 Cheers,
  Thomas



^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH v10 00/26] W32, W64 msys2/mingw patches
  2020-09-16 11:52 ` [PATCH v10 00/26] W32, W64 msys2/mingw patches Thomas Huth
@ 2020-09-16 12:04   ` 罗勇刚(Yonggang Luo)
  0 siblings, 0 replies; 33+ messages in thread
From: 罗勇刚(Yonggang Luo) @ 2020-09-16 12:04 UTC (permalink / raw)
  To: Thomas Huth
  Cc: Kevin Wolf, Ed Maste, Qemu-block, Stefan Weil, Xie Changlong,
	Richard Henderson, qemu-level, Michael Roth, Gerd Hoffmann,
	Wen Congyang, Paolo Bonzini, Max Reitz, Li-Wen Hsu,
	Markus Armbruster, Peter Lieven

[-- Attachment #1: Type: text/plain, Size: 1097 bytes --]

On Wed, Sep 16, 2020 at 7:52 PM Thomas Huth <thuth@redhat.com> wrote:
>
> On 15/09/2020 19.12, Yonggang Luo wrote:
> [...]
> > 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
>
> Thanks a lot for your work, I've added most of your patches to my latest
> "testing" pull request now, so that we should get basic test coverage on
> msys2 now in the Cirrus-CI if it gets merged.
>
> I skipped the NFS, capstone, test-char and crypto patches for now (and
> replaced them with older versions of your patches where you've disabled
> them) - I think these patches still need some more review / work and
> then should go through the trees of the corresponding maintainers later.
Happy to see, once your branch merged, I'll rebase these patches and resend
them
separately
>
>  Cheers,
>   Thomas
>


--
         此致
礼
罗勇刚
Yours
    sincerely,
Yonggang Luo

[-- Attachment #2: Type: text/html, Size: 1356 bytes --]

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH v10 25/26] block: Fixes nfs compiling error on msys2/mingw
  2020-09-15 17:12 ` [PATCH v10 25/26] block: Fixes nfs compiling error on msys2/mingw Yonggang Luo
@ 2020-09-20 19:03   ` Peter Lieven
  0 siblings, 0 replies; 33+ messages in thread
From: Peter Lieven @ 2020-09-20 19:03 UTC (permalink / raw)
  To: Yonggang Luo, qemu-devel
  Cc: Kevin Wolf, Ed Maste, Michael Roth, qemu-block, Stefan Weil,
	Xie Changlong, Richard Henderson, Markus Armbruster, Max Reitz,
	Gerd Hoffmann, Wen Congyang, Paolo Bonzini, Li-Wen Hsu

Am 15.09.20 um 19:12 schrieb Yonggang Luo:
> 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..5f83dbe407 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);
>  }


I would still remove the st struct from NFSClient on WIN32 completely.


>  
> +static blkcnt_t nfs_get_st_blocks(const struct nfs_stat *st)
> +{
> +#if defined(_WIN32)
> +    /* TODO: Not be possible implement on win32 yet */
> +    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);


And put an ifndef _WIN32 arount this.


>      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);


and this.


>      }
>  
>      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,


And add a comment that the _WIN32 implementation of libnfs does not provide the allocated filesize of a file.


Peter




^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2020-09-20 19:05 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-15 17:12 [PATCH v10 00/26] W32, W64 msys2/mingw patches Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 01/26] rcu: Implement drain_call_rcu Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 02/26] ci: fixes msys2 build by upgrading capstone to 4.0.2 Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 03/26] configure: Fixes ncursesw detection under msys2/mingw and enable curses Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 04/26] win32: Simplify gmtime_r detection direct base on _POSIX_THREAD_SAFE_FUNCTIONS Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 05/26] curses: Fixes curses compiling errors Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 06/26] tests: disable /char/stdio/* tests in test-char.c on win32 Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 07/26] tests: Fixes test-replication.c on msys2/mingw Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 08/26] tests: test-replication disable /replication/secondary/* " Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 09/26] osdep: file locking functions are not available on Win32 Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 10/26] meson: Use -b to ignore CR vs. CR-LF issues on Windows Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 11/26] gcrypt: test_tls_psk_init should write binary file instead text file Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 12/26] tests: Enable crypto tests under msys2/mingw Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 13/26] meson: remove empty else and duplicated gio deps Yonggang Luo
2020-09-16  9:10   ` Laurent Vivier
2020-09-15 17:12 ` [PATCH v10 14/26] vmstate: Fixes test-vmstate.c on msys2/mingw Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 15/26] cirrus: Building freebsd in a single short Yonggang Luo
2020-09-15 17:48   ` Philippe Mathieu-Daudé
2020-09-15 17:49     ` 罗勇刚(Yonggang Luo)
2020-09-15 17:12 ` [PATCH v10 16/26] tests: Convert g_free to g_autofree macro in test-logging.c Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 17/26] tests: Fixes test-io-channel-socket.c tests under msys2/mingw Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 18/26] tests: fixes aio-win32 about aio_remove_fd_handler, get it consistence with aio-posix.c Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 19/26] tests: Fixes test-io-channel-file by mask only owner file state mask bits Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 20/26] tests: fix test-util-sockets.c Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 21/26] tests: Fixes test-qdev-global-props.c Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 22/26] rcu: fixes test-logging.c by call drain_call_rcu before rmdir_full Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 23/26] meson: upgrade meson for execute custom ninjatool under msys2 properly Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 24/26] ci: Enable msys2 ci in cirrus Yonggang Luo
2020-09-15 17:12 ` [PATCH v10 25/26] block: Fixes nfs compiling error on msys2/mingw Yonggang Luo
2020-09-20 19:03   ` Peter Lieven
2020-09-15 17:12 ` [PATCH v10 26/26] block: enable libnfs on msys2/mingw in cirrus.yml Yonggang Luo
2020-09-16 11:52 ` [PATCH v10 00/26] W32, W64 msys2/mingw patches Thomas Huth
2020-09-16 12:04   ` 罗勇刚(Yonggang Luo)

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.