home *** CD-ROM | disk | FTP | other *** search
/ Serving the Web / ServingTheWeb1995.disc1of1.iso / linux / slacksrce / d / libc / libc-4.6 / libc-4 / libc-linux / sysdeps / generic / bzero.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-01-12  |  2.2 KB  |  91 lines

  1. /* Copyright (C) 1991 Free Software Foundation, Inc.
  2.    Contributed by Torbjorn Granlund (tege@sics.se).
  3.    
  4. This file is part of the GNU C Library.
  5.  
  6. The GNU C Library is free software; you can redistribute it and/or
  7. modify it under the terms of the GNU Library General Public License as
  8. published by the Free Software Foundation; either version 2 of the
  9. License, or (at your option) any later version.
  10.  
  11. The GNU C Library is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14. Library General Public License for more details.
  15.  
  16. You should have received a copy of the GNU Library General Public
  17. License along with the GNU C Library; see the file COPYING.LIB.  If
  18. not, write to the Free Software Foundation, Inc., 675 Mass Ave,
  19. Cambridge, MA 02139, USA.  */
  20.  
  21. #include <ansidecl.h>
  22. #include <string.h>
  23. #include <memcopy.h>
  24.  
  25. /* Set N bytes of S to 0.  */
  26. #ifdef __linux__
  27. void
  28. DEFUN(bzero, (s, len), PTR s AND int len)
  29. #else
  30. void
  31. DEFUN(bzero, (s, n), PTR s AND size_t len)
  32. #endif
  33. {
  34.   long int dstp = (long int) s;
  35.   CONST op_t zero = 0;
  36.  
  37. #ifdef __linux__
  38.   if (len <= 0) return;
  39. #endif
  40.  
  41.   if (len >= 8)
  42.     {
  43.       size_t xlen;
  44.  
  45.       /* There are at least some bytes to zero.  No need to test
  46.      for LEN == 0 in this alignment loop.  */
  47.       while (dstp % OPSIZ != 0)
  48.     {
  49.       ((byte *) dstp)[0] = 0;
  50.       dstp += 1;
  51.       len -= 1;
  52.     }
  53.  
  54.       /* Write 8 op_t per iteration until less than 8 op_t remain.  */
  55.       xlen = len / (OPSIZ * 8);
  56.       while (xlen != 0)
  57.     {
  58.       ((op_t *) dstp)[0] = zero;
  59.       ((op_t *) dstp)[1] = zero;
  60.       ((op_t *) dstp)[2] = zero;
  61.       ((op_t *) dstp)[3] = zero;
  62.       ((op_t *) dstp)[4] = zero;
  63.       ((op_t *) dstp)[5] = zero;
  64.       ((op_t *) dstp)[6] = zero;
  65.       ((op_t *) dstp)[7] = zero;
  66.       dstp += 8 * OPSIZ;
  67.       xlen -= 1;
  68.     }
  69.       len %= OPSIZ * 8;
  70.  
  71.       /* Write 1 op_t per iteration until less than op_t remain.  */
  72.       xlen = len / OPSIZ;
  73.       while (xlen != 0)
  74.     {
  75.       ((op_t *) dstp)[0] = zero;
  76.       dstp += OPSIZ;
  77.       xlen -= 1;
  78.     }
  79.       len %= OPSIZ;
  80.     }
  81.  
  82.   /* Write the last few bytes.  */
  83.   while (len != 0)
  84.     {
  85.       ((byte *) dstp)[0] = 0;
  86.       dstp += 1;
  87.       len -= 1;
  88.     }
  89. }
  90.  
  91.