mescc: Add fopen test.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sat, 16 Jun 2018 13:18:27 +0000 (15:18 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sat, 16 Jun 2018 13:18:27 +0000 (15:18 +0200)
* scaffold/tests/97-fopen.c: New file.
* build-aux/check-mescc.sh (tests): Run it.
* include/unistd.h (link): Declare.

build-aux/check-mescc.sh
include/unistd.h
scaffold/tests/97-fopen.c [new file with mode: 0644]

index e23ce51135dbed9ff8fc7e51984dfc417311b835..d4754fc8c1fe4089bd07dc6d9e38f89b8055dd39 100755 (executable)
@@ -141,6 +141,7 @@ t
 94-unsetenv
 95-signal
 96-strto
 94-unsetenv
 95-signal
 96-strto
+97-fopen
 "
 
 # 90: needs GNU, fails for mescc, passes for tcc
 "
 
 # 90: needs GNU, fails for mescc, passes for tcc
index 26632a2b3f7d3f033ce43bc3d0836987b47455ae..3db8dde975f826ce95ae263cae7eeb39019ef051 100644 (file)
@@ -97,6 +97,7 @@ int execvp (char const *file, char *const argv[]);
 int fork ();
 char *getcwd (char *buf, size_t size);
 int isatty (int fd);
 int fork ();
 char *getcwd (char *buf, size_t size);
 int isatty (int fd);
+int link (char const *oldname, char const *newname);
 off_t lseek (int fd, off_t offset, int whence);
 ssize_t read (int fd, void *buffer, size_t size);
 #if __SBRK_CHAR_PTRDIFF
 off_t lseek (int fd, off_t offset, int whence);
 ssize_t read (int fd, void *buffer, size_t size);
 #if __SBRK_CHAR_PTRDIFF
diff --git a/scaffold/tests/97-fopen.c b/scaffold/tests/97-fopen.c
new file mode 100644 (file)
index 0000000..ab02982
--- /dev/null
@@ -0,0 +1,109 @@
+/* -*-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 <libmes.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+int
+dump (char const *name, char const* contents)
+{
+  unlink (name);
+  FILE *f = fopen (name, "w");
+  fwrite (contents, strlen (contents), 1, f);
+  fclose (f);
+}
+
+int
+main ()
+{
+  char *line = "The first line.\n";
+  char *contents = "The first line.\nThe second line.\nThe last line.\n";
+  char* end = "That's all folks!\n";
+
+  char *tmp = "foo";
+
+  dump (tmp, contents);
+
+
+  FILE *t = fopen (tmp, "r+");
+
+
+  char buf[80];
+  memset (buf, 0, sizeof (buf));
+  fread (buf, strlen (line), 1, t);
+  eputs ("buf="); eputs (buf); eputs ("\n");
+  if (strcmp (buf, line))
+    return 1;
+
+  fwrite (end, strlen (end), 1, t);
+
+  fseek (t, 0, SEEK_SET);
+  memset (buf, 0, sizeof (buf));
+  fread (buf, strlen (line), 1, t);
+  eputs ("buf="); eputs (buf); eputs ("\n");
+  if (strcmp (buf, line))
+    return 2;
+
+  tmp = "bar";
+  dump (tmp, contents);
+  t = fopen (tmp, "w+");
+
+  fwrite (end, strlen (end), 1, t);
+  fseek (t, 0, SEEK_SET);
+  memset (buf, 0, sizeof (buf));
+  fread (buf, strlen (end), 1, t);
+  eputs ("buf="); eputs (buf); eputs ("\n");
+  if (strcmp (buf, end))
+    return 3;
+
+  fwrite (end, strlen (end), 1, t);
+
+  fseek (t, 0, SEEK_SET);
+  memset (buf, 0, sizeof (buf));
+  fread (buf, strlen (end), 1, t);
+  if (strcmp (buf, end))
+    return 4;
+
+  tmp = "baz";
+  dump (tmp, contents);
+  t = fopen (tmp, "a+");
+
+  fwrite (end, strlen (end), 1, t);
+  fseek (t, 0, SEEK_SET);
+  memset (buf, 0, sizeof (buf));
+  fread (buf, strlen (line), 1, t);
+  eputs ("buf="); eputs (buf); eputs ("\n");
+  if (strcmp (buf, line))
+    return 5;
+
+  fwrite (end, strlen (end), 1, t);
+
+  fseek (t, 0, SEEK_SET);
+  fread (buf, strlen (line), 1, t);
+  eputs ("buf="); eputs (buf); eputs ("\n");
+  if (strcmp (buf, line))
+    return 6;
+
+  return 0;
+}