mescc: Mes C Library: Support make: Add chdir, getlogin, setvbuf, sigblock.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 26 Aug 2018 20:41:52 +0000 (22:41 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 26 Aug 2018 20:41:52 +0000 (22:41 +0200)
* lib/stub/getlogin.c: New file.
* lib/stub/setvbuf.c: New file.
* lib/stub/sigblock.c: New file.
* lib/libc+gnu.c: Include them.
* include/linux/x86/syscall.h (SYS_chdir): New macro.
* include/linux/x86_64/syscall.h (SYS_chdir): New macro.
* include/stdio.h (_IOFBF, _IOLBF, _IONBF): New macro.
* include/errno.h (ENOEXEC, ECHILD): New macro.
* include/sys/wait.h (WNOHANG): New macro.
* lib/linux/gnu.c (chdir): New function.
* include/ar.h: New file.

12 files changed:
include/ar.h [new file with mode: 0644]
include/errno.h
include/linux/x86/syscall.h
include/linux/x86_64/syscall.h
include/stdio.h
include/string.h
include/sys/wait.h
lib/libc+gnu.c
lib/linux/gnu.c
lib/stub/getlogin.c [new file with mode: 0644]
lib/stub/setvbuf.c [new file with mode: 0644]
lib/stub/sigblock.c [new file with mode: 0644]

diff --git a/include/ar.h b/include/ar.h
new file mode 100644 (file)
index 0000000..bcefb3d
--- /dev/null
@@ -0,0 +1,56 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright (C) 1996 Free Software Foundation, Inc.
+ * 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/>.
+ */
+#ifndef __MES_AR_H
+#define __MES_AR_H 1
+
+#if WITH_GLIBC
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#undef __MES_AR_H
+#include_next <ar.h>
+
+#else // ! WITH_GLIBC
+
+// Taken from GNU C Library 2.2.5
+
+/* Archive files start with the ARMAG identifying string.  Then follows a
+   `struct ar_hdr', and as many bytes of member file data as its `ar_size'
+   member indicates, for each member file.  */
+
+#define ARMAG  "!<arch>\n"     /* String that begins an archive file.  */
+#define SARMAG 8               /* Size of that string.  */
+
+#define ARFMAG "`\n"           /* String in ar_fmag at end of each header.  */
+
+struct ar_hdr
+  {
+    char ar_name[16];          /* Member file name, sometimes / terminated. */
+    char ar_date[12];          /* File date, decimal seconds since Epoch.  */
+    char ar_uid[6], ar_gid[6]; /* User and group IDs, in ASCII decimal.  */
+    char ar_mode[8];           /* File mode, in ASCII octal.  */
+    char ar_size[10];          /* File size, in ASCII decimal.  */
+    char ar_fmag[2];           /* Always contains ARFMAG.  */
+  };
+
+#endif // ! WITH_GLIBC
+
+#endif // __MES_ARGZ_H
index c145378525b37929c346ff12ecc3255739bdbb54..fe3c78c27dd40942c15cf1a2b06c303747f03be3 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * GNU Mes --- Maxwell Equations of Software
- * Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
  *
  * This file is part of GNU Mes.
  *
@@ -39,7 +39,9 @@ int errno;
 #define EINTR    4
 #define EIO      5
 #define E2BIG    7
+#define        ENOEXEC  8
 #define EBADF    9
+#define        ECHILD  10
 #define EAGAIN  11
 #define ENOMEM  12
 #define EEXIST  17
index e9fc52dc338477a0abcda01380fa5ff400289a81..fb4cd9cf1fb13d0024674482cdf69ab8c5ae1d52 100644 (file)
@@ -46,6 +46,7 @@
 #define SYS_getcwd 0xb7
 
 // libc+gnu
+#define SYS_chdir     0x0c
 #define SYS_link      0x09
 #define SYS_getpid    0x14
 #define SYS_getuid    0x18
index be5f23a9734357990d53a10fc63d747ac35ca980..110218260ed619a2520a09cc7258f05c7d980e7d 100644 (file)
@@ -46,6 +46,7 @@
 #define SYS_getcwd 0x4f
 
 // libc+gnu
+#define SYS_chdir     0x50
 #define SYS_link      0x56
 #define SYS_getpid    0x27
 #define SYS_getuid    0x66
index 1000184599ac04de45f97797837d59e7c3513903..36b336720e198848b4a2b7d87ca8bfa27346a9c5 100644 (file)
@@ -45,6 +45,12 @@ int g_stdout;
 
 #else // ! WITH_GLIBC
 
+#ifndef _IOFBF
+#define _IOFBF 0 /* Fully buffered.  */
+#define _IOLBF 1 /* Line buffered.  */
+#define _IONBF 2 /* No buffering.  */
+#endif
+
 #ifndef BUFSIZ
 #define BUFSIZ 256
 #endif
@@ -80,11 +86,13 @@ int fputs (char const* s, FILE *stream);
 int fseek (FILE *stream, long offset, int whence);
 int getc (FILE *stream);
 int getchar (void);
+char *getlogin (void);
 int printf (char const* format, ...);
 int putc (int c, FILE* stream);
 int putchar (int c);
 int puts (char const* s);
 int remove (char const *file_name);
+int setvbuf (FILE *stream, char *buf, int mode, size_t size);
 int snprintf(char *str,  size_t size,  char const *format, ...);
 int sprintf (char *str, char const* format, ...);
 int sscanf (char const *str, const char *format, ...);
index bf34011d0d6a50c4cd08160332542e43feba63b7..450c623549fb0ce5b99125369a93f367ac315cf7 100644 (file)
@@ -58,7 +58,6 @@ int strcmp (char const*, char const*);
 char *strcpy (char *dest, char const *src);
 size_t strlen (char const*);
 char *strncpy (char *to, char const *from, size_t size);
-int strncasecmp (char const *s1, char const *s2, size_t size);
 int strncmp (char const*, char const*, size_t);
 char *strrchr (char const *s, int c);
 char *strstr (char const *haystack, char const *needle);
index b809ca77d2dd746abc307a5b7b06861949bc34c8..73f7035ac7adf22c62788bbd86ae4224e0d19644 100644 (file)
@@ -30,6 +30,8 @@
 typedef int pid_t;
 #endif
 
+#define        WNOHANG 1
+
 pid_t waitpid (pid_t pid, int *status_ptr, int options);
 pid_t wait (int *status_ptr);
 
index 2d280bb5fb2fb625fb03feaedb51f21bb29b75d2..9fb900180c59cb6bbad607939f835d3557d511c2 100644 (file)
 #include <dirent/opendir.c>
 #include <dirent/readdir.c>
 
+// diffutils
 #include <posix/execl.c>
+
+// make
+#include <stub/getlogin.c>
+#include <stub/setvbuf.c>
+#include <stub/sigblock.c>
index 5fc30f9661c81bfb15d4369ea8e5dc8df57bf9b9..16237c502f7ae0ce2b7068c97ef5e5a69cc6820e 100644 (file)
 
 #include <sys/resource.h>
 
+int
+chdir (char const *file_name)
+{
+  return _sys_call1 (SYS_chdir, (long)file_name);
+}
+
 int
 link (char const *old_name, char const *new_name)
 {
diff --git a/lib/stub/getlogin.c b/lib/stub/getlogin.c
new file mode 100644 (file)
index 0000000..725929f
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-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>
+
+char *
+getlogin (void)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("getlogin stub\n");
+  stub = 1;
+  errno = 0;
+  return 0;
+}
diff --git a/lib/stub/setvbuf.c b/lib/stub/setvbuf.c
new file mode 100644 (file)
index 0000000..1abe663
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-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 <stdio.h>
+
+int
+setvbuf (FILE *stream, char *buf, int mode, size_t size)
+{
+  static int stub = 0;
+  if (__mes_debug () && !stub)
+    eputs ("setvbuf stub\n");
+  stub = 1;
+  return 0;
+}
diff --git a/lib/stub/sigblock.c b/lib/stub/sigblock.c
new file mode 100644 (file)
index 0000000..766b1c8
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-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 <signal.h>
+
+int
+sigblock (int mask)
+{
+  return 0;
+}