fillbytes.c
上传用户:weiliju62
上传日期:2007-01-06
资源大小:619k
文件大小:2k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)fillbytes.c 1.9 98/02/15 Copyright 1987 J. Schilling */
  2. /*
  3.  * fill memory with data
  4.  *
  5.  * Copyright (c) 1987 J. Schilling
  6.  */
  7. /*
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2, or (at your option)
  11.  * any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; see the file COPYING.  If not, write to
  20.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22. #include <standard.h>
  23. #include <align.h>
  24. #define DO8(a) a;a;a;a;a;a;a;a;
  25. #define cval ((char) lval)
  26. #ifdef PROTOTYPES
  27. char *fillbytes(void *tov, int cnt, char val)
  28. #else
  29. char *fillbytes(tov, cnt, val)
  30. void *tov;
  31. int cnt;
  32. char val;
  33. #endif
  34. {
  35. register char *to = (char *)tov;
  36. register int n;
  37. register long lval;
  38. if ((n = cnt) == 0)
  39. return (to);
  40. lval = val & 0xFF;
  41. while (!laligned(to)) {
  42. *to++ = cval;
  43. n--;
  44. }
  45. if (n >= 8 * sizeof(long)) {
  46. register int rem = n % (8 * sizeof (long));
  47. lval |= (lval<<8);
  48. lval |= (lval<<16);
  49. #if SIZE_LONG > SIZE_INT
  50. lval |= (lval<<32);
  51. #endif
  52. n /= (8 * sizeof (long));
  53. {
  54. register long *tol = (long *)to;
  55. do {
  56. DO8 (*tol++ = lval);
  57. } while (--n > 0);
  58. to = (char *)tol;
  59. }
  60. n = rem;
  61. if (n >= 8) {
  62. n -= 8;
  63. do {
  64. DO8 (*to++ = cval);
  65. } while ((n -= 8) >= 0);
  66. n += 8;
  67. }
  68. if (n > 0) do {
  69. *to++ = cval;
  70. } while (--n > 0);
  71. return (to);
  72. }
  73. if (n > 0) do {
  74. *to++ = cval;
  75. } while (--n > 0);
  76. return (to);
  77. }