static void checkOpen (/*@open@*/ /*@null@*/ FILE *);
static void checkClosed (/*@closed@*/ /*@null@*/ FILE *);
/*@open@*/ /*@dependent@*/ FILE *newOpen (char *s)
{
FILE *res;
res = fopen (s, "r");
assert (res != NULL);
return res; /* okay: return open as open */
}
/*@open@*/ /*@dependent@*/ FILE *newOpenBad (char *s)
{
FILE *res;
res = fopen (s, "r");
assert (res != NULL);
(void) fclose (res);
return res; /* error: return closed as open */
}
int main (void)
{
FILE *fle;
fle = newOpen ("test");
checkOpen (fle); /* okay */
return 0; /* error: fle not closed */
}
syntax highlighted by Code2HTML, v. 0.9.1