hc
2024-03-26 e0728245c89800c2038c23308f2d88969d5b41c8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
 * Copyright (c) 2009-2016 Petri Lehtinen <petri@digip.org>
 * Copyright (c) 2011-2012 Basile Starynkevitch <basile@starynkevitch.net>
 *
 * Jansson is free software; you can redistribute it and/or modify it
 * under the terms of the MIT license. See LICENSE for details.
 */
 
#include <stdlib.h>
#include <string.h>
 
#include "jansson.h"
#include "jansson_private.h"
 
/* C89 allows these to be macros */
#undef malloc
#undef free
 
/* memory function pointers */
static json_malloc_t do_malloc = malloc;
static json_free_t do_free = free;
 
void *jsonp_malloc(size_t size) {
    if (!size)
        return NULL;
 
    return (*do_malloc)(size);
}
 
void jsonp_free(void *ptr) {
    if (!ptr)
        return;
 
    (*do_free)(ptr);
}
 
char *jsonp_strdup(const char *str) { return jsonp_strndup(str, strlen(str)); }
 
char *jsonp_strndup(const char *str, size_t len) {
    char *new_str;
 
    new_str = jsonp_malloc(len + 1);
    if (!new_str)
        return NULL;
 
    memcpy(new_str, str, len);
    new_str[len] = '\0';
    return new_str;
}
 
void json_set_alloc_funcs(json_malloc_t malloc_fn, json_free_t free_fn) {
    do_malloc = malloc_fn;
    do_free = free_fn;
}
 
void json_get_alloc_funcs(json_malloc_t *malloc_fn, json_free_t *free_fn) {
    if (malloc_fn)
        *malloc_fn = do_malloc;
    if (free_fn)
        *free_fn = do_free;
}