mescc: Mes C Library: Support diffutils: Add execl.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 26 Aug 2018 18:54:29 +0000 (20:54 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 26 Aug 2018 18:54:29 +0000 (20:54 +0200)
* include/limits.h (CHAR_MAX): New macro.
* lib/posix/execl.c: New file.
* include/unistd.h: Declare it.

include/limits.h
include/unistd.h
lib/libc+gnu.c
lib/posix/execl.c [new file with mode: 0644]

index c4075606e16afc4a9dbdc3dca9b54673639fdf1f..5a19b10fb15a5ceced619b21dd5b53bfdd0b2b0b 100644 (file)
@@ -31,6 +31,7 @@
 
 #define CHAR_BIT 8
 #define UCHAR_MAX 255
+#define CHAR_MAX 255
 #define UINT_MAX 4294967295U
 #define INT_MIN -2147483648
 #define INT_MAX 2147483647
index 6eb7634c6fc79ea7727fdd0b9f4a375f9b0404fc..0600a6e52081f51279a7c383e8a4e600cc144aea 100644 (file)
@@ -57,6 +57,7 @@ int access (char const *s, int mode);
 unsigned int alarm (unsigned int seconds);
 int close (int fd);
 int execv (char const *file_name, char *const argv[]);
+int execl (char const *file_name, char const *arg, ...);
 int execve (char const *file, char *const argv[], char *const env[]);
 int execvp (char const *file, char *const argv[]);
 int fork (void);
index b8096adb8ff106deba63a3763b9e2713a1b81fd4..2d280bb5fb2fb625fb03feaedb51f21bb29b75d2 100644 (file)
 #include <dirent/closedir.c>
 #include <dirent/opendir.c>
 #include <dirent/readdir.c>
+
+#include <posix/execl.c>
diff --git a/lib/posix/execl.c b/lib/posix/execl.c
new file mode 100644 (file)
index 0000000..2142acd
--- /dev/null
@@ -0,0 +1,52 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+#include <unistd.h>
+
+int
+execl (char const *file_name, char const *arg, ...)
+{
+  if (__mes_debug () > 2)
+    {
+      eputs ("execl "); eputs (file_name); eputs ("\n");
+    }
+  char *argv[1000];           // POSIX minimum 4096
+  int i = 0;
+
+  va_list ap;
+  va_start (ap, arg);
+
+  argv[i++] = file_name;
+  arg = va_arg (ap, char const *);
+  while (arg)
+    {
+      argv[i++] = arg;
+      arg = va_arg (ap, char const *);
+      if (__mes_debug () > 2)
+        {
+          eputs ("arg["); eputs (itoa (i)); eputs ("]: "); eputs (argv[i-1]); eputs ("\n");
+        }
+    }
+  argv[i] = 0;
+  int r = execv (file_name, argv);
+  va_end (ap);
+  return r;
+}