File: specclauses2.c

package info (click to toggle)
splint 1%3A3.1.2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 21,012 kB
  • ctags: 23,302
  • sloc: ansic: 150,869; yacc: 3,465; sh: 3,034; makefile: 2,160; lex: 412
file content (76 lines) | stat: -rw-r--r-- 1,808 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*@-paramuse@*/

typedef struct
{
  char *name;
  char *id;
  int year;
} record;

extern void allocYear (/*@special@*/ record *r)
  /*@allocates r->year@*/  /* 1. Allocates clause includes *<parameter 1>.year of ... */
{
  r->year = 23;
} /* 2. Unallocated storage r->year corresponds to storage listed ... */

extern void setName (/*@special@*/ record *r, /*@only@*/ char *name)
  /*@defines r->name@*/ 
{
  r->name = name;
}

extern void setName1 (/*@special@*/ record *r, /*@only@*/ char *name)
  /*@defines r->name@*/ 
{
  free (name);
} /* 3. Storage r->name listed in defines clause not defined at ... */

extern void setName2 (/*@special@*/ record *r, char *name)
  /*@sets r->name@*/ 
{
  strcpy (r->name, name);
}

extern void setName3 (/*@special@*/ record *r, char *name)
  /*@sets r->name@*/ 
{
} /* 4. Storage *(r->name) listed in sets clause not defined at ... */

extern void setName4 (/*@special@*/ record *r, /*@only@*/ char *name)
  /*@sets r->name@*/ 
{
  r->name = name; /* 5. Implicitly only storage r->name not released before ... */
}

extern void allocName (/*@special@*/ record *r)
  /*@allocates r->name@*/ 
{
  r->name = (char *) malloc (sizeof (char) * 20);
}

extern void allocName2 (/*@special@*/ record *r)
  /*@allocates r->name@*/ 
{
} /* 6. Storage r->name listed in allocates clauses is not ... */

extern void freeName (/*@special@*/ record r)
  /*@releases r.name@*/
{
  free (r.name); 
}

extern void freeName2 (/*@special@*/ record r)
  /*@releases r.name@*/
{
} /* 7. Storage r.name listed in releases clause not released */

extern void freeName3 (/*@special@*/ record *r)
  /*@releases r->name@*/
{
  free (r->name);
}

extern void freeName4 (/*@special@*/ record *r)
  /*@releases r->name@*/
{
} /* 8. Storage r->name listed in releases clause not released ... */