[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 03/25: mingw: canonicalize-path: Also canonicalize drive
From: |
Mike Gran |
Subject: |
[Guile-commits] 03/25: mingw: canonicalize-path: Also canonicalize drive letter and '/'. |
Date: |
Thu, 10 Nov 2022 18:06:16 -0500 (EST) |
mike121 pushed a commit to branch wip-mingw
in repository guile.
commit 2d82b49cf38cbf5a6a2ce934852649d10e9e6a84
Author: Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
AuthorDate: Sun Dec 12 15:48:18 2021 +0100
mingw: canonicalize-path: Also canonicalize drive letter and '/'.
* libguile/posix-w32.c (canonicalize_device_name,
slashify_file_name): New static functions.
(canonicalize_file_name_mingw): Use them in new function.
* libguile/posix-w32.h (canonicalize_file_name_mingw): Declare it.
(canonicalize_file_name): New define.
* libguile/filesys.c[__MINGW32__]: Include posix-w32.h to use it.
* libguile/fports.c[__MINGW32__]: Likewise.
---
libguile/filesys.c | 3 +++
libguile/fports.c | 3 +++
libguile/posix-w32.c | 40 ++++++++++++++++++++++++++++++++++++++++
libguile/posix-w32.h | 3 +++
4 files changed, 49 insertions(+)
diff --git a/libguile/filesys.c b/libguile/filesys.c
index 1f0bba556..3400585a6 100644
--- a/libguile/filesys.c
+++ b/libguile/filesys.c
@@ -83,6 +83,9 @@
#include "ports-internal.h"
#include "ports.h"
#include "posix.h"
+#if __MINGW32__
+#include "posix-w32.h"
+#endif
#include "smob.h"
#include "srfi-13.h"
#include "strings.h"
diff --git a/libguile/fports.c b/libguile/fports.c
index 9d4ca6ace..f0224d99f 100644
--- a/libguile/fports.c
+++ b/libguile/fports.c
@@ -59,6 +59,9 @@
#include "pairs.h"
#include "ports-internal.h"
#include "posix.h"
+#if __MINGW32__
+#include "posix-w32.h"
+#endif
#include "read.h"
#include "strings.h"
#include "symbols.h"
diff --git a/libguile/posix-w32.c b/libguile/posix-w32.c
index f11c52673..44f033da1 100644
--- a/libguile/posix-w32.c
+++ b/libguile/posix-w32.c
@@ -24,6 +24,7 @@
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <c-strcase.h>
+#include <ctype.h>
#include <process.h>
#include <stdio.h>
#include <stdlib.h>
@@ -34,6 +35,7 @@
#include <fcntl.h>
#include "gc.h" /* for scm_*alloc, scm_strdup */
+#include "filename.h"
#include "threads.h" /* for scm_i_scm_pthread_mutex_lock */
#include "posix-w32.h"
@@ -1256,3 +1258,41 @@ dlerror_w32 ()
snprintf (dlerror_str, DLERROR_LEN, "error %ld: %s", (long) dw, msg_buf);
return dlerror_str;
}
+
+/* Use upcase drive letter in NAME. */
+static char *
+canonicalize_device_name (char *name)
+{
+ if (name == NULL)
+ return name;
+
+ if (HAS_DEVICE (name))
+ name[0] = toupper (name[0]);
+
+ return name;
+}
+
+/* Replace any use of '\\' by '/' in NAME. */
+static char *
+slashify_file_name (char *name)
+{
+ if (name == NULL)
+ return name;
+
+ for (char *p = name; *p; p++)
+ if (ISSLASH (*p))
+ *p = '/';
+ return name;
+}
+
+#undef canonicalize_file_name
+
+/* Also canonicalize use of drive letter and '/' for NAME. */
+char *
+canonicalize_file_name_mingw (const char *name)
+{
+ char *canon = canonicalize_file_name (name);
+ canonicalize_device_name (canon);
+ slashify_file_name (canon);
+ return canon;
+}
diff --git a/libguile/posix-w32.h b/libguile/posix-w32.h
index 7e4b3e0ba..f97e7f7ed 100644
--- a/libguile/posix-w32.h
+++ b/libguile/posix-w32.h
@@ -110,4 +110,7 @@ SCM_INTERNAL char *dlerror_w32 (void);
#define RTLD_GLOBAL 4
#define RTLD_LOCAL 8
+#define canonicalize_file_name canonicalize_file_name_mingw
+char *canonicalize_file_name_mingw (const char *name);
+
#endif /* SCM_POSIX_W32_H */
- [Guile-commits] branch wip-mingw updated (de06bc7bd -> 3c9052b26), Mike Gran, 2022/11/10
- [Guile-commits] 01/25: gnulib: Import the gethostname module., Mike Gran, 2022/11/10
- [Guile-commits] 08/25: squash! Fix 'absolute-file-name?' and others for cross-build to MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 10/25: Install 'mingw_take_signal' on MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 21/25: Revert "squash! Fix 'absolute-file-name?' and others for cross-build to MinGW.", Mike Gran, 2022/11/10
- [Guile-commits] 23/25: fixes for chmodat test, Mike Gran, 2022/11/10
- [Guile-commits] 06/25: Clear errno before CreateProcess for MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 04/25: Add 'set-port-binary/text-mode!' procedure for MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 03/25: mingw: canonicalize-path: Also canonicalize drive letter and '/'.,
Mike Gran <=
- [Guile-commits] 02/25: Link fix for MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 09/25: Make `read-bytes' suspendable for socket reads on MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 11/25: Add `scm_sigaction_for_thread' stub for MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 12/25: DRAFT Add partial `scm_fcntl' support for MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 14/25: REMOVEME mingw: Hardcode compile-time-file-name-convention to 'mingw., Mike Gran, 2022/11/10
- [Guile-commits] 15/25: REMOVEME guix: guile-mingw: Hardcode file-name-convention., Mike Gran, 2022/11/10
- [Guile-commits] 16/25: DEBUG guile.cmd, wine-guile.sh: Some Wine help., Mike Gran, 2022/11/10
- [Guile-commits] 05/25: Support for x86_64-w64-mingw32., Mike Gran, 2022/11/10
- [Guile-commits] 07/25: Fix 'absolute-file-name?' and others for cross-build to MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 13/25: guix: Add guile-patched, guile-mingw., Mike Gran, 2022/11/10