Tue Mar 17 23:42:45 2009 UTC ()
Add local declarations of bcmp() and bzero() because libkern.h no longer
provides those declarations.

It's possible that these can be removed later when we find out whether
these functions are actually needed in the kernel, but meanwhile, this
allows alpha, hp700 and the powerpc ports (who all build these as part
of libkern) to complete their builds.


(he)
diff -r1.2 -r1.3 src/common/lib/libc/string/bcmp.c
diff -r1.6 -r1.7 src/common/lib/libc/string/memset.c

cvs diff -r1.2 -r1.3 src/common/lib/libc/string/bcmp.c (switch to unified diff)

--- src/common/lib/libc/string/bcmp.c 2007/06/04 18:19:26 1.2
+++ src/common/lib/libc/string/bcmp.c 2009/03/17 23:42:45 1.3
@@ -1,67 +1,69 @@ @@ -1,67 +1,69 @@
1/* $NetBSD: bcmp.c,v 1.2 2007/06/04 18:19:26 christos Exp $ */ 1/* $NetBSD: bcmp.c,v 1.3 2009/03/17 23:42:45 he Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 1987, 1993 4 * Copyright (c) 1987, 1993
5 * The Regents of the University of California. All rights reserved. 5 * The Regents of the University of California. All rights reserved.
6 * 6 *
7 * Redistribution and use in source and binary forms, with or without 7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions 8 * modification, are permitted provided that the following conditions
9 * are met: 9 * are met:
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer. 11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright 12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the 13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution. 14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the University nor the names of its contributors 15 * 3. Neither the name of the University nor the names of its contributors
16 * may be used to endorse or promote products derived from this software 16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission. 17 * without specific prior written permission.
18 * 18 *
19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE. 29 * SUCH DAMAGE.
30 */ 30 */
31 31
32#include <sys/cdefs.h> 32#include <sys/cdefs.h>
33#if defined(LIBC_SCCS) && !defined(lint) 33#if defined(LIBC_SCCS) && !defined(lint)
34#if 0 34#if 0
35static char sccsid[] = "@(#)bcmp.c 8.1 (Berkeley) 6/4/93"; 35static char sccsid[] = "@(#)bcmp.c 8.1 (Berkeley) 6/4/93";
36#else 36#else
37__RCSID("$NetBSD: bcmp.c,v 1.2 2007/06/04 18:19:26 christos Exp $"); 37__RCSID("$NetBSD: bcmp.c,v 1.3 2009/03/17 23:42:45 he Exp $");
38#endif 38#endif
39#endif /* LIBC_SCCS and not lint */ 39#endif /* LIBC_SCCS and not lint */
40 40
41 41
42#if !defined(_KERNEL) && !defined(_STANDALONE) 42#if !defined(_KERNEL) && !defined(_STANDALONE)
43#include <assert.h> 43#include <assert.h>
44#include <string.h> 44#include <string.h>
45#else 45#else
46#include <lib/libkern/libkern.h> 46#include <lib/libkern/libkern.h>
47#endif 47#endif
48 48
 49int bcmp(const void *, const void *, size_t);
 50
49/* 51/*
50 * bcmp -- vax cmpc3 instruction 52 * bcmp -- vax cmpc3 instruction
51 */ 53 */
52int 54int
53bcmp(const void *b1, const void *b2, size_t length) 55bcmp(const void *b1, const void *b2, size_t length)
54{ 56{
55 const char *p1 = b1, *p2 = b2; 57 const char *p1 = b1, *p2 = b2;
56 58
57 _DIAGASSERT(b1 != 0); 59 _DIAGASSERT(b1 != 0);
58 _DIAGASSERT(b2 != 0); 60 _DIAGASSERT(b2 != 0);
59 61
60 if (length == 0) 62 if (length == 0)
61 return(0); 63 return(0);
62 do 64 do
63 if (*p1++ != *p2++) 65 if (*p1++ != *p2++)
64 break; 66 break;
65 while (--length); 67 while (--length);
66 return(length); 68 return(length);
67} 69}

cvs diff -r1.6 -r1.7 src/common/lib/libc/string/memset.c (switch to unified diff)

