Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • boot/generic/src/memstr.c

    rb31f735 ra2da43c  
    5151}
    5252
    53 /** Move memory block with possible overlapping.
    54  *
    55  * Copy cnt bytes from src address to dst address. The source
    56  * and destination memory areas may overlap.
    57  *
    58  * @param dst Destination address to copy to.
    59  * @param src Source address to copy from.
    60  * @param cnt Number of bytes to copy.
    61  *
    62  * @return Destination address.
    63  *
    64  */
    65 void *memmove(void *dst, const void *src, size_t cnt)
    66 {
    67         /* Nothing to do? */
    68         if (src == dst)
    69                 return dst;
    70        
    71         /* Non-overlapping? */
    72         if ((dst >= src + cnt) || (src >= dst + cnt))
    73                 return memcpy(dst, src, cnt);
    74        
    75         uint8_t *dp;
    76         const uint8_t *sp;
    77        
    78         /* Which direction? */
    79         if (src > dst) {
    80                 /* Forwards. */
    81                 dp = dst;
    82                 sp = src;
    83                
    84                 while (cnt-- != 0)
    85                         *dp++ = *sp++;
    86         } else {
    87                 /* Backwards. */
    88                 dp = dst + (cnt - 1);
    89                 sp = src + (cnt - 1);
    90                
    91                 while (cnt-- != 0)
    92                         *dp-- = *sp--;
    93         }
    94        
    95         return dst;
    96 }
    97 
    9853/** @}
    9954 */
Note: See TracChangeset for help on using the changeset viewer.