]> andersk Git - splint.git/blob - src/Headers/fileTable.h
d5ec489fb44ddad3a69716c0c942802fd7303c82
[splint.git] / src / Headers / fileTable.h
1 /*
2 ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2003.
3 ** See ../LICENSE for license information.
4 **
5 */
6 /*
7 ** fileTable.h
8 */
9
10 # ifndef FILETABLE_H
11 # define FILETABLE_H
12
13 /*@constant int FTBASESIZE; @*/
14 # define FTBASESIZE 64
15
16 /* moved to fileloc.h
17 **    typedef int fileId;
18 */
19
20 typedef enum { FILE_NORMAL, FILE_LSLTEMP, FILE_NODELETE,
21                FILE_HEADER, FILE_XH, FILE_MACROS, FILE_METASTATE } fileType;
22
23 /*@private@*/ typedef struct
24 {
25   bool     ftemp     BOOLBITS;
26   bool     fsystem   BOOLBITS;
27   bool     fspecial  BOOLBITS;
28   /*@only@*/ cstring fname;
29   cstring  basename;
30   fileType ftype;
31   fileId   fder;
32 } *ftentry;
33
34 typedef /*@only@*/ ftentry o_ftentry;
35
36 typedef /*@only@*/ struct {
37   /*@null@*/ /*@dependent@*/ /*@exposed@*/ FILE *f;
38   /*@only@*/ cstring fname;
39 } *foentry;
40
41 abst_typedef /*@null@*/ struct
42 {
43   int nentries;
44   int nspace;
45   cstringTable htable;
46   /*@reldef@*/ /*@only@*/ o_ftentry *elements;
47
48   /*
49   ** Keep track of all the open files, so we can close them on error exits.
50   */
51
52   int nopen;
53   int nopenspace;
54   /*@reldef@*/ /*@only@*/ foentry *openelements; /* evans 2002-07-12: removed reldef */
55 } *fileTable ;
56
57 /*@constant null fileTable fileTable_undefined; @*/
58 # define fileTable_undefined ((fileTable) NULL)
59
60 extern /*@unused@*/ /*@nullwhentrue@*/ bool 
61   fileTable_isUndefined (/*@null@*/ fileTable p_f) /*@*/ ;
62 extern /*@unused@*/ /*@falsewhennull@*/ bool 
63   fileTable_isDefined (/*@null@*/ fileTable p_f) /*@*/ ;
64
65 # define fileTable_isUndefined(ft) ((ft) == fileTable_undefined)
66 # define fileTable_isDefined(ft) ((ft) != fileTable_undefined)
67 extern /*@observer@*/ cstring fileTable_getName (fileTable p_ft, fileId p_fid) /*@*/ ; 
68 extern /*@observer@*/ cstring fileTable_getNameBase (fileTable p_ft, fileId p_fid) ; 
69 extern fileId fileTable_addFile (fileTable p_ft, cstring p_name)
70    /*@modifies p_ft@*/ ;
71
72 extern void fileTable_addStreamFile (fileTable p_ft, /*@dependent@*/ FILE *p_fstream,
73                                      cstring p_name)
74    /*@modifies p_ft@*/ ;
75
76 extern fileId fileTable_addHeaderFile (fileTable p_ft, cstring p_name)
77    /*@modifies p_ft@*/ ;
78 extern fileId fileTable_addXHFile (fileTable p_ft, cstring p_name)
79    /*@modifies p_ft@*/ ;
80 extern fileId fileTable_addLibraryFile (fileTable p_ft, cstring p_name)
81    /*@modifies p_ft@*/ ;
82
83 extern fileId fileTable_addLCLFile (fileTable p_ft, cstring p_name)
84    /*@modifies p_ft@*/ ;
85
86 extern fileId fileTable_addltemp (fileTable p_ft);
87
88 extern /*@notnull@*/ /*@only@*/ fileTable fileTable_create (void) /*@*/ ;
89 extern fileId fileTable_lookup (fileTable p_ft, cstring p_s) /*@*/ ;
90 extern fileId fileTable_addCTempFile (fileTable p_ft, fileId p_fid)
91    /*@modifies p_ft@*/ ;
92 extern fileId fileTable_addFileOnly (fileTable p_ft, /*@only@*/ cstring p_name)
93    /*@modifies p_ft@*/ ;
94
95 extern fileId fileTable_addImportFile (fileTable p_ft, cstring p_name)
96    /*@modifies p_ft@*/ ;
97
98 extern fileId fileTable_addMacrosFile (fileTable p_ft)
99    /*@modifies p_ft@*/ ;
100
101 extern fileId fileTable_addMetastateFile (fileTable p_ft, cstring p_name)
102    /*@modifies p_ft@*/ ;
103
104 extern void fileTable_setFilePath (fileTable p_ft, fileId p_fid, cstring p_path) 
105      /*@modifies p_ft@*/ ;
106
107 extern /*@observer@*/ cstring fileTable_getRootName (fileTable p_ft, fileId p_fid) /*@*/ ;
108 extern bool fileTable_isHeader       (fileTable p_ft, fileId p_fid) /*@*/ ;
109 extern bool fileId_isHeader (fileId p_f) /*@*/ ;
110 # define fileId_isHeader(f)          (fileTable_isHeader (context_fileTable(), f))
111
112 extern bool fileTable_sameBase (fileTable p_ft, fileId p_f1, fileId p_f2);
113 extern void fileTable_cleanup (fileTable p_ft) /*@modifies fileSystem@*/;
114 extern fileId fileTable_lookupBase (fileTable p_ft, cstring p_base) /*@modifies p_ft@*/ ;
115 extern void fileTable_printTemps (fileTable p_ft) /*@modifies g_warningstream@*/ ;
116 extern /*@unused@*/ /*@only@*/ cstring fileTable_unparse (fileTable p_ft) /*@*/ ;
117 extern bool fileTable_exists (fileTable p_ft, cstring p_s) /*@*/ ;
118 extern void fileTable_free (/*@only@*/ fileTable p_f);
119 extern bool fileTable_isSpecialFile (fileTable p_ft, fileId p_fid) /*@*/ ;
120 extern bool fileTable_isSystemFile (fileTable p_ft, fileId p_fid) /*@*/ ;
121 extern bool fileTable_isXHFile (fileTable p_ft, fileId p_fid) /*@*/ ;
122
123 extern /*@observer@*/ cstring fileTable_fileName (fileId p_fid) /*@*/ ;
124 extern /*@observer@*/ cstring fileTable_fileNameBase (fileId p_fid) /*@*/ ;
125 extern /*@observer@*/ cstring fileTable_rootFileName (fileId p_fid) /*@*/ ;
126
127 extern /*@null@*/ /*@open@*/ /*@dependent@*/ FILE *fileTable_createFile (fileTable p_ft, cstring p_fname) 
128      /*@modifies p_ft, fileSystem@*/ ;
129
130 extern /*@null@*/ /*@open@*/ /*@dependent@*/ FILE *fileTable_createMacrosFile (fileTable p_ft, cstring p_fname) 
131      /*@modifies p_ft, fileSystem@*/ ;
132
133 # define fileTable_fileName(fid)     (fileTable_getName(context_fileTable(), fid))
134 # define fileTable_fileNameBase(fid) (fileTable_getNameBase(context_fileTable(), fid))
135 # define fileTable_rootFileName(fid) (fileTable_getRootName(context_fileTable(), fid))
136
137 extern void fileTable_noDelete (fileTable, cstring);
138 extern bool fileId_baseEqual (/*@sef@*/ fileId p_t1, /*@sef@*/ fileId p_t2) /*@*/ ;
139 # define fileId_baseEqual(t1,t2) \
140   (fileId_equal (t1, t2) || fileTable_sameBase (context_fileTable (), t1, t2))
141
142 extern /*@null@*/ /*@open@*/ /*@dependent@*/ FILE *
143 fileTable_openReadFile (fileTable p_ft, cstring p_fname) 
144      /*@modifies p_ft@*/ ;
145
146 extern /*@null@*/ /*@open@*/ /*@dependent@*/ FILE *
147 fileTable_openWriteFile (fileTable p_ft, cstring p_fname) 
148      /*@modifies p_ft@*/ ;
149
150 extern /*@null@*/ /*@open@*/ /*@dependent@*/ FILE *
151 fileTable_openWriteUpdateFile (fileTable p_ft, cstring p_fname) 
152      /*@modifies p_ft@*/ ;
153
154 extern bool fileTable_closeFile (fileTable p_ft, FILE *p_f) 
155    /*@ensures closed p_f@*/ 
156    /*@modifies p_ft, p_f@*/ ;
157
158 extern void fileTable_closeAll (fileTable p_ft)
159   /*@modifies p_ft@*/ ;
160
161 # else
162 # error "Multiple include"
163 #endif
164
This page took 0.048175 seconds and 3 git commands to generate.