Changeset 7ad3c2f in mainline for libc/generic/mmap.c


Ignore:
Timestamp:
2006-03-14T16:34:17Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
00c4994
Parents:
79522a7
Message:

Added malloc implementation.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libc/generic/mmap.c

    r79522a7 r7ad3c2f  
    3030#include <unistd.h>
    3131
     32/** Mremap syscall */
    3233void *mremap(void *address, size_t size, unsigned long flags)
    3334{
    3435        return (void *) __SYSCALL3(SYS_MREMAP, (sysarg_t ) address, (sysarg_t) size, (sysarg_t) flags);
    3536}
     37
     38
     39static size_t heapsize = 0;
     40/* Start of heap linker symbol */
     41extern char _heap;
     42
     43/** Sbrk emulation
     44 *
     45 * @param size New area that should be allocated or negative,
     46               if it should be shrinked
     47 * @return Pointer to newly allocated area
     48 */
     49void *sbrk(ssize_t incr)
     50{
     51        void *res;
     52        /* Check for invalid values */
     53        if (incr < 0 && -incr > heapsize)
     54                return NULL;
     55        /* Check for too large value */
     56        if (incr > 0 && incr+heapsize < heapsize)
     57                return NULL;
     58        /* Check for too small values */
     59        if (incr < 0 && incr+heapsize > heapsize)
     60                return NULL;
     61
     62        res = mremap(&_heap, heapsize + incr,0);
     63        if (!res)
     64                return NULL;
     65        res = (void *)&_heap + incr;
     66        heapsize += incr;
     67        return res;
     68}
Note: See TracChangeset for help on using the changeset viewer.