add mini standalone libc, to be filled in as necessary.
This commit is contained in:
parent
ccca0093a2
commit
78c33b3965
|
@ -0,0 +1,19 @@
|
|||
# $Id: Makefile,v 1.1 1993/10/13 11:16:19 cgd Exp $
|
||||
|
||||
LIB= c_sa
|
||||
|
||||
# string routines
|
||||
SRCS+= bcopy.c memset.c strerror.c
|
||||
|
||||
# other misc routines
|
||||
SRCS+= errno.c printf.c
|
||||
|
||||
NOPROFILE=
|
||||
NOPIC=
|
||||
|
||||
install:
|
||||
|
||||
# and for things which we don't have sources for, but are built out of
|
||||
# other sources
|
||||
|
||||
.include <bsd.lib.mk>
|
|
@ -0,0 +1,19 @@
|
|||
# $Id: Makefile.inc,v 1.1 1993/10/13 11:16:21 cgd Exp $
|
||||
#
|
||||
# NOTE: $S must correspond to the top of the 'sys' tree
|
||||
|
||||
C_SA_DIR= $S/lib/libc_sa
|
||||
|
||||
.if exists($(C_SA_DIR)/obj)
|
||||
C_SA_LIBDIR= $(C_SA_DIR)/obj
|
||||
.else
|
||||
C_SA_LIBDIR= $(C_SA_DIR)
|
||||
.endif
|
||||
|
||||
C_SA_LIB= $(C_SA_LIBDIR)/libc_sa.a
|
||||
|
||||
$(C_SA_LIB): .NOTMAIN __always_make_c_sa_lib
|
||||
@echo making sure the stand-alone c library is up to date...
|
||||
@(cd $(C_SA_LIBDIR) ; make)
|
||||
|
||||
__always_make_c_sa_lib: .NOTMAIN
|
|
@ -0,0 +1,140 @@
|
|||
/*-
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
/*static char *sccsid = "from: @(#)bcopy.c 5.11 (Berkeley) 6/21/91";*/
|
||||
static char *rcsid = "$Id: bcopy.c,v 1.1 1993/10/13 11:16:22 cgd Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <string.h>
|
||||
|
||||
/*
|
||||
* sizeof(word) MUST BE A POWER OF TWO
|
||||
* SO THAT wmask BELOW IS ALL ONES
|
||||
*/
|
||||
typedef int word; /* "word" used for optimal copy speed */
|
||||
|
||||
#define wsize sizeof(word)
|
||||
#define wmask (wsize - 1)
|
||||
|
||||
/*
|
||||
* Copy a block of memory, handling overlap.
|
||||
* This is the routine that actually implements
|
||||
* (the portable versions of) bcopy, memcpy, and memmove.
|
||||
*/
|
||||
#ifdef MEMCOPY
|
||||
void *
|
||||
memcpy(dst0, src0, length)
|
||||
#else
|
||||
#ifdef MEMMOVE
|
||||
void *
|
||||
memmove(dst0, src0, length)
|
||||
#else
|
||||
void
|
||||
bcopy(src0, dst0, length)
|
||||
#endif
|
||||
#endif
|
||||
void *dst0;
|
||||
const void *src0;
|
||||
register size_t length;
|
||||
{
|
||||
register char *dst = dst0;
|
||||
register const char *src = src0;
|
||||
register size_t t;
|
||||
|
||||
if (length == 0 || dst == src) /* nothing to do */
|
||||
goto done;
|
||||
|
||||
/*
|
||||
* Macros: loop-t-times; and loop-t-times, t>0
|
||||
*/
|
||||
#define TLOOP(s) if (t) TLOOP1(s)
|
||||
#define TLOOP1(s) do { s; } while (--t)
|
||||
|
||||
if ((unsigned long)dst < (unsigned long)src) {
|
||||
/*
|
||||
* Copy forward.
|
||||
*/
|
||||
t = (int)src; /* only need low bits */
|
||||
if ((t | (int)dst) & wmask) {
|
||||
/*
|
||||
* Try to align operands. This cannot be done
|
||||
* unless the low bits match.
|
||||
*/
|
||||
if ((t ^ (int)dst) & wmask || length < wsize)
|
||||
t = length;
|
||||
else
|
||||
t = wsize - (t & wmask);
|
||||
length -= t;
|
||||
TLOOP1(*dst++ = *src++);
|
||||
}
|
||||
/*
|
||||
* Copy whole words, then mop up any trailing bytes.
|
||||
*/
|
||||
t = length / wsize;
|
||||
TLOOP(*(word *)dst = *(word *)src; src += wsize; dst += wsize);
|
||||
t = length & wmask;
|
||||
TLOOP(*dst++ = *src++);
|
||||
} else {
|
||||
/*
|
||||
* Copy backwards. Otherwise essentially the same.
|
||||
* Alignment works as before, except that it takes
|
||||
* (t&wmask) bytes to align, not wsize-(t&wmask).
|
||||
*/
|
||||
src += length;
|
||||
dst += length;
|
||||
t = (int)src;
|
||||
if ((t | (int)dst) & wmask) {
|
||||
if ((t ^ (int)dst) & wmask || length <= wsize)
|
||||
t = length;
|
||||
else
|
||||
t &= wmask;
|
||||
length -= t;
|
||||
TLOOP1(*--dst = *--src);
|
||||
}
|
||||
t = length / wsize;
|
||||
TLOOP(src -= wsize; dst -= wsize; *(word *)dst = *(word *)src);
|
||||
t = length & wmask;
|
||||
TLOOP(*--dst = *--src);
|
||||
}
|
||||
done:
|
||||
#if defined(MEMCOPY) || defined(MEMMOVE)
|
||||
return (dst0);
|
||||
#else
|
||||
return;
|
||||
#endif
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
/*
|
||||
* $Id: errno.c,v 1.1 1993/10/13 11:16:22 cgd Exp $
|
||||
*/
|
||||
|
||||
int errno;
|
|
@ -0,0 +1,60 @@
|
|||
/*-
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
/*static char *sccsid = "from: @(#)memset.c 5.6 (Berkeley) 1/26/91";*/
|
||||
static char *rcsid = "$Id: memset.c,v 1.1 1993/10/13 11:16:23 cgd Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <string.h>
|
||||
|
||||
void *
|
||||
memset(dst, c, n)
|
||||
void *dst;
|
||||
register int c;
|
||||
register size_t n;
|
||||
{
|
||||
|
||||
if (n != 0) {
|
||||
register char *d = dst;
|
||||
|
||||
do
|
||||
*d++ = c;
|
||||
while (--n != 0);
|
||||
}
|
||||
return (dst);
|
||||
}
|
|
@ -0,0 +1,177 @@
|
|||
/*-
|
||||
* Copyright (c) 1991 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* from: @(#)printf.c 5.6 (Berkeley) 5/25/91
|
||||
* $Id: printf.c,v 1.1 1993/10/13 11:16:24 cgd Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* Scaled down version of printf(3).
|
||||
*
|
||||
* One additional format:
|
||||
*
|
||||
* The format %b is supported to decode error registers.
|
||||
* Its usage is:
|
||||
*
|
||||
* printf("reg=%b\n", regval, "<base><arg>*");
|
||||
*
|
||||
* where <base> is the output base expressed as a control character, e.g.
|
||||
* \10 gives octal; \20 gives hex. Each arg is a sequence of characters,
|
||||
* the first of which gives the bit number to be inspected (origin 1), and
|
||||
* the next characters (up to a control character, i.e. a character <= 32),
|
||||
* give the name of the register. Thus:
|
||||
*
|
||||
* printf("reg=%b\n", 3, "\10\2BITTWO\1BITONE\n");
|
||||
*
|
||||
* would produce output:
|
||||
*
|
||||
* reg=3<BITTWO,BITONE>
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
/*
|
||||
* Note that stdarg.h and the ANSI style va_start macro is used for both
|
||||
* ANSI and traditional C compilers.
|
||||
*/
|
||||
#define KERNEL
|
||||
#include <machine/stdarg.h>
|
||||
#undef KERNEL
|
||||
|
||||
static void kprintn __P((u_long, int));
|
||||
|
||||
void
|
||||
#if __STDC__
|
||||
printf(const char *fmt, ...)
|
||||
#else
|
||||
printf(fmt /* , va_alist */)
|
||||
char *fmt;
|
||||
#endif
|
||||
{
|
||||
register char *p;
|
||||
register int ch, n;
|
||||
unsigned long ul;
|
||||
int lflag, set;
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
for (;;) {
|
||||
while ((ch = *fmt++) != '%') {
|
||||
if (ch == '\0')
|
||||
return;
|
||||
putchar(ch);
|
||||
}
|
||||
lflag = 0;
|
||||
reswitch: switch (ch = *fmt++) {
|
||||
case 'l':
|
||||
lflag = 1;
|
||||
goto reswitch;
|
||||
case 'b':
|
||||
ul = va_arg(ap, int);
|
||||
p = va_arg(ap, char *);
|
||||
kprintn(ul, *p++);
|
||||
|
||||
if (!ul)
|
||||
break;
|
||||
|
||||
for (set = 0; n = *p++;) {
|
||||
if (ul & (1 << (n - 1))) {
|
||||
putchar(set ? ',' : '<');
|
||||
for (; (n = *p) > ' '; ++p)
|
||||
putchar(n);
|
||||
set = 1;
|
||||
} else
|
||||
for (; *p > ' '; ++p);
|
||||
}
|
||||
if (set)
|
||||
putchar('>');
|
||||
break;
|
||||
case 'c':
|
||||
ch = va_arg(ap, int);
|
||||
putchar(ch & 0x7f);
|
||||
break;
|
||||
case 's':
|
||||
p = va_arg(ap, char *);
|
||||
while (ch = *p++)
|
||||
putchar(ch);
|
||||
break;
|
||||
case 'd':
|
||||
ul = lflag ?
|
||||
va_arg(ap, long) : va_arg(ap, int);
|
||||
if ((long)ul < 0) {
|
||||
putchar('-');
|
||||
ul = -(long)ul;
|
||||
}
|
||||
kprintn(ul, 10);
|
||||
break;
|
||||
case 'o':
|
||||
ul = lflag ?
|
||||
va_arg(ap, u_long) : va_arg(ap, u_int);
|
||||
kprintn(ul, 8);
|
||||
break;
|
||||
case 'u':
|
||||
ul = lflag ?
|
||||
va_arg(ap, u_long) : va_arg(ap, u_int);
|
||||
kprintn(ul, 10);
|
||||
break;
|
||||
case 'x':
|
||||
ul = lflag ?
|
||||
va_arg(ap, u_long) : va_arg(ap, u_int);
|
||||
kprintn(ul, 16);
|
||||
break;
|
||||
default:
|
||||
putchar('%');
|
||||
if (lflag)
|
||||
putchar('l');
|
||||
putchar(ch);
|
||||
}
|
||||
}
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
static void
|
||||
kprintn(ul, base)
|
||||
unsigned long ul;
|
||||
int base;
|
||||
{
|
||||
/* hold a long in base 8 */
|
||||
char *p, buf[(sizeof(long) * NBBY / 3) + 1];
|
||||
|
||||
p = buf;
|
||||
do {
|
||||
*p++ = "0123456789abcdef"[ul % base];
|
||||
} while (ul /= base);
|
||||
do {
|
||||
putchar(*--p);
|
||||
} while (p > buf);
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* $Id: strerror.c,v 1.1 1993/10/13 11:16:25 cgd Exp $
|
||||
*/
|
||||
|
||||
#include <sys/errno.h>
|
||||
|
||||
char *
|
||||
strerror(err)
|
||||
int err;
|
||||
{
|
||||
char ebuf[1024] = "Unknown error: code ";
|
||||
char *p;
|
||||
int length;
|
||||
|
||||
switch (err) {
|
||||
case EPERM:
|
||||
return "Permission Denied";
|
||||
case ENOENT:
|
||||
return "No such file or directory";
|
||||
case ESTALE:
|
||||
return "Stale NFS file handle";
|
||||
default:
|
||||
length = strlen(ebuf);
|
||||
p = ebuf+length;
|
||||
do {
|
||||
*p++ = "0123456789"[err % 10];
|
||||
} while (err /= 10);
|
||||
*p = '\0';
|
||||
return ebuf;
|
||||
}
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
# $Id: Makefile,v 1.1 1993/10/13 05:41:15 cgd Exp $
|
||||
# $Id: Makefile,v 1.2 1993/10/13 11:16:30 cgd Exp $
|
||||
|
||||
LIB= netboot
|
||||
SRCS= arp.c bootp.c exec.c in_cksum.c netif.c net.c nfsboot.c \
|
||||
SRCS= arp.c bootp.c exec.c in_cksum.c net.c netif.c nfsboot.c \
|
||||
rpc.c util.c
|
||||
|
||||
NOPROFILE=
|
||||
|
|
|
@ -56,34 +56,6 @@ intoa(addr)
|
|||
return (cp + 1);
|
||||
}
|
||||
|
||||
char *strerror(errnum)
|
||||
int errnum;
|
||||
{
|
||||
char ebuf[1024] = "Unknown error: code ";
|
||||
char *p;
|
||||
int length;
|
||||
|
||||
|
||||
|
||||
switch (errnum) {
|
||||
case EPERM:
|
||||
return "Permission Denied";
|
||||
case ENOENT:
|
||||
return "No such file or directory";
|
||||
case ESTALE:
|
||||
return "Stale NFS file handle";
|
||||
default:
|
||||
length = strlen(ebuf);
|
||||
p = ebuf+length;
|
||||
do {
|
||||
*p++ = "0123456789"[errnum %10];
|
||||
} while (errnum /= 10);
|
||||
*p = '\0';
|
||||
return ebuf;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Convert Ethernet address to printable (loggable) representation.
|
||||
*/
|
||||
|
@ -104,11 +76,3 @@ ether_sprintf(ap)
|
|||
*--cp = 0;
|
||||
return (etherbuf);
|
||||
}
|
||||
|
||||
void bzero(addr, len)
|
||||
char *addr;
|
||||
int len;
|
||||
{
|
||||
while (len--)
|
||||
*addr++ = '\0';
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue