source: trunk/src/sed/gnulib-tests/test-read-file.c@ 3669

Last change on this file since 3669 was 3611, checked in by bird, 10 months ago

vendor/sed/current: GNU sed 4.9 (sed-4.9.tar.xz sha256:6e226b732e1cd739464ad6862bd1a1aba42d7982922da7a53519631d24975181)

File size: 3.2 KB
Line 
1/*
2 * Copyright (C) 2006-2007, 2010-2022 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 <https://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#include "macros.h"
27
28#define FILE1 "/etc/resolv.conf"
29#define FILE2 "/dev/null"
30
31static int
32test_read_file (int flags)
33{
34 struct stat statbuf;
35 int err = 0;
36
37 /* We can perform the test only if the file exists and is readable.
38 Test whether it exists, then assume it is world-readable. */
39 if (stat (FILE1, &statbuf) >= 0)
40 {
41 size_t len;
42 char *out = read_file (FILE1, flags, &len);
43
44 if (!out)
45 {
46 perror ("Could not read file");
47 err = 1;
48 }
49 else
50 {
51 if (out[len] != '\0')
52 {
53 perror ("BAD: out[len] not zero");
54 err = 1;
55 }
56
57 if (S_ISREG (statbuf.st_mode))
58 {
59 /* FILE1 is a regular file or a symlink to a regular file. */
60 if (len != statbuf.st_size)
61 {
62 fprintf (stderr, "Read %lu from %s...\n",
63 (unsigned long) len, FILE1);
64 err = 1;
65 }
66 }
67 else
68 {
69 /* Assume FILE1 is not empty. */
70 if (len == 0)
71 {
72 fprintf (stderr, "Read nothing from %s\n", FILE1);
73 err = 1;
74 }
75 }
76 free (out);
77 }
78 }
79
80 /* We can perform the test only if the file exists and is readable.
81 Test whether it exists, then assume it is world-readable. */
82 if (stat (FILE2, &statbuf) >= 0)
83 {
84 size_t len;
85 char *out = read_file (FILE2, flags, &len);
86
87 if (!out)
88 {
89 perror ("Could not read file");
90 err = 1;
91 }
92 else
93 {
94 if (out[len] != '\0')
95 {
96 perror ("BAD: out[len] not zero");
97 err = 1;
98 }
99
100 /* /dev/null should always be empty. Ignore statbuf.st_size, since it
101 is not a regular file. */
102 if (len != 0)
103 {
104 fprintf (stderr, "Read %lu from %s...\n",
105 (unsigned long) len, FILE2);
106 err = 1;
107 }
108 free (out);
109 }
110 }
111
112 return err;
113}
114
115int
116main (void)
117{
118 ASSERT (!test_read_file (0));
119 ASSERT (!test_read_file (RF_BINARY));
120 ASSERT (!test_read_file (RF_SENSITIVE));
121 ASSERT (!test_read_file (RF_BINARY | RF_SENSITIVE));
122
123 return 0;
124}
Note: See TracBrowser for help on using the repository browser.