| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | /* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date           Author       Notes * 2017/11/30     Bernard      The first version. */#include <stdint.h>#include <stdio.h>#include <rtthread.h>#include <dfs_posix.h>#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags,    int fd, off_t offset){    uint8_t *mem;    if (addr)    {        mem = addr;    }    else mem = (uint8_t *)malloc(length);    if (mem)    {        off_t cur;        size_t read_bytes;        cur = lseek(fd, 0, SEEK_SET);        lseek(fd, offset, SEEK_SET);        read_bytes = read(fd, mem, length);        if (read_bytes != length)        {            if (addr == RT_NULL)            {                /* read failed */                free(mem);                mem = RT_NULL;            }        }        lseek(fd, cur, SEEK_SET);        return mem;    }    errno = ENOMEM;    return MAP_FAILED;}int munmap(void *addr, size_t length){    if (addr)    {        free(addr);        return 0;    }    return -1;}
 |