mescc: Mes C Library: Cleanup includes.
[mes.git] / lib / tests / dirent / 90-readdir.c
1 /* -*-comment-start: "//";comment-end:""-*-
2  * GNU Mes --- Maxwell Equations of Software
3  * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
4  *
5  * This file is part of GNU Mes.
6  *
7  * GNU 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  * GNU 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 GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include <mes/lib.h>
22
23 #include <dirent.h>
24 #include <errno.h>
25 #include <stdlib.h>
26 #include <string.h>
27
28 int
29 qsort_strcmp (void const* a, void const* b)
30 {
31   return strcmp (*((char**) a), *((char**) b));
32 }
33
34 int
35 main ()
36 {
37   DIR *d = opendir ("lib/tests/dirent/readdir-fu");
38   if (d)
39     return 1;
40   if (errno != ENOENT)
41     return 2;
42
43   d = opendir ("lib/tests/dirent/90-readdir.c");
44   if (d)
45     return 3;
46   if (errno != ENOTDIR)
47     return 4;
48
49   errno = 0;
50   d = opendir ("lib/tests/dirent/readdir.dir");
51   if (!d)
52     return 5;
53
54   if (errno)
55     return 6;
56
57   int i = 0;
58   char* list[6] = {0};
59   struct dirent *entry = readdir (d);
60   if (!entry)
61     return 7;
62   oputs (entry->d_name);
63   oputs ("\n");
64   list[i++] = entry->d_name;
65
66   entry = readdir (d);
67   if (!entry)
68     return 8;
69   oputs (entry->d_name);
70   oputs ("\n");
71   list[i++] = entry->d_name;
72
73   entry = readdir (d);
74   if (!entry)
75     return 9;
76   oputs (entry->d_name);
77   oputs ("\n");
78   list[i++] = entry->d_name;
79
80   entry = readdir (d);
81   if (!entry)
82     return 10;
83   oputs (entry->d_name);
84   oputs ("\n");
85   list[i++] = entry->d_name;
86
87   entry = readdir (d);
88   if (!entry)
89     return 11;
90   oputs (entry->d_name);
91   oputs ("\n");
92   list[i++] = entry->d_name;
93
94   entry = readdir (d);
95   if (entry)
96     return 12;
97
98   oputs ("\nls:\n");
99   qsort (list, 5, sizeof (char*), qsort_strcmp);
100   for (int i = 0; i < 5; i++)
101     {
102       oputs (list[i]); oputs ("\n");
103     }
104
105   if (strcmp (list[0], "."))
106     return 13;
107
108   if (strcmp (list[4], "link"))
109     return 14;
110
111   return 0;
112 }