home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / mint / mntlib16.lzh / MNTLIB16 / BZERO.C < prev    next >
C/C++ Source or Header  |  1993-08-03  |  718b  |  41 lines

  1. #include <stddef.h>
  2. #include <string.h>
  3. #include <assert.h>
  4.  
  5. #undef ODD
  6. #define ODD(x) (((short)(x)) & 1)    /* word ops are faster */
  7.  
  8. /*
  9.  * zero out a chunk efficiently
  10.  * handles odd address
  11.  *
  12.  *   ++jrb  bammi@dsrgsun.ces.cwru.edu
  13.  */
  14.  
  15. void bzero(b, n)
  16. register void * b;
  17. register size_t n;
  18. {
  19.     register size_t l, w;
  20.     
  21.     assert((b != NULL));
  22.     
  23.     if(ODD(b))
  24.     {
  25.     *(char *)b++ = (char)0;
  26.     n--;
  27.     }
  28.  
  29.     l = (n >> 2); /* # of longs */
  30.     n -= (l << 2);
  31.     w = (n >> 1); /* # of words */
  32.     n -= (w << 1); /* n == # of residual bytes */
  33.  
  34.     while(l--)
  35.     *((long *)b)++ = 0L;
  36.     while(w--)
  37.     *((short *)b)++ = (short)0;
  38.     while(n--)
  39.     *(char *)b++ = (char)0;
  40. }
  41.