ReactOS 0.4.15-dev-7788-g1ad9096
zerobytes.c
Go to the documentation of this file.
1/* @(#)zerobytes.c 1.2 11/07/30 Copyright Copyright 1987, 1995-2011 J. Schilling */
2/*
3 * fill memory with null bytes
4 *
5 * Copyright (c) 1987, 1995-2011 J. Schilling
6 */
7/*
8 * The contents of this file are subject to the terms of the
9 * Common Development and Distribution License, Version 1.0 only
10 * (the "License"). You may not use this file except in compliance
11 * with the License.
12 *
13 * See the file CDDL.Schily.txt in this distribution for details.
14 *
15 * When distributing Covered Code, include this CDDL HEADER in each
16 * file and include the License file CDDL.Schily.txt from this distribution.
17 */
18
19#include <schily/standard.h>
20#include <schily/align.h>
21#include <schily/types.h>
22#include <schily/schily.h>
23
24#define DO8(a) a; a; a; a; a; a; a; a;
25
26/*
27 * zero(to, cnt)
28 */
29EXPORT char *
30zerobytes(tov, cnt)
31 void *tov;
32 ssize_t cnt;
33{
34 register char *to = (char *)tov;
35 register ssize_t n;
36 register long lval = 0L;
37
38 /*
39 * If we change cnt to be unsigned, check for == instead of <=
40 */
41 if ((n = cnt) <= 0)
42 return (to);
43
44 if (n < 8 * sizeof (long)) { /* Simple may be faster... */
45 do { /* n is always > 0 */
46 *to++ = '\0';
47 } while (--n > 0);
48 return (to);
49 }
50
51 /*
52 * Assign byte-wise until properly aligned for a long pointer.
53 */
54 while (--n >= 0 && !laligned(to)) {
55 *to++ = '\0';
56 }
57 n++;
58
59 if (n >= (ssize_t)(8 * sizeof (long))) {
60 register ssize_t rem = n % (8 * sizeof (long));
61
62 n /= (8 * sizeof (long));
63 {
64 register long *tol = (long *)to;
65
66 do {
67 DO8 (*tol++ = lval);
68 } while (--n > 0);
69
70 to = (char *)tol;
71 }
72 n = rem;
73
74 if (n >= 8) {
75 n -= 8;
76 do {
77 DO8 (*to++ = '\0');
78 } while ((n -= 8) >= 0);
79 n += 8;
80 }
81 if (n > 0) do {
82 *to++ = '\0';
83 } while (--n > 0);
84 return (to);
85 }
86 if (n > 0) do {
87 *to++ = '\0';
88 } while (--n > 0);
89 return (to);
90}
GLdouble n
Definition: glext.h:7729
#define L(x)
Definition: ntvdm.h:50
#define long
Definition: qsort.c:33
#define laligned(a)
Definition: align.h:19
int ssize_t
Definition: rosdhcp.h:48
EXPORT char * zerobytes(void *tov, ssize_t cnt)
Definition: zerobytes.c:30
#define DO8(a)
Definition: zerobytes.c:24