From: Jan Nieuwenhuizen <janneke-list@xs4all.nl>
To: guile-devel <guile-devel@gnu.org>
Subject: two more mingw patches: guile runs in wine
Date: Mon, 31 Jan 2011 21:49:04 +0100 [thread overview]
Message-ID: <1296506944.17905.24.camel@vuurvlieg> (raw)
[-- Attachment #1: Type: text/plain, Size: 500 bytes --]
Hi
With these two patches, Guile runs in Wine (the interactive
mode still has problems but Schikkers-List runs) and LilyPond
also starts to run.
I realise that one of these is a pure gnulib thing,
you may or may not want to include it until gnulib
includes [something like] this. At least, now you
know about it.
Greetings,
Jan.
--
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.nl
[-- Attachment #2: 0001-Add-an-implementation-of-gnulib-s-canonicalize_file_.patch --]
[-- Type: text/x-patch, Size: 2648 bytes --]
From b53c12f8f3c861824582150c1b2ec6595a6e5965 Mon Sep 17 00:00:00 2001
From: Jan Nieuwenhuizen <janneke@gnu.org>
Date: Mon, 31 Jan 2011 21:38:57 +0100
Subject: [PATCH] Add an implementation of gnulib's canonicalize_file_name for mingw.
This marked the first sensible running of guile.exe (1.9) in wine.
---
lib/canonicalize-lgpl.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 78 insertions(+), 0 deletions(-)
diff --git a/lib/canonicalize-lgpl.c b/lib/canonicalize-lgpl.c
index ec55f26..2464bad 100644
--- a/lib/canonicalize-lgpl.c
+++ b/lib/canonicalize-lgpl.c
@@ -84,6 +84,9 @@
#endif
#if !FUNC_REALPATH_WORKS || defined _LIBC
+
+#ifndef __MINGW32__
+
/* Return the canonical absolute name of file NAME. A canonical name
does not contain any `.', `..' components nor any repeated path
separators ('/') or symlinks. All path components must exist. If
@@ -342,6 +345,81 @@ error:
}
return NULL;
}
+
+#else /* __MINGW32__ */
+#include <direct.h>
+#include <windows.h>
+
+static char const*
+slashify (char const *str)
+{
+ char *p = (char*)str;
+
+ while (*p)
+ {
+ if (*p == '\\')
+ *p = '/';
+ p++;
+ }
+ return str;
+}
+
+char *
+__realpath (const char *name, char *resolved)
+{
+ char *rpath = NULL;
+
+ if (name == NULL)
+ {
+ /* As per Single Unix Specification V2 we must return an error if
+ either parameter is a null pointer. We extend this to allow
+ the RESOLVED parameter to be NULL in case the we are expected to
+ allocate the room for the return value. */
+ __set_errno (EINVAL);
+ return NULL;
+ }
+
+ if (name[0] == '\0')
+ {
+ /* As per Single Unix Specification V2 we must return an error if
+ the name argument points to an empty string. */
+ __set_errno (ENOENT);
+ return NULL;
+ }
+
+ if (resolved == NULL)
+ {
+ rpath = malloc (PATH_MAX + 1);
+ if (rpath == NULL)
+ {
+ /* It's easier to set errno to ENOMEM than to rely on the
+ 'malloc-posix' gnulib module. */
+ errno = ENOMEM;
+ return NULL;
+ }
+ }
+ else
+ rpath = resolved;
+
+ strncpy (rpath, name, PATH_MAX);
+ size_t len = strlen (name);
+ if (len > PATH_MAX)
+ len = PATH_MAX;
+ rpath[len] = '\0';
+
+ slashify (rpath);
+ struct stat st;
+ if (lstat (rpath, &st) < 0)
+ {
+ if (resolved == NULL)
+ free (rpath);
+ return NULL;
+ }
+ return rpath;
+}
+
+#endif /* __MINGW32__ */
+
versioned_symbol (libc, __realpath, realpath, GLIBC_2_3);
#endif /* !FUNC_REALPATH_WORKS || defined _LIBC */
--
1.7.1
[-- Attachment #3: 0001-For-mingw-rename-exported-readdir-et-al.-to-guile_re.patch --]
[-- Type: text/x-patch, Size: 2486 bytes --]
From 208da616f6b43e3edce869aecb8e7f03e1378cd0 Mon Sep 17 00:00:00 2001
From: Jan Nieuwenhuizen <janneke@gnu.org>
Date: Mon, 31 Jan 2011 21:43:20 +0100
Subject: [PATCH] For mingw, rename exported readdir et al. to guile_readdir, guile_*.
This fixes running LilyPond, which links to glib and guile. Glib
also exports "readdir" and it also installs the corresponding
dirent.h, with different definitions. Eg, glib's struct dirent
struct dirent
{
long d_ino; /* Always zero. */
unsigned short d_reclen; /* Always zero. */
unsigned short d_namlen; /* Length of name in d_name. */
char d_name[FILENAME_MAX]; /* File name. */
};
does not include off_t d_off.
---
libguile/filesys.c | 5 ++++-
libguile/win32-dirent.c | 4 ++--
libguile/win32-dirent.h | 8 ++++++++
3 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/libguile/filesys.c b/libguile/filesys.c
index d6251a0..0a318f0 100644
--- a/libguile/filesys.c
+++ b/libguile/filesys.c
@@ -35,6 +35,10 @@
#include <stdio.h>
#include <errno.h>
+#if defined (__MINGW32__) || defined (_MSC_VER) || defined (__BORLANDC__)
+# include "win32-dirent.h"
+#endif /* __MINGW32__ || _MSC_VER || __BORLANDC__ */
+
#include "libguile/_scm.h"
#include "libguile/smob.h"
#include "libguile/feature.h"
@@ -94,7 +98,6 @@
#if defined (__MINGW32__) || defined (_MSC_VER) || defined (__BORLANDC__)
-# include "win32-dirent.h"
# define NAMLEN(dirent) strlen((dirent)->d_name)
/* The following bits are per AC_HEADER_DIRENT doco in the autoconf manual */
#elif HAVE_DIRENT_H
diff --git a/libguile/win32-dirent.c b/libguile/win32-dirent.c
index de170c7..b5b2c60 100644
--- a/libguile/win32-dirent.c
+++ b/libguile/win32-dirent.c
@@ -20,14 +20,14 @@
# include <config.h>
#endif
+#include "win32-dirent.h"
+
#include "libguile/__scm.h"
#include <windows.h>
#include <stdio.h>
#include <string.h>
-#include "win32-dirent.h"
-
DIR *
opendir (const char * name)
{
diff --git a/libguile/win32-dirent.h b/libguile/win32-dirent.h
index 578db49..f9f8fe9 100644
--- a/libguile/win32-dirent.h
+++ b/libguile/win32-dirent.h
@@ -27,6 +27,14 @@
#include <sys/types.h>
+#define opendir guile_opendir
+#define readdir guile_readdir
+#define closedir guile_closedir
+#define rewinddir guile_rewinddir
+#define seekdir guile_seekdir
+#define telldir guile_telldir
+#define dirfd guile_dirfd
+
struct dirstream
{
int fd; /* File descriptor. */
--
1.7.1
reply other threads:[~2011-01-31 20:49 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1296506944.17905.24.camel@vuurvlieg \
--to=janneke-list@xs4all.nl \
--cc=guile-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).