1 /******************************************************************************
2 *
3 * Copyright (C) 2014 Google, Inc.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 ******************************************************************************/
18
19 #include <stdlib.h>
20 #include <string.h>
21
22 #include "osi/include/allocator.h"
23 #include "osi/include/allocation_tracker.h"
24
25 static const allocator_id_t alloc_allocator_id = 42;
26
osi_strdup(const char * str)27 char *osi_strdup(const char *str) {
28 size_t size = strlen(str) + 1; // + 1 for the null terminator
29 size_t real_size = allocation_tracker_resize_for_canary(size);
30
31 char *new_string = allocation_tracker_notify_alloc(
32 alloc_allocator_id,
33 malloc(real_size),
34 size);
35 if (!new_string)
36 return NULL;
37
38 memcpy(new_string, str, size);
39 return new_string;
40 }
41
osi_malloc(size_t size)42 void *osi_malloc(size_t size) {
43 size_t real_size = allocation_tracker_resize_for_canary(size);
44 return allocation_tracker_notify_alloc(
45 alloc_allocator_id,
46 malloc(real_size),
47 size);
48 }
49
osi_calloc(size_t size)50 void *osi_calloc(size_t size) {
51 size_t real_size = allocation_tracker_resize_for_canary(size);
52 return allocation_tracker_notify_alloc(
53 alloc_allocator_id,
54 calloc(1, real_size),
55 size);
56 }
57
osi_free(void * ptr)58 void osi_free(void *ptr) {
59 free(allocation_tracker_notify_free(alloc_allocator_id, ptr));
60 }
61
62 const allocator_t allocator_malloc = {
63 osi_malloc,
64 osi_free
65 };
66
67 const allocator_t allocator_calloc = {
68 osi_calloc,
69 osi_free
70 };
71