home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Mint / mntlib32.zoo / purec / bzero.c < prev    next >
C/C++ Source or Header  |  1993-02-07  |  964b  |  57 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. #define INC(b, size) b = (void *)( ((char *)(b)) + (size) )
  16.  
  17. void _bzero(b, n)
  18. void * b;
  19. register unsigned long n;
  20. {
  21.     register unsigned long l, w;
  22.     
  23.     assert((b != NULL));
  24.     
  25.     if(ODD(b))
  26.     {
  27.     *(char *)b = (char)0;
  28.     INC(b, 1);
  29.     n--;
  30.     }
  31.  
  32.     l = (n >> 2); /* # of longs */
  33.     n -= (l << 2);
  34.     w = (n >> 1); /* # of words */
  35.     n -= (w << 1); /* n == # of residual bytes */
  36.  
  37.     while(l--) {
  38.     *((long *)b) = 0L;
  39.     INC(b, sizeof(long));
  40.     }
  41.     while(w--) {
  42.     *((short *)b) = (short)0;
  43.     INC(b, sizeof(short));
  44.     }
  45.     while(n--) {
  46.     *(char *)b = (char)0;
  47.     INC(b, 1);
  48.     }
  49. }
  50.  
  51. void bzero(b, n)
  52. void * b;
  53. size_t n;
  54. {
  55.     _bzero(b, (unsigned long) n);
  56. }
  57.