Diff markup
001 001
002 002
003 003
004 004
005 005
006 006
007 007
008 008
009 009
010 010
011 011
012 012
013 013
014 014
015 015
016 016
017 017
>> 018
>> 019 #include "crt.h"
>> 020 #include "libc.h"
>> 021
>> 022
>> 023 void * mmap(void *start, size_t length, int prot , int flags,
>> 024 const char *path, loff_t offset)
>> 025 {
>> 026
>> 027 if (offset < 0)
>> 028 return NULL;
>> 029
>> 030 if (0 != _sos_mmap(& start, length, prot, flags, path, offset))
>> 031 return NULL;
>> 032
>> 033 return start;
>> 034 }
>> 035
>> 036
>> 037 void * mremap(void * old_addr, size_t old_len,
>> 038 size_t new_len,
>> 039 unsigned long flags)
>> 040 {
>> 041 void * new_uaddr = old_addr;
>> 042 if (0 != _sos_mresize(old_addr, old_len, & new_uaddr, new_len, flags))
>> 043 return NULL;
>> 044
>> 045 return new_uaddr;
>> 046 }
>> 047
>> 048
>> 049
>> 050
>> 051
>> 052
>> 053 static void * kernel_heap_top = NULL;
>> 054 int brk(void *end_data_seg)
>> 055 {
>> 056 if (! end_data_seg)
>> 057 return -1;
>> 058
>> 059 kernel_heap_top = _sos_brk(end_data_seg);
>> 060 return 0;
>> 061 }
>> 062
>> 063
>> 064 void *sbrk(ptrdiff_t increment)
>> 065 {
>> 066 if (! kernel_heap_top)
>> 067 kernel_heap_top = _sos_brk(0);
>> 068
>> 069 kernel_heap_top = _sos_brk(kernel_heap_top + increment);
>> 070 return kernel_heap_top;
>> 071 }
>> 072
>> 073
>> 074 void * calloc (size_t nmemb, size_t size)
>> 075 {
>> 076 return malloc(nmemb * size);
>> 077 }
>> 078
>> 079
>> 080
>> 081
>> 082
>> 083
>> 084
>> 085 static void * malloc_heap_top = NULL;
>> 086 void * malloc (size_t size)
>> 087 {
>> 088 void * retval;
>> 089
>> 090 if (size <= 0)
>> 091 return NULL;
>> 092
>> 093
>> 094 size = ((size-1) & ~3) + 4;
>> 095
>> 096 if (! kernel_heap_top)
>> 097 kernel_heap_top = _sos_brk(0);
>> 098
>> 099 if (! malloc_heap_top)
>> 100 malloc_heap_top = kernel_heap_top;
>> 101
>> 102 retval = malloc_heap_top;
>> 103 malloc_heap_top += size;
>> 104
>> 105 return retval;
>> 106 }