memory.c 975 字节
Newer Older
B
Bernard Xiong 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/*
 * memory.c
 *
 *  Created on: 2010-11-17
 *      Author: bernard
 */
#include <stdio.h>
#include <stdlib.h>
#include <finsh.h>
#include <errno.h>

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

int libc_mem(void)
{
mysterywolf's avatar
mysterywolf 已提交
21 22
    void *p;
    int save;
B
Bernard Xiong 已提交
23

mysterywolf's avatar
mysterywolf 已提交
24
    errno = 0;
B
Bernard Xiong 已提交
25

mysterywolf's avatar
mysterywolf 已提交
26 27
    p = malloc(-1);
    save = errno;
B
Bernard Xiong 已提交
28

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

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

mysterywolf's avatar
mysterywolf 已提交
35 36 37
    p = malloc(10);
    if (p == NULL)
        merror("malloc (10) failed.");
B
Bernard Xiong 已提交
38

mysterywolf's avatar
mysterywolf 已提交
39 40 41 42
    /* realloc (p, 0) == free (p).  */
    p = realloc(p, 0);
    if (p != NULL)
        merror("realloc (p, 0) failed.");
B
Bernard Xiong 已提交
43

mysterywolf's avatar
mysterywolf 已提交
44 45 46 47 48
    p = malloc(0);
    if (p == NULL)
    {
        printf("malloc(0) returns NULL\n");
    }
B
Bernard Xiong 已提交
49

mysterywolf's avatar
mysterywolf 已提交
50 51 52
    p = realloc(p, 0);
    if (p != NULL)
        merror("realloc (p, 0) failed.");
B
Bernard Xiong 已提交
53

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