home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 9 / FreshFishVol9-CD2.bin / bbs / gnu / libnix-0.8-src.lha / libnix-0.8 / sources / nix / misc / bcopy.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-12  |  730 b   |  37 lines

  1. #include <stdlib.h>
  2.  
  3. /* This is a _fast_ block move routine */
  4.  
  5. void bcopy(const void *s1,void *s2,size_t n)
  6. { size_t m;
  7.   if(!n)
  8.     return;
  9.   if(s2<s1)
  10.   { if((long)s1&1)
  11.     { *((char *)s2)++=*((char *)s1)++;
  12.       n--; }
  13.     if(!((long)s2&1))
  14.     { m=n/sizeof(long);
  15.       n&=sizeof(long)-1;
  16.       for(;m;m--)
  17.         *((long *)s2)++=*((long *)s1)++;
  18.     }
  19.     for(;n;n--)
  20.       *((char *)s2)++=*((char *)s1)++;
  21.   }else
  22.   { (char *)s1+=n;
  23.     (char *)s2+=n;
  24.     if((long)s1&1)
  25.     { *--((char *)s2)=*--((char *)s1);
  26.       n--; }
  27.     if(!((long)s2&1))
  28.     { m=n/sizeof(long);
  29.       n&=sizeof(long)-1;
  30.       for(;m;m--)
  31.         *--((long *)s2)=*--((long *)s1);
  32.     }
  33.     for(;n;n--)
  34.       *--((char *)s2)=*--((char *)s1);
  35.   }
  36. }
  37.