Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/cmd/tests/vmalloc/tcompact.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
25
#if __STD_C
26
Void_t* memory(Vmalloc_t* vm, Void_t* caddr,
27
size_t oldsize, size_t newsize, Vmdisc_t* disc)
28
#else
29
Void_t* memory(vm, caddr, oldsize, newsize, disc)
30
Vmalloc_t* vm;
31
Void_t* caddr;
32
size_t oldsize;
33
size_t newsize;
34
Vmdisc_t* disc;
35
#endif
36
{
37
if(caddr)
38
{ if(newsize != 0)
39
return NIL(Void_t*);
40
Release += 1;
41
vmfree(Vmheap,caddr);
42
return caddr;
43
}
44
return vmalloc(Vmheap,newsize);
45
}
46
47
Vmdisc_t Disc = {memory, NIL(Vmexcept_f), 64};
48
49
tmain()
50
{
51
Void_t* addr[10];
52
Vmalloc_t* vm;
53
int i;
54
55
if(!(vm = vmopen(&Disc,Vmbest,0)) )
56
terror("Can't open");
57
58
for(i = 0; i < 10; ++i)
59
{ addr[i] = vmalloc(vm,15);
60
if((((Vmulong_t)addr[i])%ALIGN) != 0)
61
terror("Unaligned addr");
62
}
63
64
for(i = 0; i < 10; ++i)
65
if(vmfree(vm,addr[i]) < 0)
66
terror("can't free an element?");
67
68
if(!(addr[0] = vmalloc(vm,30)) )
69
terror("Can't alloc");
70
71
for(i = 0; i < 10; ++i)
72
addr[i] = vmalloc(vm,15);
73
74
if(vmresize(vm,addr[0],16,1) != addr[0])
75
terror("Location should not have changed");
76
77
#ifdef DEBUG
78
for(i = 0; i < 10; ++i)
79
printf("size[%d]=%d\n",i,vmsize(vm,addr[i]));
80
printf("vmextent=%d\n",vmsize(vm,NIL(Void_t*)));
81
#endif
82
83
texit(0);
84
}
85
86