memory.c 1.1 KB
Newer Older
B
Bernard Xiong 已提交
1
/*
2
 * Copyright (c) 2006-2021, RT-Thread Development Team
B
Bernard Xiong 已提交
3
 *
4 5 6 7 8
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2010-11-17     Bernard      first version
B
Bernard Xiong 已提交
9
 */
10

B
Bernard Xiong 已提交
11 12 13
#include <stdio.h>
#include <stdlib.h>
#include <finsh.h>
14
#include <sys/errno.h>
B
Bernard Xiong 已提交
15 16 17 18

static int errors = 0;
static void merror(const char *msg)
{
mysterywolf's avatar
mysterywolf 已提交
19 20
    ++errors;
    printf("Error: %s\n", msg);
B
Bernard Xiong 已提交
21 22 23 24
}

int libc_mem(void)
{
mysterywolf's avatar
mysterywolf 已提交
25 26
    void *p;
    int save;
B
Bernard Xiong 已提交
27

mysterywolf's avatar
mysterywolf 已提交
28
    errno = 0;
B
Bernard Xiong 已提交
29

mysterywolf's avatar
mysterywolf 已提交
30 31
    p = malloc(-1);
    save = errno;
B
Bernard Xiong 已提交
32

mysterywolf's avatar
mysterywolf 已提交
33 34
    if (p != NULL)
        merror("malloc (-1) succeeded.");
B
Bernard Xiong 已提交
35

mysterywolf's avatar
mysterywolf 已提交
36 37
    if (p == NULL && save != ENOMEM)
        merror("errno is not set correctly");
B
Bernard Xiong 已提交
38

mysterywolf's avatar
mysterywolf 已提交
39 40 41
    p = malloc(10);
    if (p == NULL)
        merror("malloc (10) failed.");
B
Bernard Xiong 已提交
42

mysterywolf's avatar
mysterywolf 已提交
43 44 45 46
    /* realloc (p, 0) == free (p).  */
    p = realloc(p, 0);
    if (p != NULL)
        merror("realloc (p, 0) failed.");
B
Bernard Xiong 已提交
47

mysterywolf's avatar
mysterywolf 已提交
48 49 50 51 52
    p = malloc(0);
    if (p == NULL)
    {
        printf("malloc(0) returns NULL\n");
    }
B
Bernard Xiong 已提交
53

mysterywolf's avatar
mysterywolf 已提交
54 55 56
    p = realloc(p, 0);
    if (p != NULL)
        merror("realloc (p, 0) failed.");
B
Bernard Xiong 已提交
57

mysterywolf's avatar
mysterywolf 已提交
58
    return errors != 0;
B
Bernard Xiong 已提交
59 60
}
FINSH_FUNCTION_EXPORT(libc_mem, memory test for libc);