michael@0: michael@0: /* michael@0: * Copyright 2011 Google Inc. michael@0: * michael@0: * Use of this source code is governed by a BSD-style license that can be michael@0: * found in the LICENSE file. michael@0: */ michael@0: #include "SkTypes.h" michael@0: #include michael@0: #include michael@0: michael@0: static inline void* throw_on_failure(size_t size, void* p) { michael@0: if (size > 0 && p == NULL) { michael@0: // If we've got a NULL here, the only reason we should have failed is running out of RAM. michael@0: sk_out_of_memory(); michael@0: } michael@0: return p; michael@0: } michael@0: michael@0: void sk_throw() { michael@0: SkDEBUGFAIL("sk_throw"); michael@0: abort(); michael@0: } michael@0: michael@0: void sk_out_of_memory(void) { michael@0: SkDEBUGFAIL("sk_out_of_memory"); michael@0: abort(); michael@0: } michael@0: michael@0: void* sk_malloc_throw(size_t size) { michael@0: return sk_malloc_flags(size, SK_MALLOC_THROW); michael@0: } michael@0: michael@0: void* sk_realloc_throw(void* addr, size_t size) { michael@0: return throw_on_failure(size, realloc(addr, size)); michael@0: } michael@0: michael@0: void sk_free(void* p) { michael@0: if (p) { michael@0: free(p); michael@0: } michael@0: } michael@0: michael@0: void* sk_malloc_flags(size_t size, unsigned flags) { michael@0: void* p = malloc(size); michael@0: if (flags & SK_MALLOC_THROW) { michael@0: return throw_on_failure(size, p); michael@0: } else { michael@0: return p; michael@0: } michael@0: } michael@0: michael@0: void* sk_calloc(size_t size) { michael@0: return calloc(size, 1); michael@0: } michael@0: michael@0: void* sk_calloc_throw(size_t size) { michael@0: return throw_on_failure(size, sk_calloc(size)); michael@0: }