• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 // This is a simple allocator based on the windows heap.
6 
7 extern "C" {
8 
9 HANDLE win_heap;
10 
win_heap_init(bool use_lfh)11 bool win_heap_init(bool use_lfh) {
12   win_heap = HeapCreate(0, 0, 0);
13   if (win_heap == NULL)
14     return false;
15 
16   if (use_lfh) {
17     ULONG enable_lfh = 2;
18     HeapSetInformation(win_heap, HeapCompatibilityInformation,
19                        &enable_lfh, sizeof(enable_lfh));
20     // NOTE: Setting LFH may fail.  Vista already has it enabled.
21     //       And under the debugger, it won't use LFH.  So we
22     //       ignore any errors.
23   }
24 
25   return true;
26 }
27 
win_heap_malloc(size_t size)28 void* win_heap_malloc(size_t size) {
29   return HeapAlloc(win_heap, 0, size);
30 }
31 
win_heap_free(void * size)32 void win_heap_free(void* size) {
33   HeapFree(win_heap, 0, size);
34 }
35 
win_heap_realloc(void * ptr,size_t size)36 void* win_heap_realloc(void* ptr, size_t size) {
37   if (!ptr)
38     return win_heap_malloc(size);
39   if (!size) {
40     win_heap_free(ptr);
41     return NULL;
42   }
43   return HeapReAlloc(win_heap, 0, ptr, size);
44 }
45 
win_heap_msize(void * ptr)46 size_t win_heap_msize(void* ptr) {
47   return HeapSize(win_heap, 0, ptr);
48 }
49 
50 }  // extern "C"
51