.
[kopensolaris-gnu/glibc.git] / io / bug-ftw2.c
1 /* Test for ftw function searching in current directory.
2    Copyright (C) 2001 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4    Contributed by Ulrich Drepper <drepper@cygnus.com>, 2001.
5
6    The GNU C Library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
10
11    The GNU C Library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15
16    You should have received a copy of the GNU Lesser General Public
17    License along with the GNU C Library; if not, write to the Free
18    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19    02111-1307 USA.  */
20
21 #include <ftw.h>
22 #include <mcheck.h>
23 #include <stdio.h>
24 #include <string.h>
25
26
27 int cnt;
28 int result;
29 int sawown;
30 int sawcur;
31
32
33 static int
34 callback (const char *fname, const struct stat *st, int flag)
35 {
36   printf ("%d: \"%s\" -> ", ++cnt, fname);
37   if (strcmp (fname, ".") == 0 && sawcur)
38     {
39       puts ("current directory reported twice");
40       result = 1;
41     }
42   else if (strcmp (fname, "./bug-ftw2.c") == 0 && sawown)
43     {
44       puts ("source file reported twice");
45       result = 1;
46     }
47   else if (fname[0] != '.')
48     {
49       puts ("missing '.' as first character");
50       result = 1;
51     }
52   else if (fname[1] != '\0' && fname[1] != '/')
53     {
54       puts ("no '/' in second position");
55       result = 1;
56     }
57   else
58     {
59       puts ("OK");
60       sawcur |= strcmp (fname, ".") == 0;
61       sawown |= strcmp (fname, "./bug-ftw2.c") == 0;
62     }
63
64   return 0;
65 }
66
67
68 int
69 main (void)
70 {
71   mtrace ();
72
73   ftw (".", callback, 10);
74
75   if (! sawcur)
76     {
77       puts ("current directory wasn't reported");
78       result = 1;
79     }
80
81   if (! sawown)
82     {
83       puts ("source file wasn't reported");
84       result = 1;
85     }
86
87   return result;
88 }