]> andersk Git - splint.git/blob - lib/ansi.h
Created repository.
[splint.git] / lib / ansi.h
1 /*
2 ** ansi.h --- LCLint Standard C Library
3 **
4 ** Process with -DSTRICT to get strict library.
5 */
6
7 /*@-nextlinemacros@*/
8 /*@+allimponly@*/
9 /*@+globsimpmodifiesnothing@*/
10
11 /*
12 ** errno.h
13 */
14
15 /*@constant int EDOM;@*/
16 /*@constant int ERANGE;@*/
17 /*@constant int EILSEQ;@*/
18
19 # ifdef STRICT
20 /*@checkedstrict@*/ extern int errno;
21 # else 
22 /*@unchecked@*/ extern int errno;
23 # endif
24
25 /*
26 ** types 
27 */
28
29 typedef /*@integraltype@*/ ptrdiff_t;    
30 typedef /*@unsignedintegraltype@*/ size_t;
31 typedef /*@signedintegraltype@*/ ssize_t;
32 typedef /*@integraltype@*/ wchar_t;
33
34 /*
35 ** Added by Amendment 1 to ISO.
36 */
37
38 typedef /*@integraltype@*/ wint_t;
39 typedef /*@abstract@*/ mbstate_t;
40
41 /*@constant null anytype NULL = 0;@*/
42
43 /*
44 ** assert.h
45 */
46
47 /*@constant lltX_bool NDEBUG;@*/
48
49 # ifdef STRICT
50 extern /*@falseexit@*/ void assert (/*@sef@*/ lltX_bool e) 
51   /*@*/ ;
52 # else
53 extern /*@falseexit@*/ void assert (/*@sef@*/ lltX_bool /*@alt int@*/ e) 
54   /*@*/ ;
55 # endif
56
57
58 /*
59 ** ctype.h
60 */
61
62 # ifdef STRICT
63 extern lltX_bool isalnum (unsigned char c) /*@*/ ;
64 extern lltX_bool isalpha (unsigned char c) /*@*/ ;
65 extern lltX_bool iscntrl (unsigned char c) /*@*/ ;
66 extern lltX_bool isdigit (unsigned char c) /*@*/ ;
67 extern lltX_bool isgraph (unsigned char c) /*@*/ ;
68 extern lltX_bool islower (unsigned char c) /*@*/ ;
69 extern lltX_bool isprint (unsigned char c) /*@*/ ;
70 extern lltX_bool ispunct (unsigned char c) /*@*/ ;
71 extern lltX_bool isspace (unsigned char c) /*@*/ ;
72 extern lltX_bool isupper (unsigned char c) /*@*/ ;
73 extern lltX_bool isxdigit (unsigned char c) /*@*/ ;
74 extern char tolower (unsigned char c) /*@*/ ;
75 extern char toupper (unsigned char c) /*@*/ ;
76 # else
77 extern lltX_bool /*@alt int@*/ isalnum (unsigned char /*@alt int@*/ c) /*@*/ ;
78 extern lltX_bool /*@alt int@*/ isalpha (unsigned char /*@alt int@*/ c) /*@*/ ;
79 extern lltX_bool /*@alt int@*/ iscntrl (unsigned char /*@alt int@*/ c) /*@*/ ;
80 extern lltX_bool /*@alt int@*/ isdigit (unsigned char /*@alt int@*/ c) /*@*/ ;
81 extern lltX_bool /*@alt int@*/ isgraph (unsigned char /*@alt int@*/ c) /*@*/ ;
82 extern lltX_bool /*@alt int@*/ islower (unsigned char /*@alt int@*/ c) /*@*/ ;
83 extern lltX_bool /*@alt int@*/ isprint (unsigned char /*@alt int@*/ c) /*@*/ ;
84 extern lltX_bool /*@alt int@*/ ispunct (unsigned char /*@alt int@*/ c) /*@*/ ;
85 extern lltX_bool /*@alt int@*/ isspace (unsigned char /*@alt int@*/ c) /*@*/ ;
86 extern lltX_bool /*@alt int@*/ isupper (unsigned char /*@alt int@*/ c) /*@*/ ;
87 extern lltX_bool /*@alt int@*/ isxdigit (unsigned char /*@alt int@*/ c) /*@*/ ;
88 extern char /*@alt int@*/ tolower (unsigned char /*@alt int@*/ c) /*@*/ ;
89 extern char /*@alt int@*/ toupper (unsigned char /*@alt int@*/ c) /*@*/ ;
90 # endif
91
92 /*
93 ** locale.h
94 */
95
96 struct lconv
97 {
98   char *decimal_point;
99   char *thousands_sep;
100   char *grouping;
101   char *int_curr_symbol;
102   char *currency_symbol;
103   char *mon_decimal_point;
104   char *mon_thousands_sep;
105   char *mon_grouping;
106   char *positive_sign;
107   char *negative_sign;
108   char int_frac_digits;
109   char frac_digits;
110   char p_cs_precedes;
111   char p_sep_by_space;
112   char n_cs_precedes;
113   char n_sep_by_space;
114   char p_sign_posn;
115   char n_sign_posn;
116 } ;
117
118 /*@constant int LC_ALL;@*/
119 /*@constant int LC_COLLATE;@*/
120 /*@constant int LC_CTYPE;@*/
121 /*@constant int LC_MONETARY;@*/
122 /*@constant int LC_NUMERIC;@*/
123 /*@constant int LC_TIME;@*/
124
125 extern /*@observer@*/ /*@null@*/ char *setlocale (int category, /*@null@*/ char *locale) 
126    /*@modifies internalState, errno@*/ ;
127
128 extern struct lconv *localeconv (void) /*@*/ ;
129
130 /*
131 ** float.h
132 */
133
134 /*
135 ** Note, these are defined by macros, but NOT necessarily
136 ** constants.  They may be used as lvalues.
137 */
138
139 /*@unchecked@*/ extern int    DBL_DIG;
140 /*@unchecked@*/ extern double DBL_EPSILON;
141 /*@unchecked@*/ extern int    DBL_MANT_DIG;
142 /*@unchecked@*/ extern double DBL_MAX;
143 /*@unchecked@*/ extern int    DBL_MAX_10_EXP;
144 /*@unchecked@*/ extern int    DBL_MAX_EXP;
145 /*@unchecked@*/ extern double DBL_MIN;
146 /*@unchecked@*/ extern int    DBL_MIN_10_EXP;
147 /*@unchecked@*/ extern int    DBL_MIN_EXP;
148
149 /*@unchecked@*/ extern int   FLT_DIG;
150 /*@unchecked@*/ extern float FLT_EPSILON;
151 /*@unchecked@*/ extern int   FLT_MANT_DIG;
152 /*@unchecked@*/ extern float FLT_MAX;
153 /*@unchecked@*/ extern int   FLT_MAX_10_EXP;
154 /*@unchecked@*/ extern int   FLT_MAX_EXP;
155 /*@unchecked@*/ extern float FLT_MIN;
156 /*@unchecked@*/ extern int   FLT_MIN_10_EXP;
157 /*@unchecked@*/ extern int   FLT_MIN_EXP;
158 /*@constant            int   FLT_RADIX@*/
159 /*@unchecked@*/ extern int   FLT_ROUNDS;
160
161 /*@unchecked@*/ extern int         LDBL_DIG;
162 /*@unchecked@*/ extern long double LDBL_EPSILON;
163 /*@unchecked@*/ extern int         LDBL_MANT_DIG;
164 /*@unchecked@*/ extern long double LDBL_MAX;
165 /*@unchecked@*/ extern int         LDBL_MAX_10_EXP;
166 /*@unchecked@*/ extern int         LDBL_MAX_EXP;
167 /*@unchecked@*/ extern long double LDBL_MIN;
168 /*@unchecked@*/ extern int         LDBL_MIN_10_EXP;
169 /*@unchecked@*/ extern int         LDBL_MIN_EXP;
170
171 /*
172 ** limits.h
173 */
174
175 /*@constant int CHAR_BIT; @*/
176 /*@constant char CHAR_MAX; @*/
177 /*@constant char CHAR_MIN; @*/
178 /*@constant int INT_MAX; @*/
179 /*@constant int INT_MIN; @*/
180 /*@constant long int LONG_MAX; @*/
181 /*@constant long int LONG_MIN; @*/
182 /*@constant long int MB_LEN_MAX@*/
183 /*@constant signed char SCHAR_MAX; @*/
184 /*@constant signed char SCHAR_MIN; @*/
185 /*@constant short SHRT_MAX; @*/
186 /*@constant short SHRT_MIN; @*/
187 /*@constant unsigned char UCHAR_MAX; @*/
188 /*@constant unsigned char UCHAR_MIN; @*/
189 /*@constant unsigned int UINT_MAX; @*/
190 /*@constant unsigned long ULONG_MAX; @*/
191 /*@constant unsigned short USHRT_MAX; @*/
192
193 /*
194 ** math.h
195 */
196
197 /*@constant double HUGE_VAL; @*/
198
199 /*
200 ** math functions that may have a range error modify errno 
201 */
202
203 extern double sin (double x) /*@*/ ;
204 extern double cos (double x) /*@*/ ;
205 extern double tan (double x) /*@*/ ;
206 extern double asin (double x) /*@modifies errno@*/ ;
207 extern double acos (double x) /*@modifies errno@*/ ;
208 extern double atan (double x) /*@*/ ;
209 extern double atan2 (double y, double x) /*@*/ ;
210 extern double sinh (double x) /*@*/ ;
211 extern double cosh (double x) /*@modifies errno@*/ ;
212 extern double tanh (double x) /*@*/ ;
213
214 extern double exp (double x) /*@modifies errno@*/ ;
215 extern double ldexp (double x, int n) /*@modifies errno@*/ ;
216 extern double frexp (double x, /*@out@*/ int *xp) /*@modifies *xp;@*/ ;
217
218 extern double log (double x) /*@modifies errno@*/ ;
219 extern double log10 (double x) /*@modifies errno@*/ ;
220
221 extern double pow (double x, double y) /*@modifies errno@*/ ;
222 extern double sqrt (double x) /*@modifies errno@*/ ;
223
224 extern double ceil (double x) /*@*/ ;
225 extern double floor (double x) /*@*/ ;
226 extern double fabs (double x) /*@*/ ;
227
228 double modf (double x, /*@out@*/ double *ip) /*@modifies *ip;@*/ ;
229 double fmod (double x, double y) /*@*/ ;
230
231 /*
232 ** These functions are optional in iso C.  An implementation does not
233 ** have to provide them.  They are included in comments here, but
234 ** are not required to be part of the standard library.
235 */
236
237 # ifdef OPTIONAL_MATH
238
239 extern float acosf (float x) /*@modifies errno@*/ ;
240 extern long double acosl (long double x) /*@modifies errno@*/ ;
241 extern float asinf (float x)    /*@modifies errno@*/ ;
242 extern long double asinl (long double x) /*@modifies errno@*/ ;
243 extern float atanf (float x)    /*@*/ ;
244 extern long double atanl (long double x) /*@*/ ;
245 extern float atan2f (float y, float x) /*@*/ ;
246 extern long double atan2l (long double y, long double x) /*@*/ ;
247 extern float ceilf (float x)    /*@*/ ;
248 extern long double ceill (long double x) /*@*/ ;
249 extern float cosf (float x) /*@*/ ;
250 extern long double cosl (long double x) /*@*/ ;
251 extern float coshf (float x)    /*@modifies errno@*/ ;
252 extern long double coshl (long double x) /*@modifies errno@*/ ;
253 extern float expf (float x) /*@modifies errno@*/ ;
254 extern long double expl (long double x) /*@modifies errno@*/;
255 extern float fabsf (float x)    /*@*/ ;
256 extern long double fabsl (long double x) /*@*/ ;
257 extern float floorf (float x) /*@*/ ;
258 extern long double floorl (long double x) /*@*/ ;
259 extern float fmodf (float x, float y) /*@*/ ;
260 extern long double fmodl (long double x, long double y) /*@*/ ;
261 extern float frexpf (float x, /*@out@*/ int *xp) /*@modifies *xp@*/;
262 extern long double frexpl (long double x, /*@out@*/ int *xp) /*@modifies *xp@*/;
263 extern float ldexpf (float x, int n) /*@modifies errno@*/ ;
264 extern long double ldexpl (long double x, int n) /*@modifies errno@*/ ;
265 extern float logf (float x) /*@modifies errno@*/ ;
266 extern long double logl (long double x) /*@modifies errno@*/ ;
267 extern float log10f (float x) /*@modifies errno@*/;
268 extern long double log10l (long double x) /*@modifies errno@*/;
269 extern float modff (float x, /*@out@*/ float *xp) /*@modifies *xp@*/ ;
270 extern long double modfl (long double x, /*@out@*/ long double *xp) /*@modifies *xp@*/ ;
271 extern float powf (float x, float y) /*@modifies errno@*/ ;
272 extern long double powl (long double x, long double y) /*@modifies errno@*/ ;
273 extern float sinf (float x) /*@*/ ;
274 extern long double sinl (long double x) /*@*/ ;
275 extern float sinhf (float x) /*@*/ ;
276 extern long double sinhl (long double x) /*@*/ ;
277 extern float sqrtf (float x) /*@modifies errno@*/ ;
278 extern long double sqrtl (long double x) /*@modifies errno@*/ ;
279 extern float tanf (float x) /*@*/ ;
280 extern long double tanl (long double x) /*@*/ ;
281 extern float tanhf (float x) /*@*/ ;
282 extern long double tanhl (long double x) /*@*/ ;
283
284 # endif
285
286 /*
287 ** setjmp.h
288 */
289
290 typedef /*@abstract@*/ /*@mutable@*/ void *jmp_buf;
291
292 extern int setjmp (/*@out@*/ jmp_buf env) /*@modifies env;@*/ ;
293 extern /*@mayexit@*/ void longjmp (jmp_buf env, int val) /*@*/ ;
294
295 /*
296 ** signal.h
297 */
298
299 /*@constant int SIGABRT; @*/
300 /*@constant int SIGFPE; @*/
301 /*@constant int SIGILL; @*/
302 /*@constant int SIGINT; @*/
303 /*@constant int SIGSEGV; @*/
304 /*@constant int SIGTERM; @*/
305
306 typedef /*@integraltype@*/ sig_atomic_t;
307
308 /*@constant void (*SIG_DFL)(int); @*/
309 /*@constant void (*SIG_ERR)(int); @*/
310 /*@constant void (*SIG_IGN)(int); @*/
311
312 /*
313 ** signal takes an int, and a function takes int returns void, and
314 ** returns the function (or NULL if unsuccessful).
315 */
316
317 extern /*@null@*/ void (*signal (int sig, /*@null@*/ void (*func)(int))) (int) 
318    /*@modifies internalState, errno;@*/ ;
319
320 extern /*@mayexit@*/ int raise (int sig) ;
321
322 /*
323 ** stdarg.h
324 */
325
326 typedef /*@abstract@*/ /*@mutable@*/ void *va_list;
327
328 extern void va_start (/*@out@*/ va_list ap, ...) /*@modifies ap;@*/ ;
329 extern void va_end (va_list va) /*@modifies va;@*/ ;
330
331 /*
332 ** va_arg is builtin
333 */
334
335 /*
336 ** stdio.h
337 */
338
339 typedef /*@abstract@*/ /*@mutable@*/ void *FILE;
340 typedef /*@abstract@*/ /*@mutable@*/ void *fpos_t;
341
342 /*@constant int _IOFBF; @*/
343 /*@constant int _IOLBF; @*/
344 /*@constant int _IONBF; @*/
345
346 /*@constant int BUFSIZ; @*/
347 /*@constant int EOF; @*/
348
349 /*@constant int FOPEN_MAX; @*/
350 /*@constant int FILENAME_MAX; @*/
351
352 /*@constant int L_tmpnam; @*/
353
354 /*@constant int SEEK_CUR; @*/
355 /*@constant int SEEK_END; @*/
356 /*@constant int SEEK_SET; @*/
357
358 /*@constant int TMP_MAX; @*/
359
360 # ifdef STRICT
361 /*@checked@*/ FILE *stderr;
362 /*@checked@*/ FILE *stdin;
363 /*@checked@*/ FILE *stdout;
364 # else
365 /*@unchecked@*/ FILE *stderr;
366 /*@unchecked@*/ FILE *stdin;
367 /*@unchecked@*/ FILE *stdout;
368 # endif
369
370 extern int remove (char *filename) /*@modifies fileSystem, errno@*/ ;
371 extern int rename (char *old, char *new) /*@modifies fileSystem, errno@*/ ;
372
373 extern /*@null@*/ FILE *tmpfile (void) /*@modifies fileSystem@*/ ;
374 extern /*@observer@*/ char *
375   tmpnam (/*@out@*/ /*@null@*/ /*@returned@*/ char *s) 
376   /*@modifies *s, internalState@*/ ;
377
378 extern int fclose (FILE *stream) /*@modifies *stream, errno, fileSystem;@*/ ;
379 extern int fflush (/*@null@*/ FILE *stream) 
380    /*@modifies *stream, errno, fileSystem;@*/ ;
381
382 extern /*@null@*/ /*@dependent@*/ FILE *fopen (char *filename, char *mode) 
383    /*@modifies fileSystem@*/ ;         
384
385 extern /*@null@*/ FILE *freopen (char *filename, char *mode, FILE *stream) 
386   /*@modifies *stream, fileSystem, errno@*/ ;
387
388 extern void setbuf (FILE *stream, /*@null@*/ /*@exposed@*/ char *buf) 
389    /*@modifies fileSystem, *stream, *buf@*/ ;
390
391 extern int setvbuf (FILE *stream, /*@null@*/ /*@exposed@*/ char *buf, 
392                     int mode, size_t size)
393    /*@modifies fileSystem, *stream, *buf@*/ ;
394
395 # ifdef STRICT
396 /*@printflike@*/ 
397 extern int fprintf (FILE *stream, char *format, ...)
398    /*@modifies fileSystem, *stream@*/ ;
399 # else
400 /*@printflike@*/ 
401 extern int /*@alt void@*/ fprintf (FILE *stream, char *format, ...)
402    /*@modifies fileSystem, *stream@*/ ;
403 # endif
404
405 /*@scanflike@*/ 
406 extern int fscanf (FILE *stream, char *format, ...)
407    /*@modifies fileSystem, *stream@*/ ;
408
409 # ifdef STRICT
410 /*@printflike@*/ 
411 extern int printf (char *format, ...) 
412    /*@globals stdout@*/
413    /*@modifies fileSystem, *stdout@*/ ;
414 # else
415 /*@printflike@*/ 
416 extern int /*@alt void@*/ printf (char *format, ...) 
417    /*@globals stdout@*/
418    /*@modifies fileSystem, *stdout@*/ ;
419 # endif
420
421 /*@scanflike@*/
422 extern int scanf(char *format, ...)
423    /*@globals stdin@*/
424    /*@modifies fileSystem, *stdin@*/ ;
425
426 # ifdef STRICT
427 /*@printflike@*/ 
428 extern int sprintf (/*@out@*/ char *s, char *format, ...) 
429    /*@modifies *s@*/ ;
430 # else
431 /*@printflike@*/ 
432 extern int /*@alt void@*/ sprintf (/*@out@*/ char *s, char *format, ...) 
433    /*@modifies *s@*/ ;
434 # endif
435
436 /*@scanflike@*/ 
437 int sscanf (/*@out@*/ char *s, char *format, ...) /*@*/ ;
438    /* modifies extra arguments */
439
440 extern int vfprintf (FILE *stream, char *format, va_list arg)
441    /*@modifies fileSystem, *stream, arg, errno@*/ ;
442
443 extern int vprintf (char *format, va_list arg)
444    /*@globals stdout@*/
445    /*@modifies fileSystem, arg, *stdout@*/ ;
446
447 extern int vsprintf (/*@out@*/ char *s, char *format, va_list arg)
448    /*@modifies *s, arg@*/ ;
449
450 extern int fgetc (FILE *stream) 
451    /*@modifies fileSystem, *stream, errno@*/ ;
452
453 extern /*@null@*/ char *
454   fgets (/*@returned@*/ /*@out@*/ char *s, int n, FILE *stream)
455   /*@modifies fileSystem, *s, *stream, errno@*/ ;
456
457 extern int fputc (int /*@alt char@*/ c, FILE *stream)
458   /*@modifies fileSystem, *stream, errno@*/ ;
459
460 extern int fputs (char *s, FILE *stream)
461   /*@modifies fileSystem, *stream@*/ ;
462
463 /* note use of sef --- stream may be evaluated more than once */
464 extern int getc (/*@sef@*/ FILE *stream)
465   /*@modifies fileSystem, *stream@*/ ;
466
467 extern int getchar (void) /*@globals stdin@*/ /*@modifies fileSystem, *stdin@*/ ;
468
469 extern /*@null@*/ char *gets (/*@out@*/ char *s) 
470    /*@globals stdin@*/ /*@modifies fileSystem, *s, *stdin, errno@*/ ;
471
472 extern int putc (int /*@alt char@*/ c, /*@sef@*/ FILE *stream)
473   /*@modifies fileSystem, *stream;@*/ ;
474
475 extern int putchar (int /*@alt char@*/ c)
476    /*@globals stdout@*/ /*@modifies fileSystem, *stdout@*/ ; 
477
478 extern int puts (const char *s)
479    /*@globals stdout@*/ /*@modifies fileSystem, *stdout@*/ ; 
480
481 extern int ungetc (int /*@alt char@*/ c, FILE *stream)
482   /*@modifies fileSystem, *stream, errno@*/ ;
483
484 extern size_t 
485   fread (/*@out@*/ void *ptr, size_t size, size_t nobj, FILE *stream)
486   /*@modifies fileSystem, *ptr, *stream, errno@*/ ;
487
488 extern size_t fwrite (void *ptr, size_t size, size_t nobj, FILE *stream)
489   /*@modifies fileSystem, *stream, errno@*/ ;
490
491 extern int fgetpos (FILE *stream, /*@out@*/ fpos_t *pos)
492   /*@modifies *pos, errno@*/ ;
493
494 extern int fseek (FILE *stream, long int offset, int whence)
495   /*@modifies fileSystem, *stream, errno@*/ ;
496
497 extern int fsetpos (FILE *stream, fpos_t *pos)
498    /*@modifies fileSystem, *stream, errno@*/ ;
499
500 extern long int ftell(FILE *stream) /*@modifies errno@*/ ;
501
502 extern void rewind (FILE *stream) /*@modifies *stream@*/ ;
503 extern void clearerr (FILE *stream) /*@modifies *stream@*/ ;
504
505 extern int feof (FILE *stream) /*@modifies errno@*/ ;
506 extern int ferror (FILE *stream) /*@modifies errno@*/ ;
507
508 extern void perror (/*@null@*/ char *s) 
509    /*@globals errno, stderr@*/ /*@modifies fileSystem, *stderr@*/ ; 
510
511 /*
512 ** stdlib.h
513 */
514
515 extern double atof (char *s) /*@*/ ;
516 extern int atoi (char *s) /*@*/ ;
517 extern long int atol (char *s) /*@*/ ;
518
519 extern double strtod (char *s, /*@null@*/ /*@out@*/ char **endp)
520   /*@modifies *endp, errno@*/ ;
521
522 extern long strtol (char *s, /*@null@*/ /*@out@*/ char **endp, int base)
523   /*@modifies *endp, errno@*/ ;
524
525 extern unsigned long 
526   strtoul (char *s, /*@null@*/ /*@out@*/ char **endp, int base)
527   /*@modifies *endp, errno@*/ ;
528
529 /*@constant int RAND_MAX; @*/
530 extern int rand (void) /*@modifies internalState@*/ ;
531 extern void srand (unsigned int seed) /*@modifies internalState@*/ ;
532
533 extern /*@null@*/ /*@only@*/ void *calloc (size_t nobj, size_t size) /*@*/ ;
534 extern /*@null@*/ /*@out@*/ /*@only@*/ void *malloc (size_t size) /*@*/ ;
535
536 /* 11 June 1997: removed out on return value */
537
538 # if 0
539 extern /*@null@*/ /*@only@*/ void *
540    realloc (/*@null@*/ /*@only@*/ /*@special@*/ void *p, 
541             size_t size) /*@releases p@*/ /*@modifies *p@*/ ;
542 # endif
543
544 /*
545 ** LCLint annotations cannot fully describe realloc.  The semantics we
546 ** want are:
547 **    realloc returns null: ownership of parameter is not changed
548 **    realloc returns non-null: ownership of parameter is transferred to return value
549 **
550 ** Otherwise, storage is in the same state before and after the call.
551 */
552
553 extern /*@null@*/ /*@only@*/ void *
554    realloc (/*@null@*/ /*@only@*/ /*@out@*/ /*@returned@*/ void *p, size_t size) 
555    /*@modifies *p @*/;
556
557 extern void free (/*@null@*/ /*@out@*/ /*@only@*/ void *p) /*@modifies *p@*/ ;
558
559 /*@constant int EXIT_FAILURE; @*/ 
560 /*@constant int EXIT_SUCCESS; @*/ 
561
562 extern /*@exits@*/ void abort (void) /*@*/ ;
563 extern /*@exits@*/ void exit (int status) /*@*/ ;
564 extern int atexit (void (*func)(void)) /*@modifies internalState@*/ ;
565
566 extern /*@observer@*/ /*@null@*/ char *getenv (char *name) /*@*/ ;
567
568 extern int system (/*@null@*/ char *s) /*@modifies fileSystem@*/ ;
569
570 extern /*@null@*/ /*@dependent@*/ void *
571   bsearch (void *key, void *base, 
572            size_t n, size_t size, 
573            int (*compar)(void *, void *)) /*@*/ ;
574
575 extern void qsort (void *base, size_t n, size_t size, 
576                    int (*compar)(void *, void *))
577    /*@modifies *base, errno@*/ ;
578
579 extern int abs (int n) /*@*/ ;
580
581 typedef /*@concrete@*/ struct 
582 {
583   int quot;
584   int rem;
585 } div_t ;
586
587 extern div_t div (int num, int denom) /*@*/ ;
588
589 extern long int labs (long int n) /*@*/ ; 
590
591 typedef /*@concrete@*/ struct 
592 {
593   long int quot;
594   long int rem;
595 } ldiv_t ;
596
597 extern ldiv_t ldiv (long num, long denom) /*@*/ ;
598
599 /*@constant size_t MB_CUR_MAX; @*/
600
601 /*
602 ** wchar_t and wint_t functions added by Amendment 1 to ISO.
603 */
604
605 /*@constant int WCHAR_MAX@*/
606 /*@constant int WCHAR_MIN@*/
607 /*@constant wint_t WEOF@*/
608
609 extern wint_t btowc (int c) /*@*/ ;
610
611 extern wint_t fgetwc (FILE *fp) /*@modifies fileSystem, *fp*/ ;
612
613 extern /*@null@*/ wchar_t *fgetws (/*@returned@*/ wchar_t *s, int n, FILE *stream)
614    /*@modifies fileSystem, *s, *stream@*/;
615
616 extern wint_t fputwc (wchar_t c, FILE *stream)
617    /*@modifies fileSystem, *stream@*/;
618
619 extern int fputws (const wchar_t *s, FILE *stream)
620    /*@modifies fileSystem, *stream@*/ ;
621
622 extern int fwide (FILE *stream, int mode) /*@*/ ; 
623    /* does not modify the stream */
624
625 /*@printflike@*/ extern int fwprintf (FILE *stream, const wchar_t *format, ...)
626     /*@modifies *stream, fileSystem@*/ ;
627
628 /*@scanflike@*/ extern int fwscanf (FILE *stream, const wchar_t *format, ...)
629         /*@modifies *stream, fileSystem@*/ ;
630
631 /* note use of sef --- stream may be evaluated more than once */
632 extern wint_t getwc (/*@sef@*/ FILE *stream) /*@modifies fileSystem, *stream@*/ ;
633
634 extern wint_t getwchar (void) /*@modifies fileSystem, *stdin@*/;
635
636 extern size_t mbrlen (const char *s, size_t n, /*@null@*/ mbstate_t *ps) /*@*/ ;
637
638 extern size_t mbrtowc (/*@null@*/ wchar_t *pwc, const char *s, size_t n,
639                        /*@null@*/ mbstate_t *ps) 
640    /*@modifies *pwc@*/ ;
641
642 extern int mbsinit (/*@null@*/ const mbstate_t *ps) /*@*/ ;
643
644 extern size_t mbsrtowcs (/*@null@*/ wchar_t *dst, const char **src, size_t len,
645                          /*@null@*/ mbstate_t *ps) 
646    /*@modifies *dst@*/ ;
647
648 /* note use of sef --- stream may be evaluated more than once */
649 extern wint_t putwc (wchar_t c, /*@sef@*/ FILE *stream) /*@modifies fileSystem, *stream@*/ ;
650
651 extern wint_t putwchar (wchar_t c) /*@modifies fileSystem, *stdout@*/ ;
652
653 /*@printflike@*/ extern int swprintf (wchar_t *s, size_t n, const wchar_t *format, ...)
654    /*@modifies *s@*/ ;
655
656 /*@scanflike@*/ extern int swscanf (const wchar_t *s, const wchar_t *format, ...)
657    /*@modifies *stdin@*/ ;
658
659 extern wint_t ungetwc (wint_t c, FILE *stream) /*@modifies fileSystem, *stream@*/ ;
660
661 extern int vfwprintf (FILE *stream, const wchar_t *format, va_list arg)
662    /*@modifies fileSystem, *stream@*/ ;
663
664 extern int vswprintf (wchar_t *s, size_t n, const wchar_t *format, va_list arg)
665    /*@modifies *s@*/ ;
666
667 extern int vwprintf (const wchar_t *format, va_list arg)
668    /*@modifies fileSystem, *stdout@*/ ;
669
670 extern size_t wcrtomb (/*@null@*/ /*@out@*/ char *s, wchar_t wc, /*@null@*/ mbstate_t *ps)
671    /*@modifies *s@*/;
672
673 extern void /*@alt wchar_t *@*/
674   wcscat (/*@unique@*/ /*@returned@*/ /*@out@*/ wchar_t *s1, const wchar_t *s2)
675   /*@modifies *s1@*/ ;
676
677 extern /*@exposed@*/ /*@null@*/ wchar_t *
678   wcschr (/*@returned@*/ const wchar_t *s, wchar_t c)
679   /*@*/ ;
680
681 extern int wcscmp (const wchar_t *s1, const wchar_t *s2) /*@*/ ;
682
683 extern int wcscoll (const wchar_t *s1, const wchar_t *s2) /*@*/ ;
684
685 extern void /*@alt wchar_t *@*/ 
686   wcscpy (/*@unique@*/ /*@out@*/ /*@returned@*/ wchar_t *s1, const wchar_t *s2)
687   /*@modifies *s1@*/ ;
688
689 extern size_t wcscspn (const wchar_t *s1, const wchar_t *s2) /*@*/ ;
690
691 extern size_t wcsftime (/*@out@*/ wchar_t *s, size_t maxsize, const wchar_t *format,
692                         const struct tm *timeptr) 
693    /*@modifies *s@*/ ;
694
695 extern size_t wcslen (const wchar_t *s) /*@*/ ;
696
697 extern void /*@alt wchar_t *@*/
698   wcsncat (/*@unique@*/ /*@returned@*/ /*@out@*/ wchar_t *s1, const wchar_t *s2,
699            size_t n) 
700   /*@modifies *s1@*/ ;
701
702 extern int wcsncmp (const wchar_t *s1, const wchar_t *s2, size_t n) /*@*/ ;
703
704 extern void /*@alt wchar_t *@*/
705   wcsncpy (/*@unique@*/ /*@returned@*/ /*@out@*/ wchar_t *s1, const wchar_t *s2,
706            size_t n) 
707    /*@modifies *s1@*/ ;
708
709 extern /*@null@*/ wchar_t *
710   wcspbrk (/*@returned@*/ const wchar_t *s1, const wchar_t *s2)
711   /*@*/ ;
712
713 extern /*@null@*/ wchar_t *
714   wcsrchr (/*@returned@*/ const wchar_t *s, wchar_t c)
715   /*@*/ ;
716
717 extern size_t
718   wcsrtombs (/*@null@*/ char *dst, const wchar_t **src, size_t len,
719              /*@null@*/ mbstate_t *ps) 
720   /*@modifies *src@*/ ;
721
722 extern size_t wcsspn (const wchar_t *s1, const wchar_t *s2) /*@*/ ;
723
724 extern /*@null@*/ wchar_t *wcsstr (const wchar_t *s1, const wchar_t *s2) /*@*/ ;
725
726 extern double wcstod (const wchar_t *nptr, /*@null@*/ wchar_t **endptr)
727    /*@modifies *endptr@*/ ;
728
729 extern /*@null@*/ wchar_t *
730   wcstok (/*@null@*/ wchar_t *s1, const wchar_t *s2, wchar_t **ptr)
731   /*@modifies *ptr@*/;
732
733 extern long wcstol (const wchar_t *nptr, /*@null@*/ wchar_t **endptr, int base)
734    /*@modifies *endptr@*/;
735
736 extern unsigned long
737   wcstoul (const wchar_t *nptr, /*@null@*/ wchar_t **endptr, int base)
738   /*@modifies *endptr@*/;
739
740 extern size_t
741   wcsxfrm (/*@null@*/ wchar_t *s1, const wchar_t *s2, size_t n)
742   /*@modifies *s1@*/;
743
744 extern int wctob (wint_t c) /*@*/;
745
746 extern /*@null@*/ wchar_t *wmemchr (const wchar_t *s, wchar_t c, size_t n) /*@*/ ;
747
748 extern int wmemcmp (const wchar_t *s1, const wchar_t *s2, size_t n) /*@*/ ;
749
750 extern wchar_t *wmemcpy (/*@returned@*/ wchar_t *s1, const wchar_t *s2, size_t n)
751    /*@modifies *s1@*/;
752
753 extern wchar_t *wmemmove (/*@returned@*/ wchar_t *s1, const wchar_t *s2, size_t n)
754    /*@modifies *s1@*/;
755
756 extern wchar_t *wmemset (/*@returned@*/ wchar_t *s, wchar_t c, size_t n)
757    /*@modifies *s@*/;
758
759 /*@printflike@*/ extern int wprintf (const wchar_t *format, ...)
760    /*@globals stdout@*/ /*@modifies errno, *stdout@*/;
761
762 /*@scanflike@*/ extern int
763   wscanf (const wchar_t *format, ...)
764   /*@globals stdin@*/ /*@modifies errno, *stdin@*/;
765
766 /*
767 ** wctype.h (added by Amendment 1)
768 */
769
770 /* Warning: not sure about these (maybe abstract?): */
771 typedef /*@integraltype@*/ wctype_t;
772 typedef /*@integraltype@*/ wctrans_t;
773
774 # ifdef STRICT
775 extern lltX_bool iswalnum (wint_t c) /*@*/ ;
776 extern lltX_bool iswalpha (wint_t c) /*@*/ ;
777 extern lltX_bool iswcntrl (wint_t c) /*@*/ ;
778 extern lltX_bool iswctype (wint_t c, wctype_t ctg) /*@*/ ;
779 extern lltX_bool iswdigit (wint_t c) /*@*/ ;
780 extern lltX_bool iswgraph (wint_t c) /*@*/ ;
781 extern lltX_bool iswlower (wint_t c) /*@*/ ;
782 extern lltX_bool iswprint (wint_t c) /*@*/ ;
783 extern lltX_bool iswpunct (wint_t c) /*@*/ ;
784 extern lltX_bool iswspace (wint_t c) /*@*/ ;
785 extern lltX_bool iswupper (wint_t c) /*@*/ ;
786 extern lltX_bool iswxdigit (wint_t c) /*@*/ ;
787
788 extern wint_t towctrans (wint_t c, wctrans_t ctg) /*@*/ ;
789 extern wint_t towlower (wint_t c) /*@*/ ;
790 extern wint_t towupper (wint_t c) /*@*/ ;
791 # else
792 extern lltX_bool /*@alt int@*/ iswalnum (wint_t c) /*@*/ ;
793 extern lltX_bool /*@alt int@*/ iswalpha (wint_t c) /*@*/ ;
794 extern lltX_bool /*@alt int@*/ iswcntrl (wint_t c) /*@*/ ;
795 extern lltX_bool /*@alt int@*/ iswctype (wint_t c, wctype_t ctg) /*@*/ ;
796 extern lltX_bool /*@alt int@*/ iswdigit (wint_t c) /*@*/ ;
797 extern lltX_bool /*@alt int@*/ iswgraph (wint_t c) /*@*/ ;
798 extern lltX_bool /*@alt int@*/ iswlower (wint_t c) /*@*/ ;
799 extern lltX_bool /*@alt int@*/ iswprint (wint_t c) /*@*/ ;
800 extern lltX_bool /*@alt int@*/ iswpunct (wint_t c) /*@*/ ;
801 extern lltX_bool /*@alt int@*/ iswspace (wint_t c) /*@*/ ;
802 extern lltX_bool /*@alt int@*/ iswupper (wint_t c) /*@*/ ;
803 extern lltX_bool /*@alt int@*/ iswxdigit (wint_t c) /*@*/ ;
804
805 extern wint_t /*@alt int@*/ towctrans (wint_t c, wctrans_t ctg) /*@*/ ;
806 extern wint_t /*@alt int@*/ towlower (wint_t c) /*@*/ ;
807 extern wint_t /*@alt int@*/ towupper (wint_t c) /*@*/ ;
808 # endif
809
810 extern wctrans_t wctrans (const char *property) /*@*/ ;
811 extern wctype_t wctype (const char *property) /*@*/ ;
812
813 extern int mblen (char *s, size_t n) /*@*/ ;
814 extern int mbtowc (/*@null@*/ wchar_t *pwc, /*@null@*/ char *s, size_t n) 
815    /*@modifies *pwc@*/ ;
816 extern int wctomb (/*@out@*/ /*@null@*/ char *s, wchar_t wchar) 
817    /*@modifies *s@*/ ;
818 extern size_t mbstowcs (/*@out@*/ wchar_t *pwcs, char *s, size_t n)
819   /*@modifies *pwcs@*/ ;
820 extern size_t wcstombs (/*@out@*/ char *s, wchar_t *pwcs, size_t n)
821   /*@modifies *s@*/ ;
822
823 /*
824 ** string.h
825 */
826      
827 extern void /*@alt void * @*/
828   memcpy (/*@unique@*/ /*@returned@*/ /*@out@*/ void *s1, void *s2, size_t n) 
829   /*@modifies *s1@*/ ;
830
831 extern void /*@alt void * @*/
832   memmove (/*@returned@*/ /*@out@*/ void *s1, void *s2, size_t n)
833   /*@modifies *s1@*/ ;
834
835 extern void /*@alt char * @*/
836   strcpy (/*@unique@*/ /*@out@*/ /*@returned@*/ char *s1, char *s2) 
837   /*@modifies *s1@*/ ;
838
839 extern void /*@alt char * @*/
840   strncpy (/*@unique@*/ /*@out@*/ /*@returned@*/ char *s1, char *s2, size_t n) 
841   /*@modifies *s1@*/ ;
842
843 extern void /*@alt char * @*/
844   strcat (/*@unique@*/ /*@returned@*/ /*@out@*/ char *s1, char *s2) 
845   /*@modifies *s1@*/ ;
846
847 extern void /*@alt char * @*/
848   strncat (/*@unique@*/ /*@returned@*/ /*@out@*/ char *s1, char *s2, int n)
849   /*@modifies *s1@*/ ;
850
851 extern int memcmp (void *s1, void *s2, size_t n) /*@*/ ;
852 extern int strcmp (char *s1, char *s2) /*@*/ ;
853 extern int strcoll (char *s1, char *s2) /*@*/ ;
854 extern int strncmp (char *s1, char *s2, size_t n) /*@*/ ;
855 extern size_t strxfrm (/*@out@*/ /*@null@*/ char *s1, char *s2, size_t n) 
856   /*@modifies *s1@*/ ;  /* s1 may be null only if n == 0 */ 
857
858 extern /*@null@*/ void *memchr (void *s, int c, size_t n) /*@*/ ;
859
860 # ifdef STRICT
861 extern /*@exposed@*/ /*@null@*/ char *
862   strchr (/*@returned@*/ char *s, char c) /*@*/ ;
863 # else
864 extern /*@exposed@*/ /*@null@*/ char *
865   strchr (/*@returned@*/ char *s, int /*@alt char@*/ c) /*@*/ ;
866 # endif
867
868 extern size_t strcspn (char *s1, char *s2) /*@*/ ;
869 extern /*@null@*/ /*@exposed@*/ char *
870   strpbrk (/*@returned@*/ char *s, char *t) /*@*/ ;
871
872 # ifdef STRICT
873 extern /*@null@*/ /*@exposed@*/ char *
874   strrchr (/*@returned@*/ char *s, char c) /*@*/ ;
875 # else
876 extern /*@null@*/ /*@exposed@*/ char *
877   strrchr (/*@returned@*/ char *s, int /*@alt char@*/ c) /*@*/ ;
878 # endif
879
880 extern size_t strspn (char *s, char *t) /*@*/ ;
881 extern /*@null@*/ /*@exposed@*/  char *
882   strstr (/*@returned@*/ /*@unique@*/ char *s, char *t) /*@*/ ; 
883 extern /*@null@*/ /*@exposed@*/ char *
884   strtok (/*@returned@*/ /*@null@*/ char *s, char *t)
885   /*@modifies *s, internalState, errno@*/ ;
886
887 extern void /*@alt void *@*/ memset (/*@out@*/ /*@returned@*/ void *s, 
888                                      int c, size_t n)
889    /*@modifies *s@*/ ;
890
891 extern /*@observer@*/ char *strerror (int errnum) /*@*/ ;
892
893 extern size_t strlen (char *s) /*@*/ ; 
894
895 /*
896 ** time.h
897 */
898
899 /*@constant int CLOCKS_PER_SEC;@*/
900
901 typedef /*@integraltype@*/ clock_t;
902 typedef /*@integraltype@*/ time_t;
903
904 struct tm
905   {
906     int tm_sec;
907     int tm_min;
908     int tm_hour;
909     int tm_mday;
910     int tm_mon;
911     int tm_year;
912     int tm_wday;
913     int tm_yday;
914     int tm_isdst;
915   } ;
916
917 extern clock_t clock (void) /*@modifies internalState@*/ ;
918 extern double difftime (time_t time1, time_t time0) /*@*/ ;
919 extern time_t mktime (struct tm *timeptr) /*@*/ ;
920
921 extern time_t time (/*@null@*/ /*@out@*/ time_t *tp)
922   /*@modifies *tp@*/ ;
923
924 extern /*@observer@*/ char *asctime (struct tm *timeptr) 
925   /*@modifies errno*/ ;
926
927 extern /*@observer@*/ char *ctime (time_t *tp) /*@*/ ;
928
929 extern /*@null@*/ /*@observer@*/ struct tm *gmtime (time_t *tp) /*@*/ ;
930
931 extern /*@null@*/ /*@observer@*/ struct tm *localtime (time_t *tp) 
932   /*@modifies errno@*/ ;
933
934 extern size_t strftime (/*@out@*/ char *s, size_t smax,
935                         char *fmt, struct tm *timeptr)
936   /*@modifies *s@*/ ;
This page took 1.174176 seconds and 5 git commands to generate.