--- src/common/lib/libc/string/memset.c 2008/03/29 14:03:22 1.6
+++ src/common/lib/libc/string/memset.c 2009/03/17 23:42:45 1.7
@@ -1,164 +1,166 @@ @@ -1,164 +1,166 @@
1/* $NetBSD: memset.c,v 1.6 2008/03/29 14:03:22 he Exp $ */ 1/* $NetBSD: memset.c,v 1.7 2009/03/17 23:42:45 he Exp $ */
2 2
3/*- 3/*-
4 * Copyright (c) 1990, 1993 4 * Copyright (c) 1990, 1993
5 * The Regents of the University of California. All rights reserved. 5 * The Regents of the University of California. All rights reserved.
6 * 6 *
7 * This code is derived from software contributed to Berkeley by 7 * This code is derived from software contributed to Berkeley by
8 * Mike Hibler and Chris Torek. 8 * Mike Hibler and Chris Torek.
9 * 9 *
10 * Redistribution and use in source and binary forms, with or without 10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions 11 * modification, are permitted provided that the following conditions
12 * are met: 12 * are met:
13 * 1. Redistributions of source code must retain the above copyright 13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer. 14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright 15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the 16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution. 17 * documentation and/or other materials provided with the distribution.
18 * 3. Neither the name of the University nor the names of its contributors 18 * 3. Neither the name of the University nor the names of its contributors
19 * may be used to endorse or promote products derived from this software 19 * may be used to endorse or promote products derived from this software
20 * without specific prior written permission. 20 * without specific prior written permission.
21 * 21 *
22 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 22 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 25 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 * SUCH DAMAGE. 32 * SUCH DAMAGE.
33 */ 33 */
34 34
35#include <sys/cdefs.h> 35#include <sys/cdefs.h>
36#if defined(LIBC_SCCS) && !defined(lint) 36#if defined(LIBC_SCCS) && !defined(lint)
37#if 0 37#if 0
38static char sccsid[] = "@(#)memset.c 8.1 (Berkeley) 6/4/93"; 38static char sccsid[] = "@(#)memset.c 8.1 (Berkeley) 6/4/93";
39#else 39#else
40__RCSID("$NetBSD: memset.c,v 1.6 2008/03/29 14:03:22 he Exp $"); 40__RCSID("$NetBSD: memset.c,v 1.7 2009/03/17 23:42:45 he Exp $");
41#endif 41#endif
42#endif /* LIBC_SCCS and not lint */ 42#endif /* LIBC_SCCS and not lint */
43 43
44#include <sys/types.h> 44#include <sys/types.h>
45 45
46#if !defined(_KERNEL) && !defined(_STANDALONE) 46#if !defined(_KERNEL) && !defined(_STANDALONE)
47#include <assert.h> 47#include <assert.h>
48#include <limits.h> 48#include <limits.h>
49#include <string.h> 49#include <string.h>
50#else 50#else
51#include <lib/libkern/libkern.h> 51#include <lib/libkern/libkern.h>
52#include <machine/limits.h> 52#include <machine/limits.h>
53#endif  53#endif
54 54
55#define wsize sizeof(u_int) 55#define wsize sizeof(u_int)
56#define wmask (wsize - 1) 56#define wmask (wsize - 1)
57 57
58#ifdef _FORTIFY_SOURCE 58#ifdef _FORTIFY_SOURCE
59#undef bzero 59#undef bzero
60#undef memset 60#undef memset
61#endif 61#endif
62 62
63#ifndef __OPTIMIZE_SIZE__ 63#ifndef __OPTIMIZE_SIZE__
64#ifdef BZERO 64#ifdef BZERO
65#define RETURN return 65#define RETURN return
66#define VAL 0 66#define VAL 0
67#define WIDEVAL 0 67#define WIDEVAL 0
68 68
 69void bzero(void *, size_t);
 70
