mescc: Add fopen test.
[mes.git] / scaffold / tests / 97-fopen.c
1 /* -*-comment-start: "//";comment-end:""-*-
2  * Mes --- Maxwell Equations of Software
3  * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
4  *
5  * This file is part of Mes.
6  *
7  * Mes is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or (at
10  * your option) any later version.
11  *
12  * Mes is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with Mes.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include <libmes.h>
22 #include <fcntl.h>
23 #include <unistd.h>
24 #include <stdio.h>
25 #include <string.h>
26 #include <stdlib.h>
27
28 int
29 dump (char const *name, char const* contents)
30 {
31   unlink (name);
32   FILE *f = fopen (name, "w");
33   fwrite (contents, strlen (contents), 1, f);
34   fclose (f);
35 }
36
37 int
38 main ()
39 {
40   char *line = "The first line.\n";
41   char *contents = "The first line.\nThe second line.\nThe last line.\n";
42   char* end = "That's all folks!\n";
43
44   char *tmp = "foo";
45
46   dump (tmp, contents);
47
48
49   FILE *t = fopen (tmp, "r+");
50
51
52   char buf[80];
53   memset (buf, 0, sizeof (buf));
54   fread (buf, strlen (line), 1, t);
55   eputs ("buf="); eputs (buf); eputs ("\n");
56   if (strcmp (buf, line))
57     return 1;
58
59   fwrite (end, strlen (end), 1, t);
60
61   fseek (t, 0, SEEK_SET);
62   memset (buf, 0, sizeof (buf));
63   fread (buf, strlen (line), 1, t);
64   eputs ("buf="); eputs (buf); eputs ("\n");
65   if (strcmp (buf, line))
66     return 2;
67
68   tmp = "bar";
69   dump (tmp, contents);
70   t = fopen (tmp, "w+");
71
72   fwrite (end, strlen (end), 1, t);
73   fseek (t, 0, SEEK_SET);
74   memset (buf, 0, sizeof (buf));
75   fread (buf, strlen (end), 1, t);
76   eputs ("buf="); eputs (buf); eputs ("\n");
77   if (strcmp (buf, end))
78     return 3;
79
80   fwrite (end, strlen (end), 1, t);
81
82   fseek (t, 0, SEEK_SET);
83   memset (buf, 0, sizeof (buf));
84   fread (buf, strlen (end), 1, t);
85   if (strcmp (buf, end))
86     return 4;
87
88   tmp = "baz";
89   dump (tmp, contents);
90   t = fopen (tmp, "a+");
91
92   fwrite (end, strlen (end), 1, t);
93   fseek (t, 0, SEEK_SET);
94   memset (buf, 0, sizeof (buf));
95   fread (buf, strlen (line), 1, t);
96   eputs ("buf="); eputs (buf); eputs ("\n");
97   if (strcmp (buf, line))
98     return 5;
99
100   fwrite (end, strlen (end), 1, t);
101
102   fseek (t, 0, SEEK_SET);
103   fread (buf, strlen (line), 1, t);
104   eputs ("buf="); eputs (buf); eputs ("\n");
105   if (strcmp (buf, line))
106     return 6;
107
108   return 0;
109 }