mike121 pushed a commit to branch main
in repository guile.

commit 0e20c0c8c66cd99df830edb0dce80eea2415e58f
Author: Michael Gran <spk...@yahoo.com>
AuthorDate: Tue Jun 20 15:21:10 2023 -0700

    Add replacement for missing getpagesize() on MINGW
    
    * libguile/posix-w32.c (getpagesize_w32): new procedure
    * libguile/posix-w32.h: declaration of getpagesize_w32
    * libguile/loader.c [__MINGW32__](scm_bootstrap_loader): use new procedure
    * libguile/vm.c [__MINGW32__](scm_i_vm_prepare_stack): use new procedure
---
 libguile/loader.c    | 7 +++++++
 libguile/posix-w32.c | 5 +++++
 libguile/posix-w32.h | 1 +
 libguile/vm.c        | 8 ++++++++
 4 files changed, 21 insertions(+)

diff --git a/libguile/loader.c b/libguile/loader.c
index ae4e1e368..2bd66d924 100644
--- a/libguile/loader.c
+++ b/libguile/loader.c
@@ -52,6 +52,9 @@
 
 #include "loader.h"
 
+#ifdef __MINGW32__
+#include "posix-w32.h"
+#endif
 
 /* This file contains the loader for Guile's on-disk format: ELF with
    some custom tags in the dynamic segment.  */
@@ -822,7 +825,11 @@ scm_find_slot_map_unlocked (const uint32_t *ip)
 void
 scm_bootstrap_loader (void)
 {
+#ifndef __MINGW32__
   page_size = getpagesize ();
+#else
+  page_size = getpagesize_w32 ();
+#endif
   /* page_size should be a power of two.  */
   if (page_size & (page_size - 1))
     abort ();
diff --git a/libguile/posix-w32.c b/libguile/posix-w32.c
index f11c52673..bf654b593 100644
--- a/libguile/posix-w32.c
+++ b/libguile/posix-w32.c
@@ -1256,3 +1256,8 @@ dlerror_w32 ()
     snprintf (dlerror_str, DLERROR_LEN, "error %ld: %s", (long) dw, msg_buf);
   return dlerror_str;
 }
+int
+getpagesize_w32 (void)
+{
+  return 4 * 1024;
+}
diff --git a/libguile/posix-w32.h b/libguile/posix-w32.h
index 7e4b3e0ba..147174420 100644
--- a/libguile/posix-w32.h
+++ b/libguile/posix-w32.h
@@ -95,6 +95,7 @@ SCM_INTERNAL void *dlopen_w32 (const char *name, int flags);
 SCM_INTERNAL void *dlsym_w32 (void *handle, const char *name);
 SCM_INTERNAL int dlclose_w32 (void *handle);
 SCM_INTERNAL char *dlerror_w32 (void);
+SCM_INTERNAL int getpagesize_w32 (void);
 
 #define HAVE_UNAME 1
 #define HAVE_WAITPID 1
diff --git a/libguile/vm.c b/libguile/vm.c
index 36138f0d5..6dc05e883 100644
--- a/libguile/vm.c
+++ b/libguile/vm.c
@@ -72,6 +72,10 @@
 #include "version.h"
 #include "vm-builtins.h"
 
+#ifdef __MINGW32__
+#include "posix-w32.h"
+#endif
+
 #include "vm.h"
 
 #include <gc/gc_mark.h>
@@ -604,7 +608,11 @@ scm_i_vm_prepare_stack (struct scm_vm *vp)
      Guile.  */
   if (page_size == 0)
     {
+#ifndef __MINGW32__
       page_size = getpagesize ();
+#else
+      page_size = getpagesize_w32 ();
+#endif
       /* page_size should be a power of two.  */
       if (page_size & (page_size - 1))
         abort ();

Reply via email to