sysemu/os-win32: Test for and use _lock_file/_unlock_file
The bug referenced in os-win32.h was fixed in mingw-w64 v6. According to repology, version 5 used by ubuntu 18, which is not yet out of support, so provide a meson link test for it. Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20220417183019.755276-27-richard.henderson@linaro.org>
This commit is contained in:
parent
7fc493f8bd
commit
6391c772d7
@ -109,20 +109,22 @@ static inline char *realpath(const char *path, char *resolved_path)
|
||||
return resolved_path;
|
||||
}
|
||||
|
||||
/* ??? Mingw appears to export _lock_file and _unlock_file as the functions
|
||||
* with which to lock a stdio handle. But something is wrong in the markup,
|
||||
* either in the header or the library, such that we get undefined references
|
||||
* to "_imp___lock_file" etc when linking. Since we seem to have no other
|
||||
* alternative, and the usage within the logging functions isn't critical,
|
||||
* ignore FILE locking.
|
||||
/*
|
||||
* Older versions of MinGW do not import _lock_file and _unlock_file properly.
|
||||
* This was fixed for v6.0.0 with commit b48e3ac8969d.
|
||||
*/
|
||||
|
||||
static inline void qemu_flockfile(FILE *f)
|
||||
{
|
||||
#ifdef HAVE__LOCK_FILE
|
||||
_lock_file(f);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void qemu_funlockfile(FILE *f)
|
||||
{
|
||||
#ifdef HAVE__LOCK_FILE
|
||||
_unlock_file(f);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* We wrap all the sockets functions so that we can
|
||||
|
12
meson.build
12
meson.build
@ -2030,6 +2030,18 @@ foreach k, v: config_host
|
||||
endif
|
||||
endforeach
|
||||
|
||||
# Older versions of MinGW do not import _lock_file and _unlock_file properly.
|
||||
# This was fixed for v6.0.0 with commit b48e3ac8969d.
|
||||
if targetos == 'windows'
|
||||
config_host_data.set('HAVE__LOCK_FILE', cc.links('''
|
||||
#include <stdio.h>
|
||||
int main(void) {
|
||||
_lock_file(NULL);
|
||||
_unlock_file(NULL);
|
||||
return 0;
|
||||
}''', name: '_lock_file and _unlock_file'))
|
||||
endif
|
||||
|
||||
########################
|
||||
# Target configuration #
|
||||
########################
|
||||
|
Loading…
Reference in New Issue
Block a user