diff options
| author | Ulf Hermann <[email protected]> | 2017-03-27 14:57:42 +0200 |
|---|---|---|
| committer | Ulf Hermann <[email protected]> | 2017-05-03 11:58:15 +0000 |
| commit | 5bb21b5fcd43ae929155249501bb3a58e129b64f (patch) | |
| tree | f471852817bf5367feb9b6c394f056484ce7a4c1 | |
| parent | 1844ecdb7752237df3db1f7996696c3b971485dc (diff) | |
Add sysconf replacement for win32
Change-Id: Ib99482a2aed2a27920824ee308a7cdd05f678080
Reviewed-by: Christian Kandeler <[email protected]>
| -rw-r--r-- | configure.ac | 20 | ||||
| -rw-r--r-- | libgnu/Makefile.am | 8 | ||||
| -rw-r--r-- | libgnu/sysconf_win32.c | 42 |
3 files changed, 69 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac index 6a2f991c..2d3ad041 100644 --- a/configure.ac +++ b/configure.ac @@ -557,6 +557,26 @@ if test "x$ac_cv_header_sys_mman_h" != "xyes"; then fi AM_CONDITIONAL(USE_WIN32_MMAN, [test "x$ac_cv_have_decl_MapViewOfFile" = "xyes"]) +AC_CHECK_DECLS([sysconf], [], [], [[#include <unistd.h>]]) +AM_CONDITIONAL(HAVE_SYSCONF, [test "x$ac_cv_have_decl_sysconf" = "xyes"]) +if test "x$ac_cv_have_decl_sysconf" != "xyes"; then + AC_CHECK_DECLS([GetSystemInfo], [], [], [[#include <sysinfoapi.h>]]) +fi +AM_CONDITIONAL(USE_WIN32_SYSCONF, [test "x$ac_cv_have_decl_GetSystemInfo" = "xyes"]) + +if test "x$ac_cv_have_decl_GetSystemInfo" = "xyes"; then + AC_DEFINE([USE_WIN32_SYSCONF], [1], [Use sysconf replacement for win32]) +fi + +AH_VERBATIM([USE_WIN32_SYSCONF], + [/* Define sysconf(3) here if it is not available from a system header. */ +#undef USE_WIN32_SYSCONF +#ifdef USE_WIN32_SYSCONF +#define _SC_PAGESIZE 1 +long sysconf(int name); +#endif +]) + dnl Check if we have <linux/bpf.h> for EM_BPF disassembly. AC_CHECK_HEADERS(linux/bpf.h) AM_CONDITIONAL(HAVE_LINUX_BPF_H, [test "x$ac_cv_header_linux_bpf_h" = "xyes"]) diff --git a/libgnu/Makefile.am b/libgnu/Makefile.am index 5af121af..05a8f615 100644 --- a/libgnu/Makefile.am +++ b/libgnu/Makefile.am @@ -35,7 +35,7 @@ noinst_LIBRARIES = MOSTLYCLEANFILES = MOSTLYCLEANDIRS = BUILT_SOURCES = -EXTRA_DIST = endian.in.h byteswap.in.h sys_mman.win32.h mman_win32.c +EXTRA_DIST = endian.in.h byteswap.in.h sys_mman.win32.h mman_win32.c sysconf_win32.c CLEANFILES = SUFFIXES = @@ -69,3 +69,9 @@ if USE_WIN32_MMAN libgnu_a_SOURCES += mman_win32.c endif endif + +if !HAVE_SYSCONF +if USE_WIN32_SYSCONF +libgnu_a_SOURCES += sysconf_win32.c +endif +endif diff --git a/libgnu/sysconf_win32.c b/libgnu/sysconf_win32.c new file mode 100644 index 00000000..34ddf4bc --- /dev/null +++ b/libgnu/sysconf_win32.c @@ -0,0 +1,42 @@ +/* Replacement for sysconf() on windows + Copyright (C) 2017 The Qt Company Ltd. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> +#include <sysinfoapi.h> +#include <errno.h> + +long int sysconf(int name) { + if (name == _SC_PAGESIZE) { + SYSTEM_INFO info; + GetSystemInfo(&info); + return info.dwPageSize; + } else { + errno = EINVAL; + return -1; + } +} |
