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 / m68k / bzero.c next >
Encoding:
C/C++ Source or Header  |  1994-01-24  |  2.1 KB  |  86 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. void
  27. #ifdef linux
  28. DEFUN(bzero, (s, n), PTR s AND int len)
  29. #else
  30. DEFUN(bzero, (s, n), PTR s AND size_t len)
  31. #endif
  32. {
  33.   long int dstp = (long int) s;
  34.   CONST op_t zero = 0;
  35.  
  36.   if (len >= 8)
  37.     {
  38.       size_t xlen;
  39.  
  40.       /* There are at least some bytes to zero.  No need to test
  41.      for LEN == 0 in this alignment loop.  */
  42.       while (dstp % OPSIZ != 0)
  43.     {
  44.       ((byte *) dstp)[0] = 0;
  45.       dstp += 1;
  46.       len -= 1;
  47.     }
  48.  
  49.       /* Write 8 op_t per iteration until less than 8 op_t remain.  */
  50.       xlen = len / (OPSIZ * 8);
  51.       while (xlen != 0)
  52.     {
  53.       ((op_t *) dstp)[0] = zero;
  54.       ((op_t *) dstp)[1] = zero;
  55.       ((op_t *) dstp)[2] = zero;
  56.       ((op_t *) dstp)[3] = zero;
  57.       ((op_t *) dstp)[4] = zero;
  58.       ((op_t *) dstp)[5] = zero;
  59.       ((op_t *) dstp)[6] = zero;
  60.       ((op_t *) dstp)[7] = zero;
  61.       dstp += 8 * OPSIZ;
  62.       xlen -= 1;
  63.     }
  64.       len %= OPSIZ * 8;
  65.  
  66.       /* Write 1 op_t per iteration until less than op_t remain.  */
  67.       xlen = len / OPSIZ;
  68.       while (xlen != 0)
  69.     {
  70.       ((op_t *) dstp)[0] = zero;
  71.       dstp += OPSIZ;
  72.       xlen -= 1;
  73.     }
  74.       len %= OPSIZ;
  75.     }
  76.  
  77.   /* Write the last few bytes.  */
  78.   while (len != 0)
  79.     {
  80.       ((byte *) dstp)[0] = 0;
  81.       dstp += 1;
  82.       len -= 1;
  83.     }
  84. }
  85.  
  86.