2 ** Splint - annotation-assisted static program checker
3 ** Copyright (C) 1994-2003 University of Virginia,
4 ** Massachusetts Institute of Technology
6 ** This program is free software; you can redistribute it and/or modify it
7 ** under the terms of the GNU General Public License as published by the
8 ** Free Software Foundation; either version 2 of the License, or (at your
9 ** option) any later version.
11 ** This program is distributed in the hope that it will be useful, but
12 ** WITHOUT ANY WARRANTY; without even the implied warranty of
13 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 ** General Public License for more details.
16 ** The GNU General Public License is available from http://www.gnu.org/ or
17 ** the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
18 ** MA 02111-1307, USA.
20 ** For information on splint: info@splint.org
21 ** To report a bug: splint-bug@splint.org
22 ** For more information: http://www.splint.org
28 # include "splintMacros.nf"
33 fileLib_isCExtension (cstring ext)
35 return (cstring_equalLit (ext, ".c")
36 || cstring_equalLit (ext, ".C")
37 || cstring_equalLit (ext, ".h")
38 || cstring_equalLit (ext, ".lh")
39 || cstring_equalLit (ext, ".xh")
40 || cstring_equalLit (ext, ".H")
41 || cstring_equalLit (ext, ".y")
42 || cstring_equalLit (ext, ".l"));
46 fileLib_isLCLFile (cstring s)
48 return (fileLib_hasExtension (s, LCL_EXTENSION));
51 /*@only@*/ cstring fileLib_withoutExtension (/*@temp@*/ cstring s, cstring suffix)
57 if (cstring_isUndefined (s)) {
58 return cstring_undefined;
62 if (t == (char *) 0 || !mstring_equal (t, suffix))
64 return mstring_copy (s);
69 s2 = mstring_copy (s);
71 /*@=mods@*/ /* Modification is undone. */
73 /*@noaccess cstring@*/
76 /*@only@*/ cstring fileLib_removePath (cstring s)
81 if (cstring_isUndefined (s)) {
82 return cstring_undefined;
85 t = strrchr (s, CONNECTCHAR);
87 if (t == NULL) return (mstring_copy (s));
88 else return (mstring_copy (t + 1));
89 /*@noaccess cstring@*/
93 fileLib_removePathFree (/*@only@*/ cstring s)
99 if (cstring_isUndefined (s)) {
100 return cstring_undefined;
103 t = strrchr (s, CONNECTCHAR);
105 # ifdef ALTCONNECTCHAR
107 char *at = strrchr (s, ALTCONNECTCHAR);
108 if (t == NULL || (at > t)) {
120 char *res = mstring_copy (t + 1);
124 /*@noaccess cstring@*/
128 fileLib_removeAnyExtension (cstring s)
135 if (cstring_isUndefined (s)) {
136 return cstring_undefined;
139 t = strrchr (s, '.');
143 return mstring_copy (s);
148 ret = mstring_copy (s);
150 /*@=mods@*/ /* modification is undone */
153 /*@noaccess cstring@*/
157 fileLib_addExtension (/*@temp@*/ cstring s, cstring suffix)
160 llassert (cstring_isDefined (s));
162 if (strrchr (s, '.') == (char *) 0)
164 /* <<< was mstring_concatFree1 --- bug detected by splint >>> */
165 return (cstring_concat (s, suffix));
169 return cstring_copy (s);
173 bool fileLib_hasExtension (cstring s, cstring ext)
175 return cstring_equal (fileLib_getExtension (s), ext);
178 /*@observer@*/ cstring fileLib_getExtension (/*@returned@*/ cstring s)
180 llassert (cstring_isDefined (s));
183 return (strrchr(s, '.'));
184 /*@noaccess cstring@*/
187 cstring removePreDirs (cstring s)
191 llassert (cstring_isDefined (s));
193 while (*s == '.' && *(s + 1) == CONNECTCHAR)
198 # if defined(OS2) || defined(MSDOS)
199 /* remove remainders from double path delimiters... */
200 while (*s == CONNECTCHAR)
204 # endif /* !defined(OS2) && !defined(MSDOS) */
207 /*@noaccess cstring@*/
210 bool isHeaderFile (cstring fname)
212 cstring ext = fileLib_getExtension (fname);
214 return (cstring_equalLit (ext, ".h")
215 || cstring_equalLit (ext, ".H")
216 || cstring_equal (ext, LH_EXTENSION));
219 cstring fileLib_cleanName (cstring s)
221 if (cstring_equalPrefixLit (s, "./"))
223 return cstring_copySegment (s, 2, cstring_length (s) - 1);
226 return cstring_copy (s);