annotate place.c @ 37:70902cac4170

Sort the option lists to match the comparison used to search them. duh. Also don't assert on the incpaths during shutdown.
author David A. Holland
date Sat, 30 Mar 2013 20:52:59 -0400
parents 76c114899f63
children b156910b59b2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
1 /*-
76c114899f63 copyrights
David A. Holland
parents: 28
diff changeset
2 * Copyright (c) 2010 The NetBSD Foundation, Inc.
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
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
30 #include <assert.h>
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
31 #include <stdarg.h>
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
32 #include <stdio.h>
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
33 #include <stdlib.h>
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
34
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
35 #include "utils.h"
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
36 #include "array.h"
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
37 #include "place.h"
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
38
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
39 struct placefile {
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
40 struct place includedfrom;
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
41 char *name;
28
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 14
diff changeset
42 int depth;
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
43 bool fromsystemdir;
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
44 };
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
45 DECLARRAY(placefile);
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
46 DEFARRAY(placefile, );
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
47
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
48 static struct placefilearray placefiles;
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
49 static bool overall_failure;
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
50
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
51 ////////////////////////////////////////////////////////////
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
52 // seenfiles
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
53
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
54 static
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
55 struct placefile *
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
56 placefile_create(const struct place *from, const char *name,
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
57 bool fromsystemdir)
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
58 {
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
59 struct placefile *pf;
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
60
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
61 pf = domalloc(sizeof(*pf));
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
62 pf->includedfrom = *from;
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
63 pf->name = dostrdup(name);
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
64 pf->fromsystemdir = fromsystemdir;
28
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 14
diff changeset
65 if (from->file != NULL) {
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 14
diff changeset
66 pf->depth = from->file->depth + 1;
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 14
diff changeset
67 } else {
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 14
diff changeset
68 pf->depth = 1;
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 14
diff changeset
69 }
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
70 return pf;
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
71 }
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
72
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
73 static
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
74 void
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
75 placefile_destroy(struct placefile *pf)
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
76 {
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
77 free(pf->name);
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
78 free(pf);
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
79 }
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
80
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
81 DESTROYALL_ARRAY(placefile, );
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
82
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
83 const struct placefile *
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
84 place_addfile(const struct place *place, const char *file, bool issystem)
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
85 {
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
86 struct placefile *pf;
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
87
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
88 pf = placefile_create(place, file, issystem);
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
89 placefilearray_add(&placefiles, pf, NULL);
28
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 14
diff changeset
90 if (pf->depth > 128) {
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 14
diff changeset
91 complain(place, "Maximum include nesting depth exceeded");
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 14
diff changeset
92 die();
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 14
diff changeset
93 }
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
94 return pf;
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
95 }
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
96
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
97 ////////////////////////////////////////////////////////////
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
98 // places
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
99
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
100 void
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
101 place_setnowhere(struct place *p)
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
102 {
12
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
103 p->type = P_NOWHERE;
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
104 p->file = NULL;
12
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
105 p->line = 0;
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
106 p->column = 0;
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
107 }
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
108
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
109 void
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
110 place_setbuiltin(struct place *p, unsigned num)
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
111 {
12
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
112 p->type = P_BUILTIN;
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
113 p->file = NULL;
12
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
114 p->line = num;
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
115 p->column = 1;
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
116 }
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
117
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
118 void
14
David A. Holland
parents: 13
diff changeset
119 place_setcommandline(struct place *p, unsigned line, unsigned column)
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
120 {
14
David A. Holland
parents: 13
diff changeset
121 p->type = P_COMMANDLINE;
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
122 p->file = NULL;
14
David A. Holland
parents: 13
diff changeset
123 p->line = line;
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
124 p->column = column;
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
125 }
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
126
14
David A. Holland
parents: 13
diff changeset
127 void
David A. Holland
parents: 13
diff changeset
128 place_setfilestart(struct place *p, const struct placefile *pf)
David A. Holland
parents: 13
diff changeset
129 {
28
8a955e3dda2c two more tests, more fixes
David A. Holland
parents: 14
diff changeset
130 p->type = P_FILE;
14
David A. Holland
parents: 13
diff changeset
131 p->file = pf;
David A. Holland
parents: 13
diff changeset
132 p->line = 1;
David A. Holland
parents: 13
diff changeset
133 p->column = 1;
David A. Holland
parents: 13
diff changeset
134 }
David A. Holland
parents: 13
diff changeset
135
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
136 static
12
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
137 const char *
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
138 place_getname(const struct place *p)
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
139 {
12
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
140 switch (p->type) {
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
141 case P_NOWHERE: return "<nowhere>";
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
142 case P_BUILTIN: return "<built-in>";
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
143 case P_COMMANDLINE: return "<command-line>";
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
144 case P_FILE: return p->file->name;
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
145 }
12
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
146 assert(0);
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
147 return NULL;
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
148 }
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
149
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
150 static
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
151 void
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
152 place_printfrom(const struct place *p)
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
153 {
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
154 const struct place *from;
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
155
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
156 from = &p->file->includedfrom;
12
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
157 if (from->type != P_NOWHERE) {
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
158 place_printfrom(from);
12
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
159 fprintf(stderr, "In file included from %s:%u:%u:\n",
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
160 place_getname(from), from->line, from->column);
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
161 }
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
162 }
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
163
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
164 ////////////////////////////////////////////////////////////
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
165 // complaints
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
166
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
167 void
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
168 complain(const struct place *p, const char *fmt, ...)
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
169 {
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
170 va_list ap;
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
171
12
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
172 place_printfrom(p);
6c15ca895585 improve places more
David A. Holland
parents: 11
diff changeset
173 fprintf(stderr, "%s:%u:%u: ", place_getname(p), p->line, p->column);
8
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
174 va_start(ap, fmt);
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
175 vfprintf(stderr, fmt, ap);
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
176 va_end(ap);
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
177 fprintf(stderr, "\n");
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
178 }
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
179
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
180 void
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
181 complain_fail(void)
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
182 {
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
183 overall_failure = true;
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
184 }
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
185
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
186 bool
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
187 complain_failed(void)
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
188 {
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
189 return overall_failure;
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
190 }
97243badae69 split place stuff to its own file
David A. Holland
parents:
diff changeset
191
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
192 ////////////////////////////////////////////////////////////
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
193 // module init and cleanup
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
194
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
195 void
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
196 place_init(void)
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
197 {
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
198 placefilearray_init(&placefiles);
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
199 }
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
200
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
201 void
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
202 place_cleanup(void)
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
203 {
13
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
204 placefilearray_destroyall(&placefiles);
120629a5d6bf seenfile -> placefile (clearer)
David A. Holland
parents: 12
diff changeset
205 placefilearray_cleanup(&placefiles);
10
800f3a560a3b move seenfiles to place.c too
David A. Holland
parents: 8
diff changeset
206 }