Module: wine Branch: master Commit: 69f1b12a30bbf28e750206f0ec1ab2c6320abcbd URL: https://source.winehq.org/git/wine.git/?a=commit;h=69f1b12a30bbf28e750206f0e...
Author: Evgeny Litvinenko evgeny.v.litvinenko@gmail.com Date: Thu Jul 9 03:09:41 2020 +0300
ntdll: Add check for totalram, mem_unit in struct sysinfo.
Signed-off-by: Evgeny Litvinenko evgeny.v.litvinenko@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
configure | 26 ++++++++++++++++++++++++++ configure.ac | 6 ++++++ dlls/ntdll/unix/virtual.c | 23 +++++++++++++++-------- include/config.h.in | 6 ++++++ 4 files changed, 53 insertions(+), 8 deletions(-)
diff --git a/configure b/configure index bed9eab367..244b66545e 100755 --- a/configure +++ b/configure @@ -19643,6 +19643,32 @@ _ACEOF fi
+ac_fn_c_check_member "$LINENO" "struct sysinfo" "totalram" "ac_cv_member_struct_sysinfo_totalram" "#ifdef HAVE_SYS_SYSINFO_H +# include <sys/sysinfo.h> +#endif +" +if test "x$ac_cv_member_struct_sysinfo_totalram" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_SYSINFO_TOTALRAM 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct sysinfo" "mem_unit" "ac_cv_member_struct_sysinfo_mem_unit" "#ifdef HAVE_SYS_SYSINFO_H +# include <sys/sysinfo.h> +#endif +" +if test "x$ac_cv_member_struct_sysinfo_mem_unit" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_SYSINFO_MEM_UNIT 1 +_ACEOF + + +fi + + ac_save_LIBS="$LIBS" LIBS="$LIBS -lm" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isfinite" >&5 diff --git a/configure.ac b/configure.ac index 29ff38f169..47d0471169 100644 --- a/configure.ac +++ b/configure.ac @@ -2658,6 +2658,12 @@ AC_CHECK_MEMBERS([struct ifreq.ifr_hwaddr],,, # include <net/if.h> #endif])
+dnl Check for struct sysinfo members totalram and mem_unit +AC_CHECK_MEMBERS([struct sysinfo.totalram, struct sysinfo.mem_unit],,, +[#ifdef HAVE_SYS_SYSINFO_H +# include <sys/sysinfo.h> +#endif]) + dnl Check for isfinite ac_save_LIBS="$LIBS" LIBS="$LIBS -lm" diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c index 9b1ca761e9..a2fea58883 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c @@ -43,6 +43,9 @@ #ifdef HAVE_SYS_SYSINFO_H # include <sys/sysinfo.h> #endif +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif #ifdef HAVE_VALGRIND_VALGRIND_H # include <valgrind/valgrind.h> #endif @@ -2481,22 +2484,26 @@ ULONG_PTR get_system_affinity_mask(void) */ void virtual_get_system_info( SYSTEM_BASIC_INFORMATION *info ) { -#ifdef HAVE_SYSINFO +#if defined(HAVE_STRUCT_SYSINFO_TOTALRAM) && defined(HAVE_STRUCT_SYSINFO_MEM_UNIT) struct sysinfo sinfo; -#endif
- info->unknown = 0; - info->KeMaximumIncrement = 0; /* FIXME */ - info->PageSize = page_size; - info->MmLowestPhysicalPage = 1; - info->MmHighestPhysicalPage = 0x7fffffff / page_size; -#ifdef HAVE_SYSINFO if (!sysinfo(&sinfo)) { ULONG64 total = (ULONG64)sinfo.totalram * sinfo.mem_unit; info->MmHighestPhysicalPage = max(1, total / page_size); } +#elif defined(_SC_PHYS_PAGES) + LONG64 phys_pages = sysconf( _SC_PHYS_PAGES ); + + info->MmHighestPhysicalPage = max(1, phys_pages); +#else + info->MmHighestPhysicalPage = 0x7fffffff / page_size; #endif + + info->unknown = 0; + info->KeMaximumIncrement = 0; /* FIXME */ + info->PageSize = page_size; + info->MmLowestPhysicalPage = 1; info->MmNumberOfPhysicalPages = info->MmHighestPhysicalPage - info->MmLowestPhysicalPage; info->AllocationGranularity = granularity_mask + 1; info->LowestUserAddress = (void *)0x10000; diff --git a/include/config.h.in b/include/config.h.in index 4d479a6cb3..fc9305418c 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -950,6 +950,12 @@ /* Define to 1 if `__st_birthtime' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT___ST_BIRTHTIME
+/* Define to 1 if `mem_unit' is a member of `struct sysinfo'. */ +#undef HAVE_STRUCT_SYSINFO_MEM_UNIT + +/* Define to 1 if `totalram' is a member of `struct sysinfo'. */ +#undef HAVE_STRUCT_SYSINFO_TOTALRAM + /* Define to 1 if `tcps_connattempt' is a member of `struct tcpstat'. */ #undef HAVE_STRUCT_TCPSTAT_TCPS_CONNATTEMPT