Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/cmd/tests/vmalloc/tpool.c
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1999-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* *
19
***********************************************************************/
20
#include "vmtest.h"
21
22
int Release = 0;
23
24
#if __STD_C
25
Void_t* memory(Vmalloc_t* vm, Void_t* caddr,
26
size_t oldsize, size_t newsize, Vmdisc_t* disc)
27
#else
28
Void_t* memory(vm, caddr, oldsize, newsize, disc)
29
Vmalloc_t* vm;
30
Void_t* caddr;
31
size_t oldsize;
32
size_t newsize;
33
Vmdisc_t* disc;
34
#endif
35
{
36
if(caddr)
37
{ if(newsize != 0)
38
return NIL(Void_t*);
39
Release += 1;
40
free(caddr);
41
return caddr;
42
}
43
return vmalloc(Vmheap,newsize);
44
}
45
46
Vmdisc_t Disc = {memory, NIL(Vmexcept_f), 64};
47
48
tmain()
49
{
50
Void_t* addr[10];
51
Vmalloc_t* vm;
52
int i;
53
54
if(!(vm = vmopen(&Disc,Vmpool,0)) )
55
terror("Can't open");
56
57
for(i = 0; i < 10; ++i)
58
{ addr[i] = vmalloc(vm,15);
59
if((((Vmulong_t)addr[i])%ALIGN) != 0)
60
terror("Unaligned addr");
61
}
62
63
for(i = 0; i < 10; ++i)
64
if(vmfree(vm,addr[i]) < 0)
65
terror("can't free an element?");
66
67
for(i = 0; i < 10; ++i)
68
addr[i] = vmalloc(vm,15);
69
70
if(vmresize(vm,addr[0],16,1) != NIL(Void_t*))
71
terror("Resize to a different size succeeds?");
72
73
vmfree(vm,addr[0]);
74
if(vmsize(vm,addr[0]) >= 0)
75
terror("Wrong size for free pool element?");
76
77
if(vmsize(vm,addr[9]) != 15)
78
terror("Wrong size for pool element?");
79
80
#ifdef DEBUG
81
for(i = 0; i < 10; ++i)
82
printf("size[%d]=%d\n",i,vmsize(vm,addr[i]));
83
printf("vmextent=%d\n",vmsize(vm,NIL(Void_t*)));
84
#endif
85
86
texit(0);
87
}
88
89