guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 03/16: mingw: canonicalize-path: Also canonicalize drive


From: Jan Nieuwenhuizen
Subject: [Guile-commits] 03/16: mingw: canonicalize-path: Also canonicalize drive letter and '/'.
Date: Wed, 11 May 2022 11:52:23 -0400 (EDT)

janneke pushed a commit to branch wip-mingw
in repository guile.

commit 807e4a50777dd683a4e12fb60eb394aba5b60d49
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 6247734e8..c0e5babd4 100644
--- a/libguile/filesys.c
+++ b/libguile/filesys.c
@@ -95,6 +95,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 4a3c30b88..343c4230d 100644
--- a/libguile/fports.c
+++ b/libguile/fports.c
@@ -62,6 +62,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 */



reply via email to

[Prev in Thread] Current Thread [Next in Thread]