diff options
author | Toomas Soome <tsoome@me.com> | 2020-09-16 22:45:34 +0300 |
---|---|---|
committer | Toomas Soome <tsoome@me.com> | 2020-09-25 20:34:45 +0300 |
commit | 28de4f3c3209c81f9a96e2019d44a0b9adcb74cb (patch) | |
tree | 4ef303f9cfefbd28622d901f115d8f3e717ab886 | |
parent | 3e1c5f3a80260eb14c78730bcaca9e6c74f528a0 (diff) | |
download | illumos-joyent-28de4f3c3209c81f9a96e2019d44a0b9adcb74cb.tar.gz |
13173 loader: add strtoul, strtoull, memmem and abort
Reviewed by: Robert Mustacchi <rm+illumos@fingolfin.org>
Reviewed by: Andy Fiddaman <andy@omniosce.org>
Approved by: Dan McDonald <danmcd@joyent.com>
-rw-r--r-- | usr/src/boot/Makefile.version | 2 | ||||
-rw-r--r-- | usr/src/boot/lib/libstand/Makefile.inc | 9 | ||||
-rw-r--r-- | usr/src/boot/lib/libstand/abort.c | 34 | ||||
-rw-r--r-- | usr/src/boot/lib/libstand/stand.h | 10 | ||||
-rw-r--r-- | usr/src/boot/lib/libstand/strtol.c | 124 | ||||
-rw-r--r-- | usr/src/boot/lib/libstand/strtoul.c | 121 | ||||
-rw-r--r-- | usr/src/boot/sys/boot/libstand/Makefile.com | 3 | ||||
-rw-r--r-- | usr/src/common/util/explicit_bzero.c (renamed from usr/src/lib/libc/port/gen/explicit_bzero.c) | 0 | ||||
-rw-r--r-- | usr/src/common/util/memmem.c (renamed from usr/src/lib/libc/port/gen/memmem.c) | 0 | ||||
-rw-r--r-- | usr/src/common/util/strtol.c | 22 | ||||
-rw-r--r-- | usr/src/common/util/strtoll.c | 24 | ||||
-rw-r--r-- | usr/src/common/util/strtoul.c | 24 | ||||
-rw-r--r-- | usr/src/common/util/strtoull.c | 26 | ||||
-rw-r--r-- | usr/src/lib/libc/amd64/Makefile | 4 | ||||
-rw-r--r-- | usr/src/lib/libc/i386/Makefile.com | 4 | ||||
-rw-r--r-- | usr/src/lib/libc/sparc/Makefile.com | 4 | ||||
-rw-r--r-- | usr/src/lib/libc/sparcv9/Makefile.com | 4 |
17 files changed, 122 insertions, 293 deletions
diff --git a/usr/src/boot/Makefile.version b/usr/src/boot/Makefile.version index 1df520dd7d..8644947a6e 100644 --- a/usr/src/boot/Makefile.version +++ b/usr/src/boot/Makefile.version @@ -33,4 +33,4 @@ LOADER_VERSION = 1.1 # Use date like formatting here, YYYY.MM.DD.XX, without leading zeroes. # The version is processed from left to right, the version number can only # be increased. -BOOT_VERSION = $(LOADER_VERSION)-2020.09.17.1 +BOOT_VERSION = $(LOADER_VERSION)-2020.09.24.1 diff --git a/usr/src/boot/lib/libstand/Makefile.inc b/usr/src/boot/lib/libstand/Makefile.inc index 00c1e34664..633005d142 100644 --- a/usr/src/boot/lib/libstand/Makefile.inc +++ b/usr/src/boot/lib/libstand/Makefile.inc @@ -22,16 +22,15 @@ # standalone components and stuff we have modified locally SRCS= $(ZLIB)/gzguts.h $(ZLIB)/zutil.h -SRCS += $(SASRC)/__main.c $(SASRC)/assert.c +SRCS += $(SASRC)/__main.c $(SASRC)/abort.c $(SASRC)/assert.c SRCS += $(SASRC)/bcd.c $(SASRC)/environment.c -SRCS += $(SASRC)/getopt.c $(SASRC)/strtol.c -SRCS += $(SASRC)/strtoul.c $(SASRC)/random.c +SRCS += $(SASRC)/getopt.c $(SASRC)/random.c SRCS += $(SASRC)/sbrk.c $(SASRC)/twiddle.c SRCS += $(SASRC)/zalloc.c $(SASRC)/zalloc_malloc.c -OBJS= __main.o assert.o bcd.o environment.o \ +OBJS= __main.o abort.o assert.o bcd.o environment.o \ getopt.o gets.o globals.o pager.o panic.o printf.o \ - strdup.o strerror.o strtol.o strtoul.o random.o \ + strdup.o strerror.o strtol.o strtoll.o strtoul.o strtoull.o random.o \ sbrk.o twiddle.o zalloc.o zalloc_malloc.o # private (pruned) versions of libc string functions diff --git a/usr/src/boot/lib/libstand/abort.c b/usr/src/boot/lib/libstand/abort.c new file mode 100644 index 0000000000..663555a333 --- /dev/null +++ b/usr/src/boot/lib/libstand/abort.c @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2018 Netflix, Inc. + * + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ + +#include <sys/cdefs.h> + +#include <stand.h> + +void +abort(void) +{ + panic("Bootloader aborted by abort"); +} diff --git a/usr/src/boot/lib/libstand/stand.h b/usr/src/boot/lib/libstand/stand.h index 6526eb6d76..1af513b5fa 100644 --- a/usr/src/boot/lib/libstand/stand.h +++ b/usr/src/boot/lib/libstand/stand.h @@ -298,9 +298,6 @@ extern struct dirent *readdirfd(int); extern void srandom(ulong_t seed); extern ulong_t random(void); -/* imports from stdlib, locally modified */ -extern long strtol(const char *, char **, int); -extern unsigned long strtoul(const char *, char **, int); extern char *optarg; /* getopt(3) external variables */ extern int optind, opterr, optopt, optreset; extern int getopt(int, char * const [], const char *); @@ -354,6 +351,13 @@ extern int unsetenv(const char *name); extern ev_sethook_t env_noset; /* refuse set operation */ extern ev_unsethook_t env_nounset; /* refuse unset operation */ +/* stdlib.h routines */ +extern long strtol(const char *__restrict, char **__restrict, int); +extern long long strtoll(const char *__restrict, char **__restrict, int); +extern unsigned long strtoul(const char *__restrict, char **__restrict, int); +extern unsigned long long strtoull(const char *__restrict, char **__restrict, + int); + /* BCD conversions (undocumented) */ extern uchar_t const bcd2bin_data[]; extern uchar_t const bin2bcd_data[]; diff --git a/usr/src/boot/lib/libstand/strtol.c b/usr/src/boot/lib/libstand/strtol.c deleted file mode 100644 index 20a1d2f08f..0000000000 --- a/usr/src/boot/lib/libstand/strtol.c +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (c) 1990, 1993 - * 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. 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. - */ - -#include <sys/cdefs.h> - -#include "stand.h" -#include <limits.h> - -/* - * Convert a string to a long integer. - * - * Ignores `locale' stuff. Assumes that the upper and lower case - * alphabets and digits are each contiguous. - */ -long -strtol(const char *nptr, char **endptr, int base) -{ - const char *s; - unsigned long acc; - unsigned char c; - unsigned long cutoff; - int neg = 0, any, cutlim; - - /* Be sensible about NULL strings */ - if (nptr == NULL) - nptr = ""; - s = nptr; - - /* - * Skip white space and pick up leading +/- sign if any. - * If base is 0, allow 0x for hex and 0 for octal, else - * assume decimal; if base is already 16, allow 0x. - */ - do { - c = *s++; - } while (isspace(c)); - if (c == '-') { - neg = 1; - c = *s++; - } else if (c == '+') - c = *s++; - if ((base == 0 || base == 16) && - c == '0' && (*s == 'x' || *s == 'X')) { - c = s[1]; - s += 2; - base = 16; - } - if (base == 0) - base = c == '0' ? 8 : 10; - - /* - * Compute the cutoff value between legal numbers and illegal - * numbers. That is the largest legal value, divided by the - * base. An input number that is greater than this value, if - * followed by a legal input character, is too big. One that - * is equal to this value may be valid or not; the limit - * between valid and invalid numbers is then based on the last - * digit. For instance, if the range for longs is - * [-2147483648..2147483647] and the input base is 10, - * cutoff will be set to 214748364 and cutlim to either - * 7 (neg==0) or 8 (neg==1), meaning that if we have accumulated - * a value > 214748364, or equal but the next digit is > 7 (or 8), - * the number is too big, and we will return a range error. - * - * Set any if any `digits' consumed; make it negative to indicate - * overflow. - */ - cutoff = neg ? -(unsigned long)LONG_MIN : LONG_MAX; - cutlim = cutoff % (unsigned long)base; - cutoff /= (unsigned long)base; - for (acc = 0, any = 0; ; c = *s++) { - if (!isascii(c)) - break; - if (isdigit(c)) - c -= '0'; - else if (isalpha(c)) - c -= isupper(c) ? 'A' - 10 : 'a' - 10; - else - break; - if (c >= base) - break; - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - any = -1; - else { - any = 1; - acc *= base; - acc += c; - } - } - if (any < 0) { - acc = neg ? LONG_MIN : LONG_MAX; - errno = ERANGE; - } else if (neg) - acc = -acc; - if (endptr != NULL) - *endptr = (char *)(any ? s - 1 : nptr); - return (acc); -} diff --git a/usr/src/boot/lib/libstand/strtoul.c b/usr/src/boot/lib/libstand/strtoul.c deleted file mode 100644 index 0c7147c2ab..0000000000 --- a/usr/src/boot/lib/libstand/strtoul.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 1990, 1993 - * The Regents of the University of California. All rights reserved. - * - * Copyright (c) 2011 The FreeBSD Foundation - * All rights reserved. - * Portions of this software were developed by David Chisnall - * under sponsorship from the FreeBSD Foundation. - * - * 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. 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[] = "@(#)strtoul.c 8.1 (Berkeley) 6/4/93"; -#endif /* LIBC_SCCS and not lint */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include "stand.h" -#include <limits.h> - -/* - * Convert a string to an unsigned long integer. - * - * Assumes that the upper and lower case - * alphabets and digits are each contiguous. - */ -unsigned long -strtoul(const char * __restrict nptr, char ** __restrict endptr, int base) -{ - const char *s; - unsigned long acc; - char c; - unsigned long cutoff; - int neg, any, cutlim; - - /* - * See strtol for comments as to the logic used. - */ - s = nptr; - do { - c = *s++; - } while (isspace((unsigned char)c)); - if (c == '-') { - neg = 1; - c = *s++; - } else { - neg = 0; - if (c == '+') - c = *s++; - } - if ((base == 0 || base == 16) && - c == '0' && (*s == 'x' || *s == 'X') && - ((s[1] >= '0' && s[1] <= '9') || - (s[1] >= 'A' && s[1] <= 'F') || - (s[1] >= 'a' && s[1] <= 'f'))) { - c = s[1]; - s += 2; - base = 16; - } - if (base == 0) - base = c == '0' ? 8 : 10; - acc = any = 0; - if (base < 2 || base > 36) - goto noconv; - - cutoff = ULONG_MAX / base; - cutlim = ULONG_MAX % base; - for ( ; ; c = *s++) { - if (c >= '0' && c <= '9') - c -= '0'; - else if (c >= 'A' && c <= 'Z') - c -= 'A' - 10; - else if (c >= 'a' && c <= 'z') - c -= 'a' - 10; - else - break; - if (c >= base) - break; - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - any = -1; - else { - any = 1; - acc *= base; - acc += c; - } - } - if (any < 0) { - acc = ULONG_MAX; - errno = ERANGE; - } else if (!any) { -noconv: - errno = EINVAL; - } else if (neg) - acc = -acc; - if (endptr != NULL) - *endptr = (char *)(any ? s - 1 : nptr); - return (acc); -} diff --git a/usr/src/boot/sys/boot/libstand/Makefile.com b/usr/src/boot/sys/boot/libstand/Makefile.com index 5159856528..f796b31626 100644 --- a/usr/src/boot/sys/boot/libstand/Makefile.com +++ b/usr/src/boot/sys/boot/libstand/Makefile.com @@ -28,6 +28,7 @@ include $(ZFSSRC)/Makefile.inc LIBCSRC= $(SRC)/lib/libc OBJS += explicit_bzero.o +OBJS += memmem.o CPPFLAGS += -I$(SRC)/uts/common @@ -70,5 +71,5 @@ x86: %.o: $(LZ4)/%.c $(COMPILE.c) $< -%.o: $(LIBCSRC)/port/gen/%.c +%.o: $(SRC)/common/util/%.c $(COMPILE.c) $< diff --git a/usr/src/lib/libc/port/gen/explicit_bzero.c b/usr/src/common/util/explicit_bzero.c index bcc7fa3f88..bcc7fa3f88 100644 --- a/usr/src/lib/libc/port/gen/explicit_bzero.c +++ b/usr/src/common/util/explicit_bzero.c diff --git a/usr/src/lib/libc/port/gen/memmem.c b/usr/src/common/util/memmem.c index a0f396e7c4..a0f396e7c4 100644 --- a/usr/src/lib/libc/port/gen/memmem.c +++ b/usr/src/common/util/memmem.c diff --git a/usr/src/common/util/strtol.c b/usr/src/common/util/strtol.c index e46e86b7d1..aeed49ca83 100644 --- a/usr/src/common/util/strtol.c +++ b/usr/src/common/util/strtol.c @@ -29,18 +29,25 @@ */ /* Copyright (c) 1988 AT&T */ -/* All Rights Reserved */ +/* All Rights Reserved */ #if defined(_KERNEL) && !defined(_BOOT) +#include <sys/null.h> #include <sys/errno.h> #else /* _KERNEL && !_BOOT */ -#if !defined(_BOOT) && !defined(_KMDB) +#if !defined(_BOOT) && !defined(_KMDB) && !defined(_STANDALONE) #include "lint.h" -#endif /* !_BOOT && !_KMDB */ +#endif /* !_BOOT && !_KMDB && !_STANDALONE */ +#if defined(_STANDALONE) +#include <sys/cdefs.h> +#include <stand.h> +#include <limits.h> +#else #include <errno.h> #include <ctype.h> #include <limits.h> #include <stdlib.h> +#endif /* _STANDALONE */ #endif /* _KERNEL && !_BOOT */ #include "strtolctype.h" #include <sys/types.h> @@ -62,7 +69,7 @@ strtol(const char *str, char **nptr, int base) const char **ptr = (const char **)nptr; const unsigned char *ustr = (const unsigned char *)str; - if (ptr != (const char **)0) + if (ptr != NULL) *ptr = (char *)ustr; /* in case no number is formed */ if (base < 0 || base > MBASE || base == 1) { /* base is invalid -- should be a fatal error */ @@ -84,13 +91,14 @@ strtol(const char *str, char **nptr, int base) c = *++ustr; } } - if (base == 0) + if (base == 0) { if (c != '0') base = 10; else if (ustr[1] == 'x' || ustr[1] == 'X') base = 16; else base = 8; + } /* * for any base > 10, the digits incrementally following * 9 are assumed to be "abc...z" or "ABC...Z" @@ -125,7 +133,7 @@ strtol(const char *str, char **nptr, int base) val -= xx; c = *++ustr; } - if (ptr != (const char **)0) + if (ptr != NULL) *ptr = (char *)ustr; #if defined(_KERNEL) && !defined(_BOOT) *result = neg ? val : -val; @@ -137,7 +145,7 @@ strtol(const char *str, char **nptr, int base) overflow: for (c = *++ustr; lisalnum(c) && (xx = DIGIT(c)) < base; (c = *++ustr)) ; - if (ptr != (const char **)0) + if (ptr != NULL) *ptr = (char *)ustr; #if defined(_KERNEL) && !defined(_BOOT) return (ERANGE); diff --git a/usr/src/common/util/strtoll.c b/usr/src/common/util/strtoll.c index 6e654c9ed5..05dcdd56da 100644 --- a/usr/src/common/util/strtoll.c +++ b/usr/src/common/util/strtoll.c @@ -25,18 +25,27 @@ */ /* Copyright (c) 1988 AT&T */ -/* All Rights Reserved */ +/* All Rights Reserved */ #if defined(_KERNEL) && !defined(_BOOT) +#include <sys/null.h> #include <sys/errno.h> #else /* _KERNEL && !_BOOT */ -#if !defined(_BOOT) && !defined(_KMDB) +#if !defined(_BOOT) && !defined(_KMDB) && !defined(_STANDALONE) #include "lint.h" -#endif /* !_BOOT && !_KMDB */ +#endif /* !_BOOT && !_KMDB && !_STANDALONE */ +#if defined(_STANDALONE) +#include <sys/cdefs.h> +#include <stand.h> +#include <limits.h> + +typedef long long longlong_t; +#else #include <errno.h> #include <ctype.h> #include <limits.h> #include <stdlib.h> +#endif /* _STANDALONE */ #endif /* _KERNEL && !_BOOT */ #include "strtolctype.h" #include <sys/types.h> @@ -58,7 +67,7 @@ strtoll(const char *str, char **nptr, int base) const char **ptr = (const char **)nptr; const unsigned char *ustr = (const unsigned char *)str; - if (ptr != (const char **)0) + if (ptr != NULL) *ptr = (char *)ustr; /* in case no number is formed */ if (base < 0 || base > MBASE || base == 1) { /* base is invalid -- should be a fatal error */ @@ -80,13 +89,14 @@ strtoll(const char *str, char **nptr, int base) c = *++ustr; } } - if (base == 0) + if (base == 0) { if (c != '0') base = 10; else if (ustr[1] == 'x' || ustr[1] == 'X') base = 16; else base = 8; + } /* * for any base > 10, the digits incrementally following * 9 are assumed to be "abc...z" or "ABC...Z" @@ -120,7 +130,7 @@ strtoll(const char *str, char **nptr, int base) val -= xx; c = *++ustr; } - if (ptr != (const char **)0) + if (ptr != NULL) *ptr = (char *)ustr; #if defined(_KERNEL) && !defined(_BOOT) *result = neg ? val : -val; @@ -132,7 +142,7 @@ strtoll(const char *str, char **nptr, int base) overflow: for (c = *++ustr; lisalnum(c) && (xx = DIGIT(c)) < base; (c = *++ustr)) ; - if (ptr != (const char **)0) + if (ptr != NULL) *ptr = (char *)ustr; #if defined(_KERNEL) && !defined(_BOOT) return (ERANGE); diff --git a/usr/src/common/util/strtoul.c b/usr/src/common/util/strtoul.c index 3b1eff90c1..f890afc262 100644 --- a/usr/src/common/util/strtoul.c +++ b/usr/src/common/util/strtoul.c @@ -25,18 +25,25 @@ */ /* Copyright (c) 1988 AT&T */ -/* All Rights Reserved */ +/* All Rights Reserved */ #if defined(_KERNEL) && !defined(_BOOT) +#include <sys/null.h> #include <sys/errno.h> #else /* _KERNEL && !_BOOT */ -#if !defined(_BOOT) && !defined(_KMDB) +#if !defined(_BOOT) && !defined(_KMDB) && !defined(_STANDALONE) #include "lint.h" -#endif /* !_BOOT && !_KMDB */ +#endif /* !_BOOT && !_KMDB && !_STANDALONE */ +#if defined(_STANDALONE) +#include <sys/cdefs.h> +#include <stand.h> +#include <limits.h> +#else #include <errno.h> #include <ctype.h> #include <limits.h> #include <stdlib.h> +#endif /* _STANDALONE */ #endif /* _KERNEL && !_BOOT */ #include "strtolctype.h" #include <sys/types.h> @@ -57,7 +64,7 @@ strtoul(const char *str, char **nptr, int base) const char **ptr = (const char **)nptr; const unsigned char *ustr = (const unsigned char *)str; - if (ptr != (const char **)0) + if (ptr != NULL) *ptr = (char *)ustr; /* in case no number is formed */ if (base < 0 || base > MBASE || base == 1) { /* base is invalid -- should be a fatal error */ @@ -79,13 +86,14 @@ strtoul(const char *str, char **nptr, int base) c = *++ustr; } } - if (base == 0) + if (base == 0) { if (c != '0') base = 10; else if (ustr[1] == 'x' || ustr[1] == 'X') base = 16; else base = 8; + } /* * for any base > 10, the digits incrementally following * 9 are assumed to be "abc...z" or "ABC...Z" @@ -108,12 +116,12 @@ strtoul(const char *str, char **nptr, int base) if (val > multmax) goto overflow; val *= base; - if (ULONG_MAX - val < xx) + if (ULONG_MAX - val < (unsigned long)xx) goto overflow; val += xx; c = *++ustr; } - if (ptr != (const char **)0) + if (ptr != NULL) *ptr = (char *)ustr; #if defined(_KERNEL) && !defined(_BOOT) *result = neg ? -val : val; @@ -125,7 +133,7 @@ strtoul(const char *str, char **nptr, int base) overflow: for (c = *++ustr; lisalnum(c) && (xx = DIGIT(c)) < base; (c = *++ustr)) ; - if (ptr != (const char **)0) + if (ptr != NULL) *ptr = (char *)ustr; #if defined(_KERNEL) && !defined(_BOOT) return (ERANGE); diff --git a/usr/src/common/util/strtoull.c b/usr/src/common/util/strtoull.c index ca7713d524..4a415f37d2 100644 --- a/usr/src/common/util/strtoull.c +++ b/usr/src/common/util/strtoull.c @@ -25,18 +25,27 @@ */ /* Copyright (c) 1988 AT&T */ -/* All Rights Reserved */ +/* All Rights Reserved */ #if defined(_KERNEL) && !defined(_BOOT) +#include <sys/null.h> #include <sys/errno.h> #else /* _KERNEL && !_BOOT */ -#if !defined(_BOOT) && !defined(_KMDB) +#if !defined(_BOOT) && !defined(_KMDB) && !defined(_STANDALONE) #include "lint.h" -#endif /* !_BOOT && !_KMDB */ +#endif /* !_BOOT && !_KMDB && !_STANDALONE */ +#if defined(_STANDALONE) +#include <sys/cdefs.h> +#include <stand.h> +#include <limits.h> + +typedef unsigned long long u_longlong_t; +#else #include <errno.h> #include <ctype.h> #include <limits.h> #include <stdlib.h> +#endif /* _STANDALONE */ #endif /* _KERNEL && !_BOOT */ #include "strtolctype.h" #include <sys/types.h> @@ -57,7 +66,7 @@ strtoull(const char *str, char **nptr, int base) const char **ptr = (const char **)nptr; const unsigned char *ustr = (const unsigned char *)str; - if (ptr != (const char **)0) + if (ptr != NULL) *ptr = (char *)ustr; /* in case no number is formed */ if (base < 0 || base > MBASE || base == 1) { /* base is invalid -- should be a fatal error */ @@ -79,13 +88,14 @@ strtoull(const char *str, char **nptr, int base) c = *++ustr; } } - if (base == 0) + if (base == 0) { if (c != '0') base = 10; else if (ustr[1] == 'x' || ustr[1] == 'X') base = 16; else base = 8; + } /* * for any base > 10, the digits incrementally following * 9 are assumed to be "abc...z" or "ABC...Z" @@ -108,12 +118,12 @@ strtoull(const char *str, char **nptr, int base) if (val > multmax) goto overflow; val *= base; - if (ULLONG_MAX - val < xx) + if (ULLONG_MAX - val < (unsigned long long)xx) goto overflow; val += xx; c = *++ustr; } - if (ptr != (const char **)0) + if (ptr != NULL) *ptr = (char *)ustr; #if defined(_KERNEL) && !defined(_BOOT) *result = neg ? -val : val; @@ -125,7 +135,7 @@ strtoull(const char *str, char **nptr, int base) overflow: for (c = *++ustr; lisalnum(c) && (xx = DIGIT(c)) < base; (c = *++ustr)) ; - if (ptr != (const char **)0) + if (ptr != NULL) *ptr = (char *)ustr; #if defined(_KERNEL) && !defined(_BOOT) return (ERANGE); diff --git a/usr/src/lib/libc/amd64/Makefile b/usr/src/lib/libc/amd64/Makefile index d1e6809d83..2c428afacb 100644 --- a/usr/src/lib/libc/amd64/Makefile +++ b/usr/src/lib/libc/amd64/Makefile @@ -103,6 +103,8 @@ COMOBJS= \ bcopy.o \ bsearch.o \ bzero.o \ + explicit_bzero.o \ + memmem.o \ qsort.o \ strtol.o \ strtoul.o \ @@ -388,7 +390,6 @@ PORTGEN= \ euclen.o \ event_port.o \ execvp.o \ - explicit_bzero.o \ fattach.o \ fdetach.o \ fdopendir.o \ @@ -467,7 +468,6 @@ PORTGEN= \ madvise.o \ malloc.o \ memalign.o \ - memmem.o \ memset_s.o \ mkdev.o \ mkdtemp.o \ diff --git a/usr/src/lib/libc/i386/Makefile.com b/usr/src/lib/libc/i386/Makefile.com index 526c2fbc6f..35f96feda3 100644 --- a/usr/src/lib/libc/i386/Makefile.com +++ b/usr/src/lib/libc/i386/Makefile.com @@ -104,6 +104,8 @@ COMOBJS= \ bcopy.o \ bsearch.o \ bzero.o \ + explicit_bzero.o \ + memmem.o \ qsort.o \ strtol.o \ strtoul.o \ @@ -425,7 +427,6 @@ PORTGEN= \ euclen.o \ event_port.o \ execvp.o \ - explicit_bzero.o \ fattach.o \ fdetach.o \ fdopendir.o \ @@ -504,7 +505,6 @@ PORTGEN= \ madvise.o \ malloc.o \ memalign.o \ - memmem.o \ memset_s.o \ mkdev.o \ mkdtemp.o \ diff --git a/usr/src/lib/libc/sparc/Makefile.com b/usr/src/lib/libc/sparc/Makefile.com index 7d5155b373..abd0d25056 100644 --- a/usr/src/lib/libc/sparc/Makefile.com +++ b/usr/src/lib/libc/sparc/Makefile.com @@ -127,7 +127,9 @@ COMOBJS= \ bcopy.o \ bzero.o \ bsearch.o \ + explicit_bzero.o \ memccpy.o \ + memmem.o \ qsort.o \ strtol.o \ strtoul.o \ @@ -451,7 +453,6 @@ PORTGEN= \ euclen.o \ event_port.o \ execvp.o \ - explicit_bzero.o \ fattach.o \ fdetach.o \ fdopendir.o \ @@ -531,7 +532,6 @@ PORTGEN= \ madvise.o \ malloc.o \ memalign.o \ - memmem.o \ memset_s.o \ mkdev.o \ mkdtemp.o \ diff --git a/usr/src/lib/libc/sparcv9/Makefile.com b/usr/src/lib/libc/sparcv9/Makefile.com index ac784aceca..f5bfaf5c9d 100644 --- a/usr/src/lib/libc/sparcv9/Makefile.com +++ b/usr/src/lib/libc/sparcv9/Makefile.com @@ -130,7 +130,9 @@ COMOBJS= \ bcopy.o \ bsearch.o \ bzero.o \ + explicit_bzero.o \ memccpy.o \ + memmem.o \ qsort.o \ strtol.o \ strtoul.o \ @@ -409,7 +411,6 @@ PORTGEN= \ euclen.o \ event_port.o \ execvp.o \ - explicit_bzero.o \ fattach.o \ fdetach.o \ fdopendir.o \ @@ -489,7 +490,6 @@ PORTGEN= \ madvise.o \ malloc.o \ memalign.o \ - memmem.o \ memset_s.o \ mkdev.o \ mkdtemp.o \ |