69void 71void
70bzero(void *dst0, size_t length) 72bzero(void *dst0, size_t length)
71#else 73#else
72#define RETURN return (dst0) 74#define RETURN return (dst0)
73#define VAL c0 75#define VAL c0
74#define WIDEVAL c 76#define WIDEVAL c
75 77
76void * 78void *
77memset(void *dst0, int c0, size_t length) 79memset(void *dst0, int c0, size_t length)
78#endif 80#endif
79{ 81{
80 size_t t; 82 size_t t;
81#ifndef BZERO 83#ifndef BZERO
82 u_int c; 84 u_int c;
83#endif 85#endif
84 u_char *dst; 86 u_char *dst;
85 87
86 _DIAGASSERT(dst0 != 0); 88 _DIAGASSERT(dst0 != 0);
87 89
88 dst = dst0; 90 dst = dst0;
89 /* 91 /*
90 * If not enough words, just fill bytes. A length >= 2 words 92 * If not enough words, just fill bytes. A length >= 2 words
91 * guarantees that at least one of them is `complete' after 93 * guarantees that at least one of them is `complete' after
92 * any necessary alignment. For instance: 94 * any necessary alignment. For instance:
93 * 95 *
94 * |-----------|-----------|-----------| 96 * |-----------|-----------|-----------|
95 * |00|01|02|03|04|05|06|07|08|09|0A|00| 97 * |00|01|02|03|04|05|06|07|08|09|0A|00|
96 * ^---------------------^ 98 * ^---------------------^
97 * dst dst+length-1 99 * dst dst+length-1
98 * 100 *
99 * but we use a minimum of 3 here since the overhead of the code 101 * but we use a minimum of 3 here since the overhead of the code
100 * to do word writes is substantial. 102 * to do word writes is substantial.
101 */  103 */
102 if (length < 3 * wsize) { 104 if (length < 3 * wsize) {
103 while (length != 0) { 105 while (length != 0) {
104 *dst++ = VAL; 106 *dst++ = VAL;
105 --length; 107 --length;
106 } 108 }
107 RETURN; 109 RETURN;
108 } 110 }
109 111
110#ifndef BZERO 112#ifndef BZERO
111 if ((c = (u_char)c0) != 0) { /* Fill the word. */ 113 if ((c = (u_char)c0) != 0) { /* Fill the word. */
112 c = (c << 8) | c; /* u_int is 16 bits. */ 114 c = (c << 8) | c; /* u_int is 16 bits. */
113#if UINT_MAX > 0xffff 115#if UINT_MAX > 0xffff
114 c = (c << 16) | c; /* u_int is 32 bits. */ 116 c = (c << 16) | c; /* u_int is 32 bits. */
115#endif 117#endif
116#if UINT_MAX > 0xffffffff 118#if UINT_MAX > 0xffffffff
117 c = (c << 32) | c; /* u_int is 64 bits. */ 119 c = (c << 32) | c; /* u_int is 64 bits. */
118#endif 120#endif
119 } 121 }
120#endif 122#endif
121 /* Align destination by filling in bytes. */ 123 /* Align destination by filling in bytes. */
122 if ((t = (size_t)((u_long)dst & wmask)) != 0) { 124 if ((t = (size_t)((u_long)dst & wmask)) != 0) {
123 t = wsize - t; 125 t = wsize - t;
124 length -= t; 126 length -= t;
125 do { 127 do {
126 *dst++ = VAL; 128 *dst++ = VAL;
127 } while (--t != 0); 129 } while (--t != 0);
128 } 130 }
129 131
130 /* Fill words. Length was >= 2*words so we know t >= 1 here. */ 132 /* Fill words. Length was >= 2*words so we know t >= 1 here. */
131 t = length / wsize; 133 t = length / wsize;
132 do { 134 do {
133 *(u_int *)(void *)dst = WIDEVAL; 135 *(u_int *)(void *)dst = WIDEVAL;
134 dst += wsize; 136 dst += wsize;
135 } while (--t != 0); 137 } while (--t != 0);
136 138
137 /* Mop up trailing bytes, if any. */ 139 /* Mop up trailing bytes, if any. */
138 t = length & wmask; 140 t = length & wmask;
139 if (t != 0) 141 if (t != 0)
140 do { 142 do {
141 *dst++ = VAL; 143 *dst++ = VAL;
142 } while (--t != 0); 144 } while (--t != 0);
143 RETURN; 145 RETURN;
144} 146}
145#else /* __OPTIMIZE_SIZE__ */ 147#else /* __OPTIMIZE_SIZE__ */
146#ifdef BZERO 148#ifdef BZERO
147void 149void
148bzero(void *dstv, size_t length) 150bzero(void *dstv, size_t length)
149{ 151{
150 u_char *dst = dstv; 152 u_char *dst = dstv;
151 while (length-- > 0) 153 while (length-- > 0)
152 *dst++ = 0; 154 *dst++ = 0;
153} 155}
154#else 156#else
155void * 157void *
156memset(void *dstv, int c, size_t length) 158memset(void *dstv, int c, size_t length)
157{ 159{
158 u_char *dst = dstv; 160 u_char *dst = dstv;
159 while (length-- > 0) 161 while (length-- > 0)
160 *dst++ = c; 162 *dst++ = c;
161 return dstv; 163 return dstv;
162} 164}
163#endif /* BZERO */ 165#endif /* BZERO */
164#endif /* __OPTIMIZE_SIZE__ */ 166#endif /* __OPTIMIZE_SIZE__ */