Bump to 1.14.1
[platform/upstream/augeas.git] / tests / test-read-file.c
1 /*
2  * Copyright (C) 2006-2007, 2010-2016 Free Software Foundation, Inc.
3  * Written by Simon Josefsson
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17
18 #include <config.h>
19
20 #include "read-file.h"
21
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <sys/stat.h>
25
26 #define FILE1 "/etc/resolv.conf"
27 #define FILE2 "/dev/null"
28
29 int
30 main (void)
31 {
32   struct stat statbuf;
33   int err = 0;
34
35   /* We can perform the test only if the file exists and is readable.
36      Test whether it exists, then assume it is world-readable.  */
37   if (stat (FILE1, &statbuf) >= 0)
38     {
39       size_t len;
40       char *out = read_file (FILE1, &len);
41
42       if (!out)
43         {
44           perror ("Could not read file");
45           err = 1;
46         }
47       else
48         {
49           if (out[len] != '\0')
50             {
51               perror ("BAD: out[len] not zero");
52               err = 1;
53             }
54
55           if (S_ISREG (statbuf.st_mode))
56             {
57               /* FILE1 is a regular file or a symlink to a regular file.  */
58               if (len != statbuf.st_size)
59                 {
60                   fprintf (stderr, "Read %lu from %s...\n",
61                            (unsigned long) len, FILE1);
62                   err = 1;
63                 }
64             }
65           else
66             {
67               /* Assume FILE1 is not empty.  */
68               if (len == 0)
69                 {
70                   fprintf (stderr, "Read nothing from %s\n", FILE1);
71                   err = 1;
72                 }
73             }
74           free (out);
75         }
76     }
77
78   /* We can perform the test only if the file exists and is readable.
79      Test whether it exists, then assume it is world-readable.  */
80   if (stat (FILE2, &statbuf) >= 0)
81     {
82       size_t len;
83       char *out = read_file (FILE2, &len);
84
85       if (!out)
86         {
87           perror ("Could not read file");
88           err = 1;
89         }
90       else
91         {
92           if (out[len] != '\0')
93             {
94               perror ("BAD: out[len] not zero");
95               err = 1;
96             }
97
98           /* /dev/null should always be empty.  Ignore statbuf.st_size, since it
99              is not a regular file.  */
100           if (len != 0)
101             {
102               fprintf (stderr, "Read %lu from %s...\n",
103                        (unsigned long) len, FILE2);
104               err = 1;
105             }
106           free (out);
107         }
108     }
109
110   return err;
111 }