Changeset 1646 for zzuf/trunk
- Timestamp:
- Jan 10, 2007, 7:11:13 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
zzuf/trunk/src/load-mem.c
r1645 r1646 109 109 /* 32k of ugly static memory for programs that call us *before* we’re 110 110 * initialised */ 111 uint64_t dummy_buffer[4096]; 111 static uint64_t dummy_buffer[4096]; 112 static int dummy_offset = 0; 112 113 113 114 void *calloc(size_t nmemb, size_t size) … … 116 117 if(!_zz_ready) 117 118 { 119 int i = (nmemb * size + 7) / 8; 120 ret = dummy_buffer + dummy_offset; 121 dummy_offset += i; 118 122 /* Calloc says we must zero the data */ 119 int i = (nmemb * size + 7) / 8; 120 while(i--) 121 dummy_buffer[i] = 0; 122 return dummy_buffer; 123 memset(ret, 0, size); 124 return ret; 123 125 } 124 126 ret = calloc_orig(nmemb, size); … … 132 134 void *ret; 133 135 if(!_zz_ready) 134 return dummy_buffer; 136 { 137 int i = (size + 7) / 8; 138 ret = dummy_buffer + dummy_offset; 139 dummy_offset += i; 140 return ret; 141 } 135 142 ret = malloc_orig(size); 136 143 if(ret == NULL && _zz_memory && errno == ENOMEM) … … 141 148 void free(void *ptr) 142 149 { 143 if(ptr == dummy_buffer) 150 if((uintptr_t)ptr >= (uintptr_t)dummy_buffer 151 && (uintptr_t)ptr <= (uintptr_t)dummy_buffer + sizeof(dummy_buffer)) 144 152 return; 145 153 if(!_zz_ready) … … 151 159 { 152 160 void *ret; 153 if(ptr == dummy_buffer) 154 return ptr; 161 if((uintptr_t)ptr >= (uintptr_t)dummy_buffer 162 && (uintptr_t)ptr <= (uintptr_t)dummy_buffer + sizeof(dummy_buffer)) 163 return ptr; /* FIXME: who would call realloc() so early? */ 155 164 if(!_zz_ready) 156 165 LOADSYM(realloc);
Note: See TracChangeset
for help on using the changeset viewer.