parent
44a3136ae6
commit
c33e8006fd
8 changed files with 88 additions and 1 deletions
@ -0,0 +1,57 @@ |
||||
/*
|
||||
* Copyright © 2020 Ebrahim Byagowi |
||||
* |
||||
* This is part of HarfBuzz, a text shaping library. |
||||
* |
||||
* Permission is hereby granted, without written agreement and without |
||||
* license or royalty fees, to use, copy, modify, and distribute this |
||||
* software and its documentation for any purpose, provided that the |
||||
* above copyright notice and the following two paragraphs appear in |
||||
* all copies of this software. |
||||
* |
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR |
||||
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES |
||||
* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN |
||||
* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH |
||||
* DAMAGE. |
||||
* |
||||
* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
||||
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND |
||||
* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS |
||||
* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO |
||||
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
||||
*/ |
||||
|
||||
#include <stdlib.h> |
||||
#include <stdio.h> |
||||
|
||||
int alloc_state = 0; |
||||
|
||||
__attribute__((no_sanitize("integer"))) |
||||
static int fastrand () |
||||
{ |
||||
if (!alloc_state) return 1; |
||||
/* Based on https://software.intel.com/content/www/us/en/develop/articles/fast-random-number-generator-on-the-intel-pentiumr-4-processor.html */ |
||||
alloc_state = (214013 * alloc_state + 2531011); |
||||
return (alloc_state >> 16) & 0x7FFF; |
||||
} |
||||
|
||||
void* hb_malloc_impl (size_t size) |
||||
{ |
||||
return (fastrand () % 16) ? malloc (size) : NULL; |
||||
} |
||||
|
||||
void* hb_calloc_impl (size_t nmemb, size_t size) |
||||
{ |
||||
return (fastrand () % 16) ? calloc (nmemb, size) : NULL; |
||||
} |
||||
|
||||
void* hb_realloc_impl (void *ptr, size_t size) |
||||
{ |
||||
return (fastrand () % 16) ? realloc (ptr, size) : NULL; |
||||
} |
||||
|
||||
void hb_free_impl (void *ptr) |
||||
{ |
||||
return free (ptr); |
||||
} |
Loading…
Reference in new issue