core/expat-2.0.1/amiga/stdlib.c
changeset 300 b6d834208d33
parent 296 ea3dbc023c80
equal deleted inserted replaced
299:f06c5eba524d 300:b6d834208d33
       
     1 /*
       
     2 ** Copyright (c) 2001-2007 Expat maintainers.
       
     3 **
       
     4 ** Permission is hereby granted, free of charge, to any person obtaining
       
     5 ** a copy of this software and associated documentation files (the
       
     6 ** "Software"), to deal in the Software without restriction, including
       
     7 ** without limitation the rights to use, copy, modify, merge, publish,
       
     8 ** distribute, sublicense, and/or sell copies of the Software, and to
       
     9 ** permit persons to whom the Software is furnished to do so, subject to
       
    10 ** the following conditions:
       
    11 ** 
       
    12 ** The above copyright notice and this permission notice shall be included
       
    13 ** in all copies or substantial portions of the Software.
       
    14 ** 
       
    15 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
       
    16 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
       
    17 ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
       
    18 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
       
    19 ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
       
    20 ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
       
    21 ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
       
    22 */
       
    23 
       
    24 #include <stdlib.h>
       
    25 #include <exec/memory.h>
       
    26 #include <proto/exec.h>
       
    27 #include <proto/utility.h>
       
    28 
       
    29 void * malloc (size_t len)
       
    30 {
       
    31 	uint32 size = sizeof(uint32) + len;
       
    32 
       
    33 	uint32 *mem = AllocMem(size, MEMF_SHARED);
       
    34 	if ( mem != 0 )  {
       
    35 		*mem = size;
       
    36 		++mem;
       
    37 	}
       
    38 
       
    39 	return mem;
       
    40 }
       
    41 
       
    42 
       
    43 void * realloc (void * mem, size_t len2)
       
    44 {
       
    45 	if ( mem == 0 )  {
       
    46 		return malloc(len2);
       
    47 	}
       
    48 
       
    49 	if ( len2 == 0 )  {
       
    50 		free(mem);
       
    51 		return 0;
       
    52 	}
       
    53 
       
    54 	void * new_mem = malloc(len2);
       
    55 	if ( new_mem == 0 )  {
       
    56 		return 0;
       
    57 	}
       
    58 
       
    59 	uint32 mem_size = *(((uint32*)mem) - 1);
       
    60 	CopyMem(mem, new_mem, mem_size);
       
    61 	free(mem);
       
    62 
       
    63 	return new_mem;
       
    64 }
       
    65 
       
    66 
       
    67 void free (void * mem)
       
    68 {
       
    69 	if ( mem != 0 )  {
       
    70 		uint32 * size_ptr = ((uint32*)mem) - 1;
       
    71 		FreeMem(size_ptr, *size_ptr);
       
    72 	}
       
    73 }
       
    74 
       
    75 
       
    76 int memcmp (const void * a, const void * b, size_t len)
       
    77 {
       
    78 	size_t i;
       
    79 	int diff;
       
    80 
       
    81 	for ( i = 0; i < len; ++i )  {
       
    82 		diff = *((uint8 *)a++) - *((uint8 *)b++);
       
    83 		if ( diff )  {
       
    84 			return diff;
       
    85 		}
       
    86 	}
       
    87 
       
    88 	return 0;
       
    89 }
       
    90 
       
    91 
       
    92 void * memcpy (void * t, const void * a, size_t len)
       
    93 {
       
    94 	CopyMem((APTR)a, t, len);
       
    95 	return t;
       
    96 }
       
    97 
       
    98 
       
    99 void * memmove (void * t1, const void * t2, size_t len)
       
   100 {
       
   101 	MoveMem((APTR)t2, t1, len);
       
   102 	return t1;
       
   103 }
       
   104 
       
   105 
       
   106 void * memset (void * t, int c, size_t len)
       
   107 {
       
   108 	return SetMem(t, c, len);
       
   109 }