From 8a261abefde3eb7c4a3ecb94acbb4b500b8cd1aa Mon Sep 17 00:00:00 2001 From: millert <> Date: Sun, 17 Aug 1997 22:58:34 +0000 Subject: Man page for a64l(3) and l64a(3), based on a64l.3 from the MiNT docs 0.1. Also make a64l(3) and l64a(3) deal reasonably with inapropriate input. The standard does not require this, but it does not disallow it either. --- src/lib/libc/stdlib/a64l.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'src/lib/libc/stdlib/a64l.c') diff --git a/src/lib/libc/stdlib/a64l.c b/src/lib/libc/stdlib/a64l.c index 975e26ebb2..a68f0a6dcd 100644 --- a/src/lib/libc/stdlib/a64l.c +++ b/src/lib/libc/stdlib/a64l.c @@ -4,9 +4,12 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static char *rcsid = "$OpenBSD: a64l.c,v 1.2 1996/08/19 08:33:19 tholo Exp $"; +static char *rcsid = "$OpenBSD: a64l.c,v 1.3 1997/08/17 22:58:34 millert Exp $"; #endif /* LIBC_SCCS and not lint */ +#include +#include + long a64l(s) const char *s; @@ -14,21 +17,30 @@ a64l(s) long value, digit, shift; int i; + if (s == NULL) { + errno = EINVAL; + return(-1L); + } + value = 0; shift = 0; for (i = 0; *s && i < 6; i++, s++) { - if (*s <= '/') + if (*s >= '.' && *s <= '/') digit = *s - '.'; - else if (*s <= '9') + else if (*s >= '0' && *s <= '9') digit = *s - '0' + 2; - else if (*s <= 'Z') + else if (*s >= 'A' && *s <= 'Z') digit = *s - 'A' + 12; - else - digit = *s - 'a' + 38; + else if (*s >= 'a' && *s <= 'z') + digit = *s - 'a' + 38; + else { + errno = EINVAL; + return(-1L); + } value |= digit << shift; shift += 6; } - return (long) value; + return(value); } -- cgit v1.2.3-55-g6feb