summaryrefslogtreecommitdiff
path: root/strings/bzero.c
diff options
context:
space:
mode:
Diffstat (limited to 'strings/bzero.c')
-rw-r--r--strings/bzero.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/strings/bzero.c b/strings/bzero.c
new file mode 100644
index 00000000000..cc628e05277
--- /dev/null
+++ b/strings/bzero.c
@@ -0,0 +1,67 @@
+/* File : bzero.c
+ Author : Richard A. O'Keefe.
+ Michael Widenius; ifdef MC68000
+ Updated: 23 April 1984
+ Defines: bzero()
+
+ bzero(dst, len) moves "len" 0 bytes to "dst".
+ Thus to clear a disc buffer to 0s do bzero(buffer, BUFSIZ).
+
+ Note: the "b" routines are there to exploit certain VAX order codes,
+ The asm code is presented for your interest and amusement.
+*/
+
+#ifndef BSD_FUNCS
+#include "strings.h"
+
+#ifdef bzero
+#undef bzero /* remove macro */
+#endif
+
+#if VaxAsm
+
+static void _bzero64 _A((char *dst,int len));
+
+void bzero(dst, len)
+char *dst;
+uint len;
+{
+ while ((int) len >= 64*K)
+ {
+ _bzero64(dst, 64*K-1);
+ dst += 64*K-1;
+ len -= 64*K-1;
+ }
+ _bzero64(dst, len);
+}
+
+_bzero64(dst, len)
+char *dst;
+int len;
+{
+ asm("movc5 $0,*4(ap),$0,8(ap),*4(ap)");
+}
+
+#else
+
+#if defined(MC68000) && defined(DS90)
+
+void bzero(dst, len)
+char *dst;
+uint len;
+{
+ bfill(dst,len,0); /* This is very optimized ! */
+} /* bzero */
+
+#else
+
+void bzero(dst, len)
+register char *dst;
+register uint len;
+{
+ while (len-- != 0) *dst++ = 0;
+} /* bzero */
+
+#endif
+#endif
+#endif /* BSD_FUNCS */