Changeset 1751
- Timestamp:
- 07/31/10 19:21:13 (6 weeks ago)
- Files:
-
- 1 modified
-
branches/bmx-0.3.x/allocate.c (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/bmx-0.3.x/allocate.c
r1634 r1751 28 28 29 29 30 #define MAGIC_NUMBER 0x12345678 30 #define MAGIC_NUMBER_HEADER 0x12345678 31 #define MAGIC_NUMBER_TRAILOR 0x12 31 32 32 33 #if defined DEBUG_MALLOC … … 40 41 uint32_t length; 41 42 int32_t tag; 42 uint32_t magicNumber ;43 uint32_t magicNumberHeader; 43 44 }; 44 45 45 struct chunkTrailer 46 { 47 uint32_t magicNumber; 48 }; 46 typedef unsigned char magicNumberTrailor; 47 49 48 50 49 … … 153 152 { 154 153 struct chunkHeader *walker; 155 struct chunkTrailer *chunkTrailer;154 magicNumberTrailor *chunkTrailer; 156 155 unsigned char *memory; 157 156 … … 159 158 for (walker = chunkList; walker != NULL; walker = walker->next) 160 159 { 161 if (walker->magicNumber != MAGIC_NUMBER)160 if (walker->magicNumberHeader != MAGIC_NUMBER_HEADER) 162 161 { 163 162 dbgf( DBGL_SYS, DBGT_ERR, 164 163 "invalid magic number in header: %08x, malloc tag = %d", 165 walker->magicNumber , walker->tag );164 walker->magicNumberHeader, walker->tag ); 166 165 cleanup_all( -500073 ); 167 166 } … … 169 168 memory = (unsigned char *)walker; 170 169 171 chunkTrailer = ( struct chunkTrailer*)(memory + sizeof(struct chunkHeader) + walker->length);172 173 if ( chunkTrailer->magicNumber != MAGIC_NUMBER)174 {175 dbgf( DBGL_SYS, DBGT_ERR, 176 "invalid magic number in trailer: %08x, malloc tag = %d", 177 chunkTrailer->magicNumber, walker->tag);178 cleanup_all( -500075);179 }180 }170 chunkTrailer = (magicNumberTrailor*)(memory + sizeof(struct chunkHeader) + walker->length); 171 172 if (*chunkTrailer != MAGIC_NUMBER_TRAILOR) 173 { 174 dbgf(DBGL_SYS, DBGT_ERR, 175 "invalid magic number in trailer: %08x, malloc tag = %d", 176 *chunkTrailer, walker->tag); 177 cleanup_all(-500075); 178 } 179 } 181 180 182 181 } … … 208 207 unsigned char *memory; 209 208 struct chunkHeader *chunkHeader; 210 struct chunkTrailer *chunkTrailer;209 magicNumberTrailor *chunkTrailer; 211 210 unsigned char *chunk; 212 211 213 memory = malloc(length + sizeof(struct chunkHeader) + sizeof( struct chunkTrailer));212 memory = malloc(length + sizeof(struct chunkHeader) + sizeof(magicNumberTrailor)); 214 213 215 214 if (memory == NULL) 216 215 { 217 216 dbg( DBGL_SYS, DBGT_ERR, "Cannot allocate %u bytes, malloc tag = %d", 218 (unsigned int)(length + sizeof(struct chunkHeader) + sizeof( struct chunkTrailer)), tag );217 (unsigned int)(length + sizeof(struct chunkHeader) + sizeof(magicNumberTrailor)), tag ); 219 218 cleanup_all( -500076 ); 220 219 } … … 222 221 chunkHeader = (struct chunkHeader *)memory; 223 222 chunk = memory + sizeof(struct chunkHeader); 224 chunkTrailer = (struct chunkTrailer *)(memory + sizeof(struct chunkHeader) + length);223 chunkTrailer = (magicNumberTrailor *) (memory + sizeof (struct chunkHeader) + length); 225 224 226 225 chunkHeader->length = length; 227 226 chunkHeader->tag = tag; 228 chunkHeader->magicNumber = MAGIC_NUMBER;229 230 chunkTrailer->magicNumber = MAGIC_NUMBER;227 chunkHeader->magicNumberHeader = MAGIC_NUMBER_HEADER; 228 229 *chunkTrailer = MAGIC_NUMBER_TRAILOR; 231 230 232 231 chunkHeader->next = chunkList; … … 249 248 unsigned char *memory; 250 249 struct chunkHeader *chunkHeader=NULL; 251 struct chunkTrailer *chunkTrailer;250 magicNumberTrailor *chunkTrailer; 252 251 unsigned char *result; 253 252 uint32_t copyLength; … … 257 256 chunkHeader = (struct chunkHeader *)(memory - sizeof(struct chunkHeader)); 258 257 259 if (chunkHeader->magicNumber != MAGIC_NUMBER)258 if (chunkHeader->magicNumberHeader != MAGIC_NUMBER_HEADER) 260 259 { 261 260 dbgf( DBGL_SYS, DBGT_ERR, 262 261 "invalid magic number in header: %08x, malloc tag = %d", 263 chunkHeader->magicNumber , chunkHeader->tag );262 chunkHeader->magicNumberHeader, chunkHeader->tag ); 264 263 cleanup_all( -500078 ); 265 264 } 266 265 267 chunkTrailer = ( struct chunkTrailer *)(memory + chunkHeader->length);268 269 if ( chunkTrailer->magicNumber != MAGIC_NUMBER)266 chunkTrailer = (magicNumberTrailor *)(memory + chunkHeader->length); 267 268 if (*chunkTrailer != MAGIC_NUMBER_TRAILOR) 270 269 { 271 dbgf( DBGL_SYS, DBGT_ERR, 272 "invalid magic number in trailer: %08x, malloc tag = %d", 273 chunkTrailer->magicNumber, chunkHeader->tag);274 cleanup_all( -500079);275 }270 dbgf( DBGL_SYS, DBGT_ERR, 271 "invalid magic number in trailer: %08x, malloc tag = %d", 272 *chunkTrailer, chunkHeader->tag); 273 cleanup_all(-500079); 274 } 276 275 } 277 276 … … 298 297 unsigned char *memory; 299 298 struct chunkHeader *chunkHeader; 300 struct chunkTrailer *chunkTrailer;299 magicNumberTrailor *chunkTrailer; 301 300 struct chunkHeader *walker; 302 301 struct chunkHeader *previous; … … 305 304 chunkHeader = (struct chunkHeader *)(memory - sizeof(struct chunkHeader)); 306 305 307 if (chunkHeader->magicNumber != MAGIC_NUMBER)306 if (chunkHeader->magicNumberHeader != MAGIC_NUMBER_HEADER) 308 307 { 309 308 dbgf( DBGL_SYS, DBGT_ERR, 310 "invalid magic number in header: %08x, malloc tag = %d, free tag = %d ",311 chunkHeader->magicNumber , chunkHeader->tag, tag);309 "invalid magic number in header: %08x, malloc tag = %d, free tag = %d, malloc size = %d", 310 chunkHeader->magicNumberHeader, chunkHeader->tag, tag, chunkHeader->length ); 312 311 cleanup_all( -500080 ); 313 312 } … … 325 324 if (walker == NULL) 326 325 { 327 dbg( DBGL_SYS, DBGT_ERR, "Double free detected, malloc tag = %d, free tag = %d ",328 chunkHeader->tag, tag );326 dbg( DBGL_SYS, DBGT_ERR, "Double free detected, malloc tag = %d, free tag = %d, malloc size = %d", 327 chunkHeader->tag, tag, chunkHeader->length ); 329 328 cleanup_all( -500081 ); 330 329 } … … 337 336 338 337 339 chunkTrailer = ( struct chunkTrailer *)(memory + chunkHeader->length);340 341 if ( chunkTrailer->magicNumber != MAGIC_NUMBER)342 {343 dbgf( DBGL_SYS, DBGT_ERR, 344 "invalid magic number in trailer: %08x, malloc tag = %d, free tag= %d",345 chunkTrailer->magicNumber, chunkHeader->tag, tag);346 cleanup_all( -500082);338 chunkTrailer = (magicNumberTrailor *)(memory + chunkHeader->length); 339 340 if (*chunkTrailer != MAGIC_NUMBER_TRAILOR) 341 { 342 dbgf(DBGL_SYS, DBGT_ERR, 343 "invalid magic number in trailer: %08x, malloc tag = %d, free tag = %d, malloc size = %d", 344 *chunkTrailer, chunkHeader->tag, tag, chunkHeader->length); 345 cleanup_all(-500082); 347 346 } 348 347
