annotate files.c @ 136:59680a727e9d

Improve previous. Just in case we ever crash and reach cleanup() while processing an -include foo option, take the array entry for it out of the array to make sure it doesn't get freed twice. This case shouldn't be reachable, but it's better to be safe.
author David A. Holland
date Tue, 09 Jul 2013 13:38:43 -0400
parents 1cda505ddc78
children ed45f2d8d3bc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
1 /*-
99
60184aa42604 add 2013 to copyrights where it seems warranted
David A. Holland
parents: 81
diff changeset
2 * Copyright (c) 2010, 2013 The NetBSD Foundation, Inc.
30
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
3 * All rights reserved.
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
4 *
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
5 * This code is derived from software contributed to The NetBSD Foundation
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
6 * by David A. Holland.
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
7 *
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
8 * Redistribution and use in source and binary forms, with or without
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
9 * modification, are permitted provided that the following conditions
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
10 * are met:
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
11 * 1. Redistributions of source code must retain the above copyright
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
12 * notice, this list of conditions and the following disclaimer.
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
13 * 2. Redistributions in binary form must reproduce the above copyright
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
14 * notice, this list of conditions and the following disclaimer in the
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
15 * documentation and/or other materials provided with the distribution.
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
16 *
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
17 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
18 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
19 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
27 * POSSIBILITY OF SUCH DAMAGE.
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
28 */
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
29
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
30 #include <stdbool.h>
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
31 #include <stdio.h>
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
32 #include <stdlib.h>
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
33 #include <string.h>
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
34 #include <unistd.h>
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
35 #include <fcntl.h>
113
1e7144176a42 Print a warning if we get an unexpected error trying to open a file.
David A. Holland
parents: 112
diff changeset
36 #include <errno.h>
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
37 #include <err.h>
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
38
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
39 #include "array.h"
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
40 #include "mode.h"
8
97243badae69 split place stuff to its own file
David A. Holland
parents: 7
diff changeset
41 #include "place.h"
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
42 #include "files.h"
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
43 #include "directive.h"
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
44
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
45 struct incdir {
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
46 const char *name;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
47 bool issystem;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
48 };
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
49
107
33954a07d013 __unused -> UNUSED
David A. Holland
parents: 104
diff changeset
50 DECLARRAY(incdir, static UNUSED);
47
2e25e55dba6b Fix inline usage as per the version in dholland-make2.
David A. Holland
parents: 39
diff changeset
51 DEFARRAY(incdir, static);
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
52
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
53 static struct incdirarray quotepath, bracketpath;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
54
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
55 ////////////////////////////////////////////////////////////
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
56 // management
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
57
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
58 static
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
59 struct incdir *
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
60 incdir_create(const char *name, bool issystem)
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
61 {
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
62 struct incdir *id;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
63
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
64 id = domalloc(sizeof(*id));
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
65 id->name = name;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
66 id->issystem = issystem;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
67 return id;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
68 }
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
69
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
70 static
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
71 void
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
72 incdir_destroy(struct incdir *id)
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
73 {
39
337110e7240a Pass the size to free; it makes debug checking easier.
David A. Holland
parents: 38
diff changeset
74 dofree(id, sizeof(*id));
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
75 }
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
76
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
77 void
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
78 files_init(void)
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
79 {
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
80 incdirarray_init(&quotepath);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
81 incdirarray_init(&bracketpath);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
82 }
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
83
9
1fbcbd58742e move destroyall to array.h
David A. Holland
parents: 8
diff changeset
84 DESTROYALL_ARRAY(incdir, );
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
85
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
86 void
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
87 files_cleanup(void)
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
88 {
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
89 incdirarray_destroyall(&quotepath);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
90 incdirarray_cleanup(&quotepath);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
91 incdirarray_destroyall(&bracketpath);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
92 incdirarray_cleanup(&bracketpath);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
93 }
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
94
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
95 ////////////////////////////////////////////////////////////
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
96 // path setup
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
97
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
98 void
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
99 files_addquotepath(const char *dir, bool issystem)
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
100 {
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
101 struct incdir *id;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
102
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
103 id = incdir_create(dir, issystem);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
104 incdirarray_add(&quotepath, id, NULL);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
105 }
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
106
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
107 void
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
108 files_addbracketpath(const char *dir, bool issystem)
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
109 {
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
110 struct incdir *id;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
111
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
112 id = incdir_create(dir, issystem);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
113 incdirarray_add(&bracketpath, id, NULL);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
114 }
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
115
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
116 ////////////////////////////////////////////////////////////
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
117 // parsing
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
118
75
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
119 /*
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
120 * Find the end of the logical line. End of line characters that are
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
121 * commented out do not count.
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
122 */
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
123 static
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
124 size_t
75
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
125 findeol(const char *buf, size_t start, size_t limit)
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
126 {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
127 size_t i;
75
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
128 int incomment = 0;
81
27c9aafcaca1 Don't recognize comments within double-quote strings.
David A. Holland
parents: 75
diff changeset
129 bool inquote = false;
128
1cda505ddc78 Don't expand macros within character constants.
David A. Holland
parents: 113
diff changeset
130 char quote = '\0';
75
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
131
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
132 for (i=start; i<limit; i++) {
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
133 if (incomment) {
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
134 if (i+1 < limit && buf[i] == '*' && buf[i+1] == '/') {
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
135 i++;
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
136 incomment = 0;
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
137 }
81
27c9aafcaca1 Don't recognize comments within double-quote strings.
David A. Holland
parents: 75
diff changeset
138 } else if (!inquote && i+1 < limit &&
27c9aafcaca1 Don't recognize comments within double-quote strings.
David A. Holland
parents: 75
diff changeset
139 buf[i] == '/' && buf[i+1] == '*') {
27c9aafcaca1 Don't recognize comments within double-quote strings.
David A. Holland
parents: 75
diff changeset
140 i++;
27c9aafcaca1 Don't recognize comments within double-quote strings.
David A. Holland
parents: 75
diff changeset
141 incomment = 1;
27c9aafcaca1 Don't recognize comments within double-quote strings.
David A. Holland
parents: 75
diff changeset
142 } else if (i+1 < limit &&
128
1cda505ddc78 Don't expand macros within character constants.
David A. Holland
parents: 113
diff changeset
143 buf[i] == '\\' && buf[i+1] != '\n') {
81
27c9aafcaca1 Don't recognize comments within double-quote strings.
David A. Holland
parents: 75
diff changeset
144 i++;
128
1cda505ddc78 Don't expand macros within character constants.
David A. Holland
parents: 113
diff changeset
145 } else if (!inquote && (buf[i] == '"' || buf[i] == '\'')) {
1cda505ddc78 Don't expand macros within character constants.
David A. Holland
parents: 113
diff changeset
146 inquote = true;
1cda505ddc78 Don't expand macros within character constants.
David A. Holland
parents: 113
diff changeset
147 quote = buf[i];
1cda505ddc78 Don't expand macros within character constants.
David A. Holland
parents: 113
diff changeset
148 } else if (inquote && buf[i] == quote) {
1cda505ddc78 Don't expand macros within character constants.
David A. Holland
parents: 113
diff changeset
149 inquote = false;
81
27c9aafcaca1 Don't recognize comments within double-quote strings.
David A. Holland
parents: 75
diff changeset
150 } else if (buf[i] == '\n') {
27c9aafcaca1 Don't recognize comments within double-quote strings.
David A. Holland
parents: 75
diff changeset
151 return i;
75
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
152 }
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
153 }
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
154 return limit;
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
155 }
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
156
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
157 static
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
158 unsigned
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
159 countnls(const char *buf, size_t start, size_t limit)
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
160 {
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
161 size_t i;
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
162 unsigned count = 0;
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
163
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
164 for (i=start; i<limit; i++) {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
165 if (buf[i] == '\n') {
75
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
166 count++;
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
167 }
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
168 }
75
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
169 return count;
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
170 }
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
171
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
172 static
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
173 void
28
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 24
diff changeset
174 file_read(const struct placefile *pf, int fd, const char *name, bool toplevel)
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
175 {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
176 struct place linestartplace, nextlinestartplace, ptmp;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
177 size_t bufend, bufmax, linestart, lineend, nextlinestart, tmp;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
178 ssize_t result;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
179 bool ateof = false;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
180 char *buf;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
181
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
182 place_setfilestart(&linestartplace, pf);
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
183 nextlinestartplace = linestartplace;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
184
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
185 bufmax = 128;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
186 bufend = 0;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
187 linestart = 0;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
188 lineend = 0;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
189 buf = domalloc(bufmax);
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
190
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
191 while (1) {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
192 if (lineend >= bufend) {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
193 /* do not have a whole line in the buffer; read more */
75
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
194 assert(bufend >= linestart);
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
195 if (linestart > 0 && bufend > linestart) {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
196 /* slide to beginning of buffer */
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
197 memmove(buf, buf+linestart, bufend-linestart);
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
198 bufend -= linestart;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
199 lineend -= linestart;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
200 linestart = 0;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
201 }
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
202 if (bufend >= bufmax) {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
203 /* need bigger buffer */
39
337110e7240a Pass the size to free; it makes debug checking easier.
David A. Holland
parents: 38
diff changeset
204 buf = dorealloc(buf, bufmax, bufmax*2);
337110e7240a Pass the size to free; it makes debug checking easier.
David A. Holland
parents: 38
diff changeset
205 bufmax = bufmax*2;
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
206 }
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
207
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
208 if (ateof) {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
209 /* don't read again, in case it's a socket */
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
210 result = 0;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
211 } else {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
212 result = read(fd, buf+bufend, bufmax - bufend);
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
213 }
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
214
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
215 if (result == -1) {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
216 /* read error */
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
217 warn("%s", name);
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
218 complain_fail();
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
219 } else if (result == 0 && bufend == linestart) {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
220 /* eof */
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
221 ateof = true;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
222 break;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
223 } else if (result == 0) {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
224 /* eof in middle of line */
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
225 ateof = true;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
226 ptmp = linestartplace;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
227 ptmp.column += bufend - linestart;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
228 complain(&ptmp, "No newline at end of file");
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
229 if (mode.werror) {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
230 complain_fail();
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
231 }
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
232 assert(bufend < bufmax);
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
233 lineend = bufend++;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
234 buf[lineend] = '\n';
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
235 } else {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
236 bufend += (size_t)result;
81
27c9aafcaca1 Don't recognize comments within double-quote strings.
David A. Holland
parents: 75
diff changeset
237 lineend = findeol(buf, linestart, bufend);
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
238 }
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
239 /* loop in case we still don't have a whole line */
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
240 continue;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
241 }
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
242
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
243 /* have a line */
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
244 assert(buf[lineend] == '\n');
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
245 buf[lineend] = '\0';
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
246 nextlinestart = lineend+1;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
247 nextlinestartplace.line++;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
248
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
249 /* check for CR/NL */
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
250 if (lineend > 0 && buf[lineend-1] == '\r') {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
251 buf[lineend-1] = '\0';
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
252 lineend--;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
253 }
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
254
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
255 /* check for continuation line */
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
256 if (lineend > 0 && buf[lineend-1]=='\\') {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
257 lineend--;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
258 tmp = nextlinestart - lineend;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
259 if (bufend > nextlinestart) {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
260 memmove(buf+lineend, buf+nextlinestart,
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
261 bufend - nextlinestart);
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
262 }
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
263 bufend -= tmp;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
264 nextlinestart -= tmp;
81
27c9aafcaca1 Don't recognize comments within double-quote strings.
David A. Holland
parents: 75
diff changeset
265 lineend = findeol(buf, linestart, bufend);
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
266 /* might not have a whole line, so loop */
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
267 continue;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
268 }
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
269
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
270 /* line now goes from linestart to lineend */
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
271 assert(buf[lineend] == '\0');
75
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
272
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
273 /* count how many commented-out newlines we swallowed */
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
274 nextlinestartplace.line += countnls(buf, linestart, lineend);
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
275
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
276 /* if the line isn't empty, process it */
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
277 if (lineend > linestart) {
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
278 directive_gotline(&linestartplace,
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
279 buf+linestart, lineend-linestart);
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
280 }
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
281
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
282 linestart = nextlinestart;
75
980ed7cb620a More multiline comment fixes.
David A. Holland
parents: 47
diff changeset
283 lineend = findeol(buf, linestart, bufend);
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
284 linestartplace = nextlinestartplace;
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
285 }
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
286
28
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 24
diff changeset
287 if (toplevel) {
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 24
diff changeset
288 directive_goteof(&linestartplace);
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 24
diff changeset
289 }
39
337110e7240a Pass the size to free; it makes debug checking easier.
David A. Holland
parents: 38
diff changeset
290 dofree(buf, bufmax);
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
291 }
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
292
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
293 ////////////////////////////////////////////////////////////
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
294 // path search
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
295
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
296 static
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
297 char *
112
2b0b61fd1a36 Fix handling of relative includes.
David A. Holland
parents: 107
diff changeset
298 mkfilename(struct place *place, const char *dir, const char *file)
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
299 {
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
300 size_t dlen, flen, rlen;
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
301 char *ret;
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
302 bool needslash = false;
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
303
112
2b0b61fd1a36 Fix handling of relative includes.
David A. Holland
parents: 107
diff changeset
304 if (dir == NULL) {
2b0b61fd1a36 Fix handling of relative includes.
David A. Holland
parents: 107
diff changeset
305 dir = place_getparsedir(place);
2b0b61fd1a36 Fix handling of relative includes.
David A. Holland
parents: 107
diff changeset
306 }
2b0b61fd1a36 Fix handling of relative includes.
David A. Holland
parents: 107
diff changeset
307
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
308 dlen = strlen(dir);
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
309 flen = strlen(file);
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
310 if (dlen > 0 && dir[dlen-1] != '/') {
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
311 needslash = true;
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
312 }
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
313
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
314 rlen = dlen + (needslash ? 1 : 0) + flen;
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
315 ret = domalloc(rlen + 1);
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
316 strcpy(ret, dir);
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
317 if (needslash) {
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
318 strcat(ret, "/");
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
319 }
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
320 strcat(ret, file);
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
321 return ret;
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
322 }
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
323
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
324 static
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
325 int
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
326 file_tryopen(const char *file)
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
327 {
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
328 int fd;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
329
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
330 /* XXX check for non-regular files */
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
331
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
332 fd = open(file, O_RDONLY);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
333 if (fd < 0) {
113
1e7144176a42 Print a warning if we get an unexpected error trying to open a file.
David A. Holland
parents: 112
diff changeset
334 if (errno != ENOENT && errno != ENOTDIR) {
1e7144176a42 Print a warning if we get an unexpected error trying to open a file.
David A. Holland
parents: 112
diff changeset
335 warn("%s", file);
1e7144176a42 Print a warning if we get an unexpected error trying to open a file.
David A. Holland
parents: 112
diff changeset
336 }
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
337 return -1;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
338 }
15
f6177d3ed5c2 handle directives
David A. Holland
parents: 13
diff changeset
339
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
340 return fd;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
341 }
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
342
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
343 static
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
344 void
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
345 file_search(struct place *place, struct incdirarray *path, const char *name)
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
346 {
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
347 unsigned i, num;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
348 struct incdir *id;
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
349 const struct placefile *pf;
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
350 char *file;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
351 int fd;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
352
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
353 assert(place != NULL);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
354
104
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
355 if (name[0] == '/') {
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
356 fd = file_tryopen(name);
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
357 if (fd >= 0) {
104
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
358 pf = place_addfile(place, name, true);
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
359 file_read(pf, fd, name, false);
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
360 close(fd);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
361 return;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
362 }
104
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
363 } else {
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
364 num = incdirarray_num(path);
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
365 for (i=0; i<num; i++) {
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
366 id = incdirarray_get(path, i);
112
2b0b61fd1a36 Fix handling of relative includes.
David A. Holland
parents: 107
diff changeset
367 file = mkfilename(place, id->name, name);
104
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
368 fd = file_tryopen(file);
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
369 if (fd >= 0) {
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
370 pf = place_addfile(place, file, id->issystem);
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
371 file_read(pf, fd, file, false);
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
372 dostrfree(file);
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
373 close(fd);
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
374 return;
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
375 }
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
376 dostrfree(file);
91f600e6647b Allow absolute paths in include files.
David A. Holland
parents: 99
diff changeset
377 }
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
378 }
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
379 complain(place, "Include file %s not found", name);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
380 complain_fail();
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
381 }
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
382
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
383 void
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
384 file_readquote(struct place *place, const char *name)
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
385 {
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
386 file_search(place, &quotepath, name);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
387 }
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
388
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
389 void
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
390 file_readbracket(struct place *place, const char *name)
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
391 {
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
392 file_search(place, &bracketpath, name);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
393 }
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
394
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
395 void
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
396 file_readabsolute(struct place *place, const char *name)
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
397 {
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 10
diff changeset
398 const struct placefile *pf;
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
399 int fd;
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
400
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
401 assert(place != NULL);
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
402
24
daa801fe719e fix some bugs
David A. Holland
parents: 15
diff changeset
403 if (name == NULL) {
daa801fe719e fix some bugs
David A. Holland
parents: 15
diff changeset
404 fd = STDIN_FILENO;
daa801fe719e fix some bugs
David A. Holland
parents: 15
diff changeset
405 pf = place_addfile(place, "<standard-input>", false);
daa801fe719e fix some bugs
David A. Holland
parents: 15
diff changeset
406 } else {
daa801fe719e fix some bugs
David A. Holland
parents: 15
diff changeset
407 fd = file_tryopen(name);
daa801fe719e fix some bugs
David A. Holland
parents: 15
diff changeset
408 if (fd < 0) {
daa801fe719e fix some bugs
David A. Holland
parents: 15
diff changeset
409 warn("%s", name);
daa801fe719e fix some bugs
David A. Holland
parents: 15
diff changeset
410 die();
daa801fe719e fix some bugs
David A. Holland
parents: 15
diff changeset
411 }
daa801fe719e fix some bugs
David A. Holland
parents: 15
diff changeset
412 pf = place_addfile(place, name, false);
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
413 }
24
daa801fe719e fix some bugs
David A. Holland
parents: 15
diff changeset
414
28
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 24
diff changeset
415 file_read(pf, fd, name, true);
24
daa801fe719e fix some bugs
David A. Holland
parents: 15
diff changeset
416
daa801fe719e fix some bugs
David A. Holland
parents: 15
diff changeset
417 if (name != NULL) {
daa801fe719e fix some bugs
David A. Holland
parents: 15
diff changeset
418 close(fd);
daa801fe719e fix some bugs
David A. Holland
parents: 15
diff changeset
419 }
6
0601b6e8e53d checkpoint - can find files
David A. Holland
parents:
diff changeset
420 }