annotate src/share/tools/MakeDeps/FileList.java @ 1716:be3f9c242c9d

6948538: CMS: BOT walkers can fall into object allocation and initialization cracks Summary: GC workers now recognize an intermediate transient state of blocks which are allocated but have not yet completed initialization. blk_start() calls do not attempt to determine the size of a block in the transient state, rather waiting for the block to become initialized so that it is safe to query its size. Audited and ensured the order of initialization of object fields (klass, free bit and size) to respect block state transition protocol. Also included some new assertion checking code enabled in debug mode. Reviewed-by: chrisphi, johnc, poonam
author ysr
date Mon, 16 Aug 2010 15:58:42 -0700
parents c18cbe5936b8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 0
diff changeset
2 * Copyright (c) 1999, 2000, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 0
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 0
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 0
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
a61af66fc99e Initial load
duke
parents:
diff changeset
25 import java.io.*;
a61af66fc99e Initial load
duke
parents:
diff changeset
26 import java.util.*;
a61af66fc99e Initial load
duke
parents:
diff changeset
27
a61af66fc99e Initial load
duke
parents:
diff changeset
28 /** This class implements the java.util.List interface as well as
a61af66fc99e Initial load
duke
parents:
diff changeset
29 providing functionality specific to keeping track of lists of
a61af66fc99e Initial load
duke
parents:
diff changeset
30 files. See the documentation for the Database class to see how
a61af66fc99e Initial load
duke
parents:
diff changeset
31 these are used. Each FileList must only contain other FileLists
a61af66fc99e Initial load
duke
parents:
diff changeset
32 (although that is not currently enforced in the mutators). */
a61af66fc99e Initial load
duke
parents:
diff changeset
33
a61af66fc99e Initial load
duke
parents:
diff changeset
34 public class FileList extends Vector {
a61af66fc99e Initial load
duke
parents:
diff changeset
35 private String name; // (also the file name)
a61af66fc99e Initial load
duke
parents:
diff changeset
36 private boolean beenHere;
a61af66fc99e Initial load
duke
parents:
diff changeset
37 private boolean mayBeCycle;
a61af66fc99e Initial load
duke
parents:
diff changeset
38 private boolean isCycle;
a61af66fc99e Initial load
duke
parents:
diff changeset
39 /** Put in list because a file can refuse to */
a61af66fc99e Initial load
duke
parents:
diff changeset
40 private boolean useGrandInclude;
a61af66fc99e Initial load
duke
parents:
diff changeset
41 private String platformDependentInclude;
a61af66fc99e Initial load
duke
parents:
diff changeset
42 private int count;
a61af66fc99e Initial load
duke
parents:
diff changeset
43 private Platform plat;
a61af66fc99e Initial load
duke
parents:
diff changeset
44
a61af66fc99e Initial load
duke
parents:
diff changeset
45 public FileList(String n, Platform plat) {
a61af66fc99e Initial load
duke
parents:
diff changeset
46 super();
a61af66fc99e Initial load
duke
parents:
diff changeset
47 this.plat = plat;
a61af66fc99e Initial load
duke
parents:
diff changeset
48 beenHere = mayBeCycle = isCycle = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
49 platformDependentInclude = null;
a61af66fc99e Initial load
duke
parents:
diff changeset
50 name = n;
a61af66fc99e Initial load
duke
parents:
diff changeset
51 count = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
52 useGrandInclude = plat.haveGrandInclude();
a61af66fc99e Initial load
duke
parents:
diff changeset
53 }
a61af66fc99e Initial load
duke
parents:
diff changeset
54
a61af66fc99e Initial load
duke
parents:
diff changeset
55 // Change definition of equality from AbstractList so remove() works properly
a61af66fc99e Initial load
duke
parents:
diff changeset
56 public boolean equals(Object o) {
a61af66fc99e Initial load
duke
parents:
diff changeset
57 return ((Object) this) == o;
a61af66fc99e Initial load
duke
parents:
diff changeset
58 }
a61af66fc99e Initial load
duke
parents:
diff changeset
59
a61af66fc99e Initial load
duke
parents:
diff changeset
60 // Necessary accessors
a61af66fc99e Initial load
duke
parents:
diff changeset
61 public String getName() {
a61af66fc99e Initial load
duke
parents:
diff changeset
62 return name;
a61af66fc99e Initial load
duke
parents:
diff changeset
63 }
a61af66fc99e Initial load
duke
parents:
diff changeset
64
a61af66fc99e Initial load
duke
parents:
diff changeset
65 public void setPlatformDependentInclude(String arg) {
a61af66fc99e Initial load
duke
parents:
diff changeset
66 platformDependentInclude = arg;
a61af66fc99e Initial load
duke
parents:
diff changeset
67 }
a61af66fc99e Initial load
duke
parents:
diff changeset
68
a61af66fc99e Initial load
duke
parents:
diff changeset
69 public String getPlatformDependentInclude() {
a61af66fc99e Initial load
duke
parents:
diff changeset
70 return platformDependentInclude;
a61af66fc99e Initial load
duke
parents:
diff changeset
71 }
a61af66fc99e Initial load
duke
parents:
diff changeset
72
a61af66fc99e Initial load
duke
parents:
diff changeset
73 public boolean getUseGrandInclude() {
a61af66fc99e Initial load
duke
parents:
diff changeset
74 return useGrandInclude;
a61af66fc99e Initial load
duke
parents:
diff changeset
75 }
a61af66fc99e Initial load
duke
parents:
diff changeset
76
a61af66fc99e Initial load
duke
parents:
diff changeset
77 public void setUseGrandInclude(boolean arg) {
a61af66fc99e Initial load
duke
parents:
diff changeset
78 useGrandInclude = arg;
a61af66fc99e Initial load
duke
parents:
diff changeset
79 }
a61af66fc99e Initial load
duke
parents:
diff changeset
80
a61af66fc99e Initial load
duke
parents:
diff changeset
81 public void incrementCount() {
a61af66fc99e Initial load
duke
parents:
diff changeset
82 count++;
a61af66fc99e Initial load
duke
parents:
diff changeset
83 }
a61af66fc99e Initial load
duke
parents:
diff changeset
84
a61af66fc99e Initial load
duke
parents:
diff changeset
85 public int getCount() {
a61af66fc99e Initial load
duke
parents:
diff changeset
86 return count;
a61af66fc99e Initial load
duke
parents:
diff changeset
87 }
a61af66fc99e Initial load
duke
parents:
diff changeset
88
a61af66fc99e Initial load
duke
parents:
diff changeset
89 public FileList listForFile(String fileName) {
a61af66fc99e Initial load
duke
parents:
diff changeset
90 for (Iterator iter = iterator(); iter.hasNext(); ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
91 FileList fl = (FileList) iter.next();
a61af66fc99e Initial load
duke
parents:
diff changeset
92 if (plat.fileNameStringEquality(fl.name, fileName)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
93 plat.fileNamePortabilityCheck(fl.name, fileName);
a61af66fc99e Initial load
duke
parents:
diff changeset
94 return fl;
a61af66fc99e Initial load
duke
parents:
diff changeset
95 }
a61af66fc99e Initial load
duke
parents:
diff changeset
96 }
a61af66fc99e Initial load
duke
parents:
diff changeset
97 plat.fileNamePortabilityCheck(fileName);
a61af66fc99e Initial load
duke
parents:
diff changeset
98 FileList newList = new FileList(fileName, plat);
a61af66fc99e Initial load
duke
parents:
diff changeset
99 add(newList);
a61af66fc99e Initial load
duke
parents:
diff changeset
100 return newList;
a61af66fc99e Initial load
duke
parents:
diff changeset
101 }
a61af66fc99e Initial load
duke
parents:
diff changeset
102
a61af66fc99e Initial load
duke
parents:
diff changeset
103 public boolean hasListForFile(String fileName) {
a61af66fc99e Initial load
duke
parents:
diff changeset
104 for (Iterator iter = iterator(); iter.hasNext(); ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
105 FileList fl = (FileList) iter.next();
a61af66fc99e Initial load
duke
parents:
diff changeset
106 if (plat.fileNameStringEquality(fl.name, fileName)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
107 plat.fileNamePortabilityCheck(fl.name, fileName);
a61af66fc99e Initial load
duke
parents:
diff changeset
108 return true;
a61af66fc99e Initial load
duke
parents:
diff changeset
109 }
a61af66fc99e Initial load
duke
parents:
diff changeset
110 }
a61af66fc99e Initial load
duke
parents:
diff changeset
111 return false;
a61af66fc99e Initial load
duke
parents:
diff changeset
112 }
a61af66fc99e Initial load
duke
parents:
diff changeset
113
a61af66fc99e Initial load
duke
parents:
diff changeset
114 public boolean compareLists(FileList s) {
a61af66fc99e Initial load
duke
parents:
diff changeset
115 Iterator myIter = iterator();
a61af66fc99e Initial load
duke
parents:
diff changeset
116 Iterator hisIter = s.iterator();
a61af66fc99e Initial load
duke
parents:
diff changeset
117
a61af66fc99e Initial load
duke
parents:
diff changeset
118 while (myIter.hasNext() &&
a61af66fc99e Initial load
duke
parents:
diff changeset
119 hisIter.hasNext()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
120 // crude: order dependent
a61af66fc99e Initial load
duke
parents:
diff changeset
121 FileList myElement = (FileList) myIter.next();
a61af66fc99e Initial load
duke
parents:
diff changeset
122 FileList hisElement = (FileList) hisIter.next();
a61af66fc99e Initial load
duke
parents:
diff changeset
123 if (!plat.fileNameStringEquality(myElement.name,
a61af66fc99e Initial load
duke
parents:
diff changeset
124 hisElement.name)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
125 return false;
a61af66fc99e Initial load
duke
parents:
diff changeset
126 }
a61af66fc99e Initial load
duke
parents:
diff changeset
127 }
a61af66fc99e Initial load
duke
parents:
diff changeset
128
a61af66fc99e Initial load
duke
parents:
diff changeset
129 if (myIter.hasNext() != hisIter.hasNext()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
130 // One ended earlier
a61af66fc99e Initial load
duke
parents:
diff changeset
131 return false;
a61af66fc99e Initial load
duke
parents:
diff changeset
132 }
a61af66fc99e Initial load
duke
parents:
diff changeset
133
a61af66fc99e Initial load
duke
parents:
diff changeset
134 return true;
a61af66fc99e Initial load
duke
parents:
diff changeset
135 }
a61af66fc99e Initial load
duke
parents:
diff changeset
136
a61af66fc99e Initial load
duke
parents:
diff changeset
137 public void addIfAbsent(FileList s) {
a61af66fc99e Initial load
duke
parents:
diff changeset
138 for (Iterator iter = iterator(); iter.hasNext(); ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
139 if (iter.next() == s) {
a61af66fc99e Initial load
duke
parents:
diff changeset
140 return;
a61af66fc99e Initial load
duke
parents:
diff changeset
141 }
a61af66fc99e Initial load
duke
parents:
diff changeset
142 }
a61af66fc99e Initial load
duke
parents:
diff changeset
143 add(s);
a61af66fc99e Initial load
duke
parents:
diff changeset
144 }
a61af66fc99e Initial load
duke
parents:
diff changeset
145
a61af66fc99e Initial load
duke
parents:
diff changeset
146 public void sortByName() {
a61af66fc99e Initial load
duke
parents:
diff changeset
147 Collections.sort(this, new Comparator() {
a61af66fc99e Initial load
duke
parents:
diff changeset
148 public int compare(Object o1, Object o2) {
a61af66fc99e Initial load
duke
parents:
diff changeset
149 FileList fl1 = (FileList) o1;
a61af66fc99e Initial load
duke
parents:
diff changeset
150 FileList fl2 = (FileList) o2;
a61af66fc99e Initial load
duke
parents:
diff changeset
151 return fl1.getName().compareTo(fl2.getName());
a61af66fc99e Initial load
duke
parents:
diff changeset
152 }
a61af66fc99e Initial load
duke
parents:
diff changeset
153 });
a61af66fc99e Initial load
duke
parents:
diff changeset
154 }
a61af66fc99e Initial load
duke
parents:
diff changeset
155
a61af66fc99e Initial load
duke
parents:
diff changeset
156 public void setFirstFile(FileList s) {
a61af66fc99e Initial load
duke
parents:
diff changeset
157 // Remove the file list if it's already here
a61af66fc99e Initial load
duke
parents:
diff changeset
158 remove(s);
a61af66fc99e Initial load
duke
parents:
diff changeset
159 add(0, s);
a61af66fc99e Initial load
duke
parents:
diff changeset
160 }
a61af66fc99e Initial load
duke
parents:
diff changeset
161
a61af66fc99e Initial load
duke
parents:
diff changeset
162 public void setLastFile(FileList s) {
a61af66fc99e Initial load
duke
parents:
diff changeset
163 // Remove the file list if it's already here
a61af66fc99e Initial load
duke
parents:
diff changeset
164 remove(s);
a61af66fc99e Initial load
duke
parents:
diff changeset
165 add(s);
a61af66fc99e Initial load
duke
parents:
diff changeset
166 }
a61af66fc99e Initial load
duke
parents:
diff changeset
167
a61af66fc99e Initial load
duke
parents:
diff changeset
168 public boolean doFiles(FileList s) {
a61af66fc99e Initial load
duke
parents:
diff changeset
169 boolean result = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
170 for (Iterator iter = iterator(); iter.hasNext(); ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
171 FileList h = (FileList) iter.next();
a61af66fc99e Initial load
duke
parents:
diff changeset
172 if (h.platformDependentInclude != null) {
a61af66fc99e Initial load
duke
parents:
diff changeset
173 System.err.println("Error: the source for " +
a61af66fc99e Initial load
duke
parents:
diff changeset
174 h.platformDependentInclude +
a61af66fc99e Initial load
duke
parents:
diff changeset
175 " is " + h.name + ".");
a61af66fc99e Initial load
duke
parents:
diff changeset
176 System.err.println("\tIt shouldn't be included directly by " +
a61af66fc99e Initial load
duke
parents:
diff changeset
177 name + ".");
a61af66fc99e Initial load
duke
parents:
diff changeset
178 h.platformDependentInclude = null; // report once per file
a61af66fc99e Initial load
duke
parents:
diff changeset
179 result = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
180 }
a61af66fc99e Initial load
duke
parents:
diff changeset
181 h.doHFile(s);
a61af66fc99e Initial load
duke
parents:
diff changeset
182 }
a61af66fc99e Initial load
duke
parents:
diff changeset
183 return result;
a61af66fc99e Initial load
duke
parents:
diff changeset
184 }
a61af66fc99e Initial load
duke
parents:
diff changeset
185
a61af66fc99e Initial load
duke
parents:
diff changeset
186 public void traceCycle(FileList s) {
a61af66fc99e Initial load
duke
parents:
diff changeset
187 if (isCycle) // already traced
a61af66fc99e Initial load
duke
parents:
diff changeset
188 return;
a61af66fc99e Initial load
duke
parents:
diff changeset
189 isCycle = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
190 System.err.println("\ttracing cycle for " + name);
a61af66fc99e Initial load
duke
parents:
diff changeset
191 // FIXME: must return status in caller routine
a61af66fc99e Initial load
duke
parents:
diff changeset
192 // exitCode = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
193 for (Iterator iter = iterator(); iter.hasNext(); ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
194 FileList q = (FileList) iter.next();
a61af66fc99e Initial load
duke
parents:
diff changeset
195 if (q.mayBeCycle) {
a61af66fc99e Initial load
duke
parents:
diff changeset
196 if (s == q) {
a61af66fc99e Initial load
duke
parents:
diff changeset
197 plat.fatalError("\tend of cycle for " + s.getName());
a61af66fc99e Initial load
duke
parents:
diff changeset
198 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
199 q.traceCycle(s);
a61af66fc99e Initial load
duke
parents:
diff changeset
200 }
a61af66fc99e Initial load
duke
parents:
diff changeset
201 }
a61af66fc99e Initial load
duke
parents:
diff changeset
202 }
a61af66fc99e Initial load
duke
parents:
diff changeset
203 }
a61af66fc99e Initial load
duke
parents:
diff changeset
204
a61af66fc99e Initial load
duke
parents:
diff changeset
205 public void doHFile(FileList s) {
a61af66fc99e Initial load
duke
parents:
diff changeset
206 if (beenHere) {
a61af66fc99e Initial load
duke
parents:
diff changeset
207 if (mayBeCycle) {
a61af66fc99e Initial load
duke
parents:
diff changeset
208 traceCycle(this);
a61af66fc99e Initial load
duke
parents:
diff changeset
209 }
a61af66fc99e Initial load
duke
parents:
diff changeset
210 return;
a61af66fc99e Initial load
duke
parents:
diff changeset
211 }
a61af66fc99e Initial load
duke
parents:
diff changeset
212 beenHere = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
213 mayBeCycle = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
214 doFiles(s);
a61af66fc99e Initial load
duke
parents:
diff changeset
215 mayBeCycle = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
216 s.add(this);
a61af66fc99e Initial load
duke
parents:
diff changeset
217 }
a61af66fc99e Initial load
duke
parents:
diff changeset
218
a61af66fc99e Initial load
duke
parents:
diff changeset
219 public FileList doCFile() {
a61af66fc99e Initial load
duke
parents:
diff changeset
220 FileList s = new FileList(name, plat);
a61af66fc99e Initial load
duke
parents:
diff changeset
221 s.useGrandInclude = useGrandInclude; // propagate this
a61af66fc99e Initial load
duke
parents:
diff changeset
222 doFiles(s);
a61af66fc99e Initial load
duke
parents:
diff changeset
223 for (Iterator iter = s.iterator(); iter.hasNext(); ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
224 FileList l = (FileList) iter.next();
a61af66fc99e Initial load
duke
parents:
diff changeset
225 l.beenHere = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
226 }
a61af66fc99e Initial load
duke
parents:
diff changeset
227 return s;
a61af66fc99e Initial load
duke
parents:
diff changeset
228 }
a61af66fc99e Initial load
duke
parents:
diff changeset
229
a61af66fc99e Initial load
duke
parents:
diff changeset
230 /** if .h file is included thresh times, put it in the grand
a61af66fc99e Initial load
duke
parents:
diff changeset
231 include file */
a61af66fc99e Initial load
duke
parents:
diff changeset
232 public void putInclFile(Database db)
a61af66fc99e Initial load
duke
parents:
diff changeset
233 throws IOException {
a61af66fc99e Initial load
duke
parents:
diff changeset
234 boolean needline = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
235 FileName inclName = plat.getInclFileTemplate().copyStem(name);
a61af66fc99e Initial load
duke
parents:
diff changeset
236 PrintWriter inclFile =
a61af66fc99e Initial load
duke
parents:
diff changeset
237 new PrintWriter(new FileWriter(inclName.dirPreStemSuff()));
a61af66fc99e Initial load
duke
parents:
diff changeset
238 if (plat.haveGrandInclude() && plat.includeGIInEachIncl()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
239 inclFile.println("# include \"" +
a61af66fc99e Initial load
duke
parents:
diff changeset
240 plat.getGIFileTemplate().dirPreStemAltSuff() +
a61af66fc99e Initial load
duke
parents:
diff changeset
241 "\"");
a61af66fc99e Initial load
duke
parents:
diff changeset
242 needline = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
243 }
a61af66fc99e Initial load
duke
parents:
diff changeset
244 for (Iterator iter = iterator(); iter.hasNext(); ) {
a61af66fc99e Initial load
duke
parents:
diff changeset
245 FileList hfile = (FileList) iter.next();
a61af66fc99e Initial load
duke
parents:
diff changeset
246 if (!db.hfileIsInGrandInclude(hfile, this)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
247 inclFile.println("# include \"" +
a61af66fc99e Initial load
duke
parents:
diff changeset
248 plat.getInclFileTemplate().getInvDir() +
a61af66fc99e Initial load
duke
parents:
diff changeset
249 hfile.name +
a61af66fc99e Initial load
duke
parents:
diff changeset
250 "\"");
a61af66fc99e Initial load
duke
parents:
diff changeset
251 needline = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
252 }
a61af66fc99e Initial load
duke
parents:
diff changeset
253 }
a61af66fc99e Initial load
duke
parents:
diff changeset
254
a61af66fc99e Initial load
duke
parents:
diff changeset
255 // Solaris C++ in strict mode warns about empty files
a61af66fc99e Initial load
duke
parents:
diff changeset
256
a61af66fc99e Initial load
duke
parents:
diff changeset
257 if(needline) {
a61af66fc99e Initial load
duke
parents:
diff changeset
258 inclFile.println();
a61af66fc99e Initial load
duke
parents:
diff changeset
259 }
a61af66fc99e Initial load
duke
parents:
diff changeset
260
a61af66fc99e Initial load
duke
parents:
diff changeset
261 inclFile.close();
a61af66fc99e Initial load
duke
parents:
diff changeset
262 }
a61af66fc99e Initial load
duke
parents:
diff changeset
263 }