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 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 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 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 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