1// Licensed to the .NET Foundation under one or more agreements.
2// The .NET Foundation licenses this file to you under the MIT license.
3// See the LICENSE file in the project root for more information.
4
5/*=============================================================
6**
7** Source: heapalloc.c
8**
9** Purpose: Positive test the HeapAlloc API.
10** Call HeapAlloc by pssing zero as control flag
11** Call HeapAlloc by passing HEAP_ZERO_MEMORY as control flag
12** Call HeapAlloc to allocate one byte heap memory
13** Call HeapAlloc to allocate maximum available heap memory
14**
15**
16**============================================================*/
17#include <palsuite.h>
18
19#define HEAPSIZE 64
20
21int __cdecl main(int argc, char *argv[])
22{
23 int err;
24 HANDLE ProcessHeapHandle;
25 LPVOID lpHeap;
26
27 /* Initialize the PAL environment */
28 err = PAL_Initialize(argc, argv);
29 if(0 != 0)
30 {
31 ExitProcess(FAIL);
32 }
33
34 /* Retrieve the calling process heap handle */
35 ProcessHeapHandle = GetProcessHeap();
36
37 if(!ProcessHeapHandle)
38 {
39 Fail("\nFailed to call GetProcessHeap API!\n");
40 }
41
42 /* allocate a heap memory in specified size */
43 lpHeap = HeapAlloc(ProcessHeapHandle, /* HeapHandle */
44 0, /* control flag */
45 HEAPSIZE); /* /specify the heap size */
46 if(NULL == lpHeap)
47 {
48 Fail("Failed to call HeapAlloc API!\n");
49 }
50
51 /* free the heap memory */
52 err = HeapFree(ProcessHeapHandle,
53 0,
54 lpHeap);
55 if(0 == err)
56 {
57 Fail("Failed to call HeapFree API!\n");
58 }
59
60
61 /* allocate a heap memory in 1 byte size */
62 lpHeap = HeapAlloc(ProcessHeapHandle, /* HeapHandle */
63 0, /* control flag */
64 1); /* specify the heap size*/
65 if(NULL == lpHeap)
66 {
67 Fail("Failed to call HeapAlloc API to allocate one byte heap memory!\n");
68 }
69
70 /* free the heap memory */
71 err = HeapFree(ProcessHeapHandle,
72 0,
73 lpHeap);
74 if(0 == err)
75 {
76 Fail("Failed to call HeapFree API!\n");
77 }
78
79 /* allocate a heap memory and initialize it to zero */
80 lpHeap = HeapAlloc(ProcessHeapHandle,/* HeapHandle */
81 HEAP_ZERO_MEMORY,/* control flag */
82 HEAPSIZE); /* specify the heap size */
83 if(NULL == lpHeap)
84 {
85 Fail("Failed to call HeapAlloc API with HEAP_ZERO_MEMORY control flag!\n");
86 }
87
88 /* free the heap memory */
89 err = HeapFree(ProcessHeapHandle,
90 0,
91 lpHeap);
92 if(0 == err)
93 {
94 Fail("Failed to call HeapFree API!\n");
95 }
96
97
98 PAL_Terminate();
99 return PASS;
100}
101