mescc: Tinycc support: strncpy.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 20 May 2018 08:55:44 +0000 (10:55 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 20 May 2018 08:55:44 +0000 (10:55 +0200)
* lib/libc+tcc.c (strncpy): New function.
* scaffold/tests/86-strncpy.c: Test it.
* build-aux/check-mescc.sh (tests): Run it.
* build-aux/cc-mlibc.sh (LIBC): Acknowlegde.
* build-aux/test.sh (LIBC): Export it.

build-aux/cc-mlibc.sh
build-aux/test.sh
lib/libc+tcc.c
scaffold/tests/51-strcmp.c
scaffold/tests/86-strncpy.c [new file with mode: 0644]

index e5bd8dd5d1b88ff6654b8ebeadc621761a37b65a..4c8190f1aeb12be0e855a490b5f11276168b1f59 100755 (executable)
@@ -39,6 +39,7 @@ C32FLAGS=${C32FLAGS-"
 -nostdinc
 -nostdlib
 "}
+LIBC=${LIBC-lib/libc}
 
 c=$1
 
@@ -55,5 +56,5 @@ if [ -z "$NOLINK" ]; then
         -o "$c".mlibc-out\
         lib/crt1.mlibc-o\
         "$c".mlibc-o\
-        lib/libc-gcc.mlibc-o
+        $LIBC-gcc.mlibc-o
 fi
index af8bc4913bde3236a40cc60edb98d4f83f66245f..5908f7bc16ce461eba6f804041b68fbff742c087 100755 (executable)
@@ -20,6 +20,8 @@
 
 set -x
 
+export LIBC
+
 GUILE=${GUILE-$MES}
 DIFF=${DIFF-$(command -v diff)}
 [ -z "$DIFF" ] && DIFF="sh scripts/diff.scm"
index 73824a9a8f23e47b569eed99c1035a8853099e54..bf0d04990ad2311a7ecebbd78929b1bf47d246de 100644 (file)
@@ -271,6 +271,19 @@ strchr (char const *s, int c)
   return 0;
 }
 
+char *
+strncpy (char *dest, char const *src, size_t length)
+{
+  char *p = dest;
+  while (*src && length--)
+    *p++ = *src++;
+  if (*src)
+    length++;
+  while (length--)
+    *p++ = 0;
+  return dest;
+}
+
 char *
 strrchr (char const *s, int c)
 {
index 5479b748d1a129fa8e2ecd0c7d2c88726948ddc7..3ab20d30a0b1597db2b2009c17da56201d861f3e 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * 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 Mes.
  *
@@ -30,32 +30,47 @@ test ()
 
   puts ("\n");
   puts ("t: if (strcmp (p, \"foo\"))\n");
-  if (!strcmp (p, "foo")) return 1;
+  if (!strcmp (p, "foo"))
+    return 1;
 
   puts ("t: if (strcmp (p, \"t.c\\n\"))\n");
-  if (strcmp (p, "mes")) return 1;
+  if (strcmp (p, "mes"))
+    return 2;
 
   puts ("t: if (!strcmp (p, \"t.c\\n\"))\n");
   if (!strcmp (p, "mes")) goto ok1;
-  return 1;
+  return 3;
  ok1:
 
   puts ("t: if (strcmp (p, \"foo\"))\n");
   if (strcmp (p, "foo")) goto ok2;
-  return 1;
+  return 4;
  ok2:
 
   puts ("t: itoa (33) == \"33\"\n");
-  if (strcmp (itoa (33), "33")) return 1;
+  if (strcmp (itoa (33), "33"))
+    return 5;
 
   puts ("strcmp (itoa (-1), \"-1\")\n");
-  if (strcmp (itoa (-1), "-1")) return 1;
+  if (strcmp (itoa (-1), "-1"))
+    return 6;
 
   puts ("strcmp (itoa (0), \"0\")\n");
-  if (strcmp (itoa (0), "0")) return 1;
+  if (strcmp (itoa (0), "0"))
+    return 7;
 
   puts ("strcmp (itoa (1), \"1\")\n");
-  if (strcmp (itoa (1), "1")) return 1;
+  if (strcmp (itoa (1), "1"))
+    return 8;
+
+  if (strncmp ("abc", "a", 1))
+    return 9;
+
+  if (!strncmp ("abc", "x", 1))
+    return 10;
+
+  if (!strncmp ("abc", "", 0))
+    return 11;
 
   return 0;
 }
diff --git a/scaffold/tests/86-strncpy.c b/scaffold/tests/86-strncpy.c
new file mode 100644 (file)
index 0000000..7a09f14
--- /dev/null
@@ -0,0 +1,42 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * 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.
+ *
+ * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "30-test.i"
+#include <stdio.h>
+#include <string.h>
+
+int
+test ()
+{
+  puts ("\n");
+  char buf[10] = {0,0,0,0,0,0,0,0,0,0};
+  strncpy (buf, "mesxxx", 3);
+  puts ("buf:");
+  puts (buf);
+  puts ("\n");
+  if (strncmp (buf, "mes", 3))
+    return 1;
+
+  strncpy (buf, "m", 4);
+  if (buf[3])
+    return 2;
+
+  return 0;
+}