mescc: Mes C Library: Explode libc.c.
authorJan Nieuwenhuizen <janneke@gnu.org>
Thu, 16 Aug 2018 08:50:53 +0000 (10:50 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Thu, 16 Aug 2018 08:50:53 +0000 (10:50 +0200)
* lib/libc.c: New file, explode from lib/libc.c.
* lib/posix/execv.c: Likewise.
* lib/posix/isatty.c: Likewise.
* lib/posix/wait.c: Likewise.
* lib/stdio/fgetc.c: Likewise.
* lib/stdio/fputc.c: Likewise.
* lib/stdio/fputs.c: Likewise.
* lib/stdio/getc.c: Likewise.
* lib/stdio/getchar.c: Likewise.
* lib/stdio/putc.c: Likewise.
* lib/stdio/putchar.c: Likewise.
* lib/stdio/ungetc.c: Likewise.
* lib/stdlib/free.c: Likewise.
* lib/stdlib/getenv.c: Likewise.
* lib/stdlib/realloc.c: Likewise.
* lib/stdlib/setenv.c: Likewise.
* lib/string/strcmp.c: Likewise.
* lib/string/strcpy.c: Likewise.
* lib/string/strncmp.c: Likewise.
* lib/libc.c: Include explodings.

19 files changed:
lib/libc.c
lib/posix/execv.c [new file with mode: 0644]
lib/posix/isatty.c [new file with mode: 0644]
lib/posix/wait.c [new file with mode: 0644]
lib/stdio/fgetc.c [new file with mode: 0644]
lib/stdio/fputc.c [new file with mode: 0644]
lib/stdio/fputs.c [new file with mode: 0644]
lib/stdio/getc.c [new file with mode: 0644]
lib/stdio/getchar.c [new file with mode: 0644]
lib/stdio/putc.c [new file with mode: 0644]
lib/stdio/putchar.c [new file with mode: 0644]
lib/stdio/ungetc.c [new file with mode: 0644]
lib/stdlib/free.c [new file with mode: 0644]
lib/stdlib/getenv.c [new file with mode: 0644]
lib/stdlib/realloc.c [new file with mode: 0644]
lib/stdlib/setenv.c [new file with mode: 0644]
lib/string/strcmp.c [new file with mode: 0644]
lib/string/strcpy.c [new file with mode: 0644]
lib/string/strncmp.c [new file with mode: 0644]

index 45b9c190309576c5536afafdd853efb1a23958bd..1b7f0ff47d0ebc4ea9dbe2e891ad7a9b700ee294 100644 (file)
@@ -65,154 +65,24 @@ __mes_debug ()
 #include <assert/assert.c>
 #endif
 
-int
-getchar ()
-{
-  return fdgetc (g_stdin);
-}
-
-int
-putchar (int c)
-{
-  write (STDOUT, (char*)&c, 1);
-  return 0;
-}
-
-int
-fputc (int c, FILE* stream)
-{
-  return fdputc (c, (int)stream);
-}
-
-int
-fputs (char const* s, FILE* stream)
-{
-  return fdputs (s, (int)stream);
-}
-
-int
-putc (int c, FILE* stream)
-{
-  return fdputc (c, (int)stream);
-}
-
-int
-getc (FILE *stream)
-{
-  return fdgetc ((int)stream);
-}
-
-int
-fgetc (FILE *stream)
-{
-  return fdgetc ((int)stream);
-}
-
-void
-free (void *ptr)
-{
-}
-
-int
-ungetc (int c, FILE *stream)
-{
-  return fdungetc (c, (int)stream);
-}
-
-int
-strcmp (char const* a, char const* b)
-{
-  while (*a && *b && *a == *b)
-    {
-      a++;b++;
-    }
-  return *a - *b;
-}
-
-char *
-strcpy (char *dest, char const *src)
-{
-  char *p = dest;
-  while (*src) *p++ = *src++;
-  *p = 0;
-  return dest;
-}
-
-void *
-realloc (void *ptr, size_t size)
-{
-  void *new = malloc (size);
-  if (ptr && new)
-    {
-      memcpy (new, ptr, size);
-      free (ptr);
-    }
-  return new;
-}
-
-int
-strncmp (char const* a, char const* b, size_t size)
-{
-  if (!size)
-    return 0;
-  while (*a && *b && *a == *b && --size)
-    {
-      a++;
-      b++;
-    }
-  return *a - *b;
-}
-
-char *
-getenv (char const* s)
-{
-  char **p = environ;
-  int length = strlen (s);
-  while (*p)
-    {
-      if (!strncmp (s, *p, length) && *(*p + length) == '=') return (*p + length + 1);
-      p++;
-    }
-  return 0;
-}
-
-int
-setenv (char const* s, char const* v, int overwrite_p)
-{
-  char **p = environ;
-  int length = strlen (s);
-  while (*p)
-    {
-      if (!strncmp (s, *p, length) && *(*p + length) == '=')
-        break;
-      p++;
-    }
-  char *entry = malloc (length + strlen (v) + 2);
-  int end_p = *p == 0;
-  *p = entry;
-  strcpy (entry, s);
-  strcpy (entry + length, "=");
-  strcpy (entry + length + 1, v);
-  *(entry + length + strlen (v) + 2) = 0;
-  if (end_p)
-    *++p = 0;
-  return 0;
-}
-
-int
-isatty (int fd)
-{
-  return ioctl (fd, TCGETS, 0) & 0xf0;
-}
-
-int
-wait (int *status_ptr)
-{
-  return waitpid  (-1, status_ptr, 0);
-}
-
-int
-execv (char const *file_name, char *const argv[])
-{
-  return execve (file_name, argv, environ);
-}
+#include <stdio/getchar.c>
+#include <stdio/putchar.c>
+#include <stdio/fputc.c>
+#include <stdio/fputs.c>
+#include <stdio/putc.c>
+#include <stdio/getc.c>
+#include <stdio/fgetc.c>
+#include <stdio/ungetc.c>
+
+#include <string/strcmp.c>
+#include <string/strcpy.c>
+#include <string/strncmp.c>
+
+#include <stdlib/free.c>
+#include <stdlib/realloc.c>
+#include <stdlib/getenv.c>
+#include <stdlib/setenv.c>
+
+#include <posix/isatty.c>
+#include <posix/wait.c>
+#include <posix/execv.c>
diff --git a/lib/posix/execv.c b/lib/posix/execv.c
new file mode 100644 (file)
index 0000000..b5a29bf
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <unistd.h>
+
+int
+execv (char const *file_name, char *const argv[])
+{
+  return execve (file_name, argv, environ);
+}
diff --git a/lib/posix/isatty.c b/lib/posix/isatty.c
new file mode 100644 (file)
index 0000000..6ee1807
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <unistd.h>
+
+int
+isatty (int fd)
+{
+  return ioctl (fd, TCGETS, 0) & 0xf0;
+}
diff --git a/lib/posix/wait.c b/lib/posix/wait.c
new file mode 100644 (file)
index 0000000..5d1d6f4
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <sys/wait.h>
+
+int
+wait (int *status_ptr)
+{
+  return waitpid  (-1, status_ptr, 0);
+}
diff --git a/lib/stdio/fgetc.c b/lib/stdio/fgetc.c
new file mode 100644 (file)
index 0000000..83f2589
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <stdio.h>
+
+int
+fgetc (FILE *stream)
+{
+  return fdgetc ((long)stream);
+}
diff --git a/lib/stdio/fputc.c b/lib/stdio/fputc.c
new file mode 100644 (file)
index 0000000..bcadbc3
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <stdio.h>
+
+int
+fputc (int c, FILE* stream)
+{
+  return fdputc (c, (long)stream);
+}
diff --git a/lib/stdio/fputs.c b/lib/stdio/fputs.c
new file mode 100644 (file)
index 0000000..165f0d2
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <stdio.h>
+
+int
+fputs (char const* s, FILE* stream)
+{
+  return fdputs (s, (long)stream);
+}
diff --git a/lib/stdio/getc.c b/lib/stdio/getc.c
new file mode 100644 (file)
index 0000000..c32ff7a
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <stdio.h>
+
+int
+getc (FILE *stream)
+{
+  return fdgetc ((long)stream);
+}
diff --git a/lib/stdio/getchar.c b/lib/stdio/getchar.c
new file mode 100644 (file)
index 0000000..111655d
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <stdio.h>
+
+int
+getchar ()
+{
+  return fdgetc (g_stdin);
+}
diff --git a/lib/stdio/putc.c b/lib/stdio/putc.c
new file mode 100644 (file)
index 0000000..4c58576
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <stdio.h>
+
+int
+putc (int c, FILE* stream)
+{
+  return fdputc (c, (long)stream);
+}
diff --git a/lib/stdio/putchar.c b/lib/stdio/putchar.c
new file mode 100644 (file)
index 0000000..602e430
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <stdio.h>
+
+int
+putchar (int c)
+{
+  write (STDOUT, (char*)&c, 1);
+  return 0;
+}
diff --git a/lib/stdio/ungetc.c b/lib/stdio/ungetc.c
new file mode 100644 (file)
index 0000000..a107a9f
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <stdio.h>
+
+int
+ungetc (int c, FILE *stream)
+{
+  return fdungetc (c, (long)stream);
+}
diff --git a/lib/stdlib/free.c b/lib/stdlib/free.c
new file mode 100644 (file)
index 0000000..e63ac79
--- /dev/null
@@ -0,0 +1,26 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <stdlib.h>
+
+void
+free (void *ptr)
+{
+}
diff --git a/lib/stdlib/getenv.c b/lib/stdlib/getenv.c
new file mode 100644 (file)
index 0000000..fdf42f5
--- /dev/null
@@ -0,0 +1,35 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <stdlib.h>
+
+char *
+getenv (char const* s)
+{
+  char **p = environ;
+  int length = strlen (s);
+  while (*p)
+    {
+      if (!strncmp (s, *p, length) && *(*p + length) == '=')
+        return (*p + length + 1);
+      p++;
+    }
+  return 0;
+}
diff --git a/lib/stdlib/realloc.c b/lib/stdlib/realloc.c
new file mode 100644 (file)
index 0000000..e8bd20a
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <stdlib.h>
+
+void *
+realloc (void *ptr, size_t size)
+{
+  void *new = malloc (size);
+  if (ptr && new)
+    {
+      memcpy (new, ptr, size);
+      free (ptr);
+    }
+  return new;
+}
diff --git a/lib/stdlib/setenv.c b/lib/stdlib/setenv.c
new file mode 100644 (file)
index 0000000..ecaac2c
--- /dev/null
@@ -0,0 +1,44 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <stdlib.h>
+
+int
+setenv (char const* s, char const* v, int overwrite_p)
+{
+  char **p = environ;
+  int length = strlen (s);
+  while (*p)
+    {
+      if (!strncmp (s, *p, length) && *(*p + length) == '=')
+        break;
+      p++;
+    }
+  char *entry = malloc (length + strlen (v) + 2);
+  int end_p = *p == 0;
+  *p = entry;
+  strcpy (entry, s);
+  strcpy (entry + length, "=");
+  strcpy (entry + length + 1, v);
+  *(entry + length + strlen (v) + 2) = 0;
+  if (end_p)
+    *++p = 0;
+  return 0;
+}
diff --git a/lib/string/strcmp.c b/lib/string/strcmp.c
new file mode 100644 (file)
index 0000000..12e3923
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <string.h>
+
+int
+strcmp (char const* a, char const* b)
+{
+  while (*a && *b && *a == *b)
+    {
+      a++;
+      b++;
+    }
+  return *a - *b;
+}
diff --git a/lib/string/strcpy.c b/lib/string/strcpy.c
new file mode 100644 (file)
index 0000000..b0e696c
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <string.h>
+
+char *
+strcpy (char *dest, char const *src)
+{
+  char *p = dest;
+  while (*src)
+    *p++ = *src++;
+  *p = 0;
+  return dest;
+}
diff --git a/lib/string/strncmp.c b/lib/string/strncmp.c
new file mode 100644 (file)
index 0000000..81ffd10
--- /dev/null
@@ -0,0 +1,34 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2016,2017,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 <string.h>
+
+int
+strncmp (char const* a, char const* b, size_t size)
+{
+  if (!size)
+    return 0;
+  while (*a && *b && *a == *b && --size)
+    {
+      a++;
+      b++;
+    }
+  return *a - *b;
+}