mescc: Mes C Library: Use mes_open to avoid open trickery.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 12 May 2019 22:40:33 +0000 (00:40 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 12 May 2019 22:40:33 +0000 (00:40 +0200)
* include/mes/lib.h (mes_open): Declare.
* lib/libmes.c[WITH_GLIBC]: Remove open undefine.
(mes_open)[!WITH_GLIBC]: New function.
* src/mes.c (open_boot): Use mes_open.
* src/posix.c (open_input_file): Likewise.
(open_output_file): Likewise.

include/mes/lib.h
lib/libmes.c
src/mes.c
src/posix.c

index 71fb8a17dcb907054ab84a53c02e3be386344684..91b39783e7a99168c85ebf728f9ed87c91e88d2b 100644 (file)
 
 #include <mes/lib-mini.h>
 
-#if WITH_GLIBC
-int mes_open (char const *file_name, int flags, ...);
-#define open mes_open
-#endif
-
 int __mes_debug ();
 void __ungetc_init ();
 void __ungetc_clear (int filedes);
@@ -50,8 +45,9 @@ int _fdungetc_p (int fd);
 int isdigit (int c);
 int isspace (int c);
 int isxdigit (int c);
-int _open3 (char const *file_name, int flags, int mask);
+int mes_open (char const *file_name, int flags, int mask);
 int _open2 (char const *file_name, int flags);
+int _open3 (char const *file_name, int flags, int mask);
 int oputc (int c);
 int oputs (char const* s);
 char *search_path (char const *file_name);
index d002fa16c0fb42a13c9e58cfafdd5d9f6d09bce1..d7bdac91f7545079fa2cdfc75e6203a7775dd21a 100644 (file)
@@ -42,7 +42,6 @@
 #include <mes/fdungetc.c>
 
 #if WITH_GLIBC
-#undef open
 #include <fcntl.h>
 #include <stdarg.h>
 // The Mes C Library defines and initializes these in crt1
@@ -51,22 +50,27 @@ int __stdout = STDOUT;
 int __stderr = STDERR;
 
 int
-mes_open (char const *file_name, int flags, ...)
+mes_open (char const *file_name, int flags, int mask)
 {
-  va_list ap;
-  va_start (ap, flags);
-  int mask = va_arg (ap, int);
   __ungetc_init ();
   int r = open (file_name, flags, mask);
   if (r > 2)
     __ungetc_buf[r] = -1;
-  va_end (ap);
   return r;
  }
 
 #include <mes/eputs.c>
 #include <mes/oputs.c>
-#endif // WITH_GLIBC
+
+#else // !WITH_GLIBC
+
+int
+mes_open (char const *file_name, int flags, int mask)
+{
+  return _open3 (file_name, flags, mask);
+}
+
+#endif // !WITH_GLIBC
 
 #include <mes/eputc.c>
 #include <mes/oputc.c>
index 52cd853199a0f73ff0ef377c12776a4bab396026..1a9724fde37a655662cc7610fcc9ae716dcac8e9 100644 (file)
--- a/src/mes.c
+++ b/src/mes.c
@@ -2192,7 +2192,7 @@ open_boot (char *prefix, char const *boot, char const *location)
       eputs (prefix);
       eputs ("\n");
     }
-  int fd = open (prefix, O_RDONLY);
+  int fd = mes_open (prefix, O_RDONLY, 0);
   if (g_debug && fd > 0)
     {
       eputs ("mes: read boot-0: ");
index 4935553d4949113e52108eb340dcbff59f862acf..3470e83271f5f03c9cbba01c6f147171ef7de21c 100644 (file)
@@ -186,7 +186,7 @@ current_input_port ()
 SCM
 open_input_file (SCM file_name)
 {
-  return MAKE_NUMBER (open (CSTRING (file_name), O_RDONLY));
+  return MAKE_NUMBER (mes_open (CSTRING (file_name), O_RDONLY, 0));
 }
 
 SCM
@@ -228,7 +228,7 @@ open_output_file (SCM x) ///((arity . n))
   int mode = S_IRUSR|S_IWUSR;
   if (TYPE (x) == TPAIR && TYPE (car (x)) == TNUMBER)
     mode = VALUE (car (x));
-  return MAKE_NUMBER (open (CSTRING (file_name), O_WRONLY|O_CREAT|O_TRUNC,mode));
+  return MAKE_NUMBER (mes_open (CSTRING (file_name), O_WRONLY|O_CREAT|O_TRUNC, mode));
 }
 
 SCM