diff options
Diffstat (limited to 'db-4.8.30/clib')
| -rw-r--r-- | db-4.8.30/clib/atoi.c | 50 | ||||
| -rw-r--r-- | db-4.8.30/clib/atol.c | 50 | ||||
| -rw-r--r-- | db-4.8.30/clib/getcwd.c | 261 | ||||
| -rw-r--r-- | db-4.8.30/clib/getopt.c | 145 | ||||
| -rw-r--r-- | db-4.8.30/clib/isalpha.c | 28 | ||||
| -rw-r--r-- | db-4.8.30/clib/isdigit.c | 28 | ||||
| -rw-r--r-- | db-4.8.30/clib/isprint.c | 28 | ||||
| -rw-r--r-- | db-4.8.30/clib/isspace.c | 26 | ||||
| -rw-r--r-- | db-4.8.30/clib/memcmp.c | 62 | ||||
| -rw-r--r-- | db-4.8.30/clib/memmove.c | 150 | ||||
| -rw-r--r-- | db-4.8.30/clib/printf.c | 142 | ||||
| -rw-r--r-- | db-4.8.30/clib/qsort.c | 181 | ||||
| -rw-r--r-- | db-4.8.30/clib/raise.c | 26 | ||||
| -rw-r--r-- | db-4.8.30/clib/rand.c | 25 | ||||
| -rw-r--r-- | db-4.8.30/clib/snprintf.c | 149 | ||||
| -rw-r--r-- | db-4.8.30/clib/strcasecmp.c | 97 | ||||
| -rw-r--r-- | db-4.8.30/clib/strcat.c | 53 | ||||
| -rw-r--r-- | db-4.8.30/clib/strchr.c | 57 | ||||
| -rw-r--r-- | db-4.8.30/clib/strdup.c | 59 | ||||
| -rw-r--r-- | db-4.8.30/clib/strerror.c | 225 | ||||
| -rw-r--r-- | db-4.8.30/clib/strncat.c | 69 | ||||
| -rw-r--r-- | db-4.8.30/clib/strncmp.c | 61 | ||||
| -rw-r--r-- | db-4.8.30/clib/strrchr.c | 58 | ||||
| -rw-r--r-- | db-4.8.30/clib/strsep.c | 80 | ||||
| -rw-r--r-- | db-4.8.30/clib/strtol.c | 142 | ||||
| -rw-r--r-- | db-4.8.30/clib/strtoul.c | 121 | ||||
| -rw-r--r-- | db-4.8.30/clib/time.c | 34 | 
27 files changed, 2407 insertions, 0 deletions
| diff --git a/db-4.8.30/clib/atoi.c b/db-4.8.30/clib/atoi.c new file mode 100644 index 0000000..d064ffb --- /dev/null +++ b/db-4.8.30/clib/atoi.c @@ -0,0 +1,50 @@ +/* + * Copyright (c) 1988, 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. 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. + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * atoi -- + * + * PUBLIC: #ifndef HAVE_ATOI + * PUBLIC: int atoi __P((const char *)); + * PUBLIC: #endif + */ +int +atoi(str) +	const char *str; +{ +	return (int)strtol(str, (char **)NULL, 10); +} diff --git a/db-4.8.30/clib/atol.c b/db-4.8.30/clib/atol.c new file mode 100644 index 0000000..9aefcd5 --- /dev/null +++ b/db-4.8.30/clib/atol.c @@ -0,0 +1,50 @@ +/* + * Copyright (c) 1988, 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. 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. + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * atol -- + * + * PUBLIC: #ifndef HAVE_ATOL + * PUBLIC: long atol __P((const char *)); + * PUBLIC: #endif + */ +long +atol(str) +	const char *str; +{ +	return strtol(str, (char **)NULL, 10); +} diff --git a/db-4.8.30/clib/getcwd.c b/db-4.8.30/clib/getcwd.c new file mode 100644 index 0000000..4d48222 --- /dev/null +++ b/db-4.8.30/clib/getcwd.c @@ -0,0 +1,261 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 1996-2009 Oracle.  All rights reserved. + */ +/* + * Copyright (c) 1989, 1991, 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. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.h" + +#ifdef HAVE_SYSTEM_INCLUDE_FILES +#if HAVE_DIRENT_H +# include <dirent.h> +# define NAMLEN(dirent) strlen((dirent)->d_name) +#else +# define dirent direct +# define NAMLEN(dirent) (dirent)->d_namlen +# if HAVE_SYS_NDIR_H +#  include <sys/ndir.h> +# endif +# if HAVE_SYS_DIR_H +#  include <sys/dir.h> +# endif +# if HAVE_NDIR_H +#  include <ndir.h> +# endif +#endif +#endif + +#define	ISDOT(dp) \ +	(dp->d_name[0] == '.' && (dp->d_name[1] == '\0' || \ +	    (dp->d_name[1] == '.' && dp->d_name[2] == '\0'))) + +#ifndef dirfd +#define	dirfd(dirp)     ((dirp)->dd_fd) +#endif + +/* + * getcwd -- + *	Get the current working directory. + * + * PUBLIC: #ifndef HAVE_GETCWD + * PUBLIC: char *getcwd __P((char *, size_t)); + * PUBLIC: #endif + */ +char * +getcwd(pt, size) +	char *pt; +	size_t size; +{ +	register struct dirent *dp; +	register DIR *dir; +	register dev_t dev; +	register ino_t ino; +	register int first; +	register char *bpt, *bup; +	struct stat s; +	dev_t root_dev; +	ino_t root_ino; +	size_t ptsize, upsize; +	int ret, save_errno; +	char *ept, *eup, *up; + +	/* +	 * If no buffer specified by the user, allocate one as necessary. +	 * If a buffer is specified, the size has to be non-zero.  The path +	 * is built from the end of the buffer backwards. +	 */ +	if (pt) { +		ptsize = 0; +		if (!size) { +			__os_set_errno(EINVAL); +			return (NULL); +		} +		if (size == 1) { +			__os_set_errno(ERANGE); +			return (NULL); +		} +		ept = pt + size; +	} else { +		if ((ret = +		    __os_malloc(NULL, ptsize = 1024 - 4, &pt)) != 0) { +			__os_set_errno(ret); +			return (NULL); +		} +		ept = pt + ptsize; +	} +	bpt = ept - 1; +	*bpt = '\0'; + +	/* +	 * Allocate bytes (1024 - malloc space) for the string of "../"'s. +	 * Should always be enough (it's 340 levels).  If it's not, allocate +	 * as necessary.  Special case the first stat, it's ".", not "..". +	 */ +	if ((ret = __os_malloc(NULL, upsize = 1024 - 4, &up)) != 0) +		goto err; +	eup = up + 1024; +	bup = up; +	up[0] = '.'; +	up[1] = '\0'; + +	/* Save root values, so know when to stop. */ +	if (stat("/", &s)) +		goto err; +	root_dev = s.st_dev; +	root_ino = s.st_ino; + +	__os_set_errno(0);		/* XXX readdir has no error return. */ + +	for (first = 1;; first = 0) { +		/* Stat the current level. */ +		if (lstat(up, &s)) +			goto err; + +		/* Save current node values. */ +		ino = s.st_ino; +		dev = s.st_dev; + +		/* Check for reaching root. */ +		if (root_dev == dev && root_ino == ino) { +			*--bpt = PATH_SEPARATOR[0]; +			/* +			 * It's unclear that it's a requirement to copy the +			 * path to the beginning of the buffer, but it's always +			 * been that way and stuff would probably break. +			 */ +			bcopy(bpt, pt, ept - bpt); +			__os_free(NULL, up); +			return (pt); +		} + +		/* +		 * Build pointer to the parent directory, allocating memory +		 * as necessary.  Max length is 3 for "../", the largest +		 * possible component name, plus a trailing NULL. +		 */ +		if (bup + 3  + MAXNAMLEN + 1 >= eup) { +			if (__os_realloc(NULL, upsize *= 2, &up) != 0) +				goto err; +			bup = up; +			eup = up + upsize; +		} +		*bup++ = '.'; +		*bup++ = '.'; +		*bup = '\0'; + +		/* Open and stat parent directory. */ +		if (!(dir = opendir(up)) || fstat(dirfd(dir), &s)) +			goto err; + +		/* Add trailing slash for next directory. */ +		*bup++ = PATH_SEPARATOR[0]; + +		/* +		 * If it's a mount point, have to stat each element because +		 * the inode number in the directory is for the entry in the +		 * parent directory, not the inode number of the mounted file. +		 */ +		save_errno = 0; +		if (s.st_dev == dev) { +			for (;;) { +				if (!(dp = readdir(dir))) +					goto notfound; +				if (dp->d_fileno == ino) +					break; +			} +		} else +			for (;;) { +				if (!(dp = readdir(dir))) +					goto notfound; +				if (ISDOT(dp)) +					continue; +				bcopy(dp->d_name, bup, dp->d_namlen + 1); + +				/* Save the first error for later. */ +				if (lstat(up, &s)) { +					if (save_errno == 0) +						save_errno = __os_get_errno(); +					__os_set_errno(0); +					continue; +				} +				if (s.st_dev == dev && s.st_ino == ino) +					break; +			} + +		/* +		 * Check for length of the current name, preceding slash, +		 * leading slash. +		 */ +		if (bpt - pt < dp->d_namlen + (first ? 1 : 2)) { +			size_t len, off; + +			if (!ptsize) { +				__os_set_errno(ERANGE); +				goto err; +			} +			off = bpt - pt; +			len = ept - bpt; +			if (__os_realloc(NULL, ptsize *= 2, &pt) != 0) +				goto err; +			bpt = pt + off; +			ept = pt + ptsize; +			bcopy(bpt, ept - len, len); +			bpt = ept - len; +		} +		if (!first) +			*--bpt = PATH_SEPARATOR[0]; +		bpt -= dp->d_namlen; +		bcopy(dp->d_name, bpt, dp->d_namlen); +		(void)closedir(dir); + +		/* Truncate any file name. */ +		*bup = '\0'; +	} + +notfound: +	/* +	 * If readdir set errno, use it, not any saved error; otherwise, +	 * didn't find the current directory in its parent directory, set +	 * errno to ENOENT. +	 */ +	if (__os_get_errno_ret_zero() == 0) +		__os_set_errno(save_errno == 0 ? ENOENT : save_errno); +	/* FALLTHROUGH */ +err: +	if (ptsize) +		__os_free(NULL, pt); +	__os_free(NULL, up); +	return (NULL); +} diff --git a/db-4.8.30/clib/getopt.c b/db-4.8.30/clib/getopt.c new file mode 100644 index 0000000..6dce03c --- /dev/null +++ b/db-4.8.30/clib/getopt.c @@ -0,0 +1,145 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 1996-2009 Oracle.  All rights reserved. + */ +/* + * Copyright (c) 1987, 1993, 1994 + *	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. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.h" + +int	__db_getopt_reset;	/* global reset for VxWorks. */ + +int	opterr = 1,		/* if error message should be printed */ +	optind = 1,		/* index into parent argv vector */ +	optopt,			/* character checked for validity */ +	optreset;		/* reset getopt */ +char	*optarg;		/* argument associated with option */ + +#undef	BADCH +#define	BADCH	(int)'?' +#undef	BADARG +#define	BADARG	(int)':' +#undef	EMSG +#define	EMSG	"" + +/* + * getopt -- + *	Parse argc/argv argument vector. + * + * PUBLIC: #ifndef HAVE_GETOPT + * PUBLIC: int getopt __P((int, char * const *, const char *)); + * PUBLIC: #endif + */ +int +getopt(nargc, nargv, ostr) +	int nargc; +	char * const *nargv; +	const char *ostr; +{ +	static char *progname; +	static char *place = EMSG;		/* option letter processing */ +	char *oli;				/* option letter list index */ + +	/* +	 * VxWorks needs to be able to repeatedly call getopt from multiple +	 * programs within its global name space. +	 */ +	if (__db_getopt_reset) { +		__db_getopt_reset = 0; + +		opterr = optind = 1; +		optopt = optreset = 0; +		optarg = NULL; +		progname = NULL; +		place = EMSG; +	} +	if (!progname) { +		if ((progname = __db_rpath(*nargv)) == NULL) +			progname = *nargv; +		else +			++progname; +	} + +	if (optreset || !*place) {		/* update scanning pointer */ +		optreset = 0; +		if (optind >= nargc || *(place = nargv[optind]) != '-') { +			place = EMSG; +			return (EOF); +		} +		if (place[1] && *++place == '-') {	/* found "--" */ +			++optind; +			place = EMSG; +			return (EOF); +		} +	}					/* option letter okay? */ +	if ((optopt = (int)*place++) == (int)':' || +	    !(oli = strchr(ostr, optopt))) { +		/* +		 * if the user didn't specify '-' as an option, +		 * assume it means EOF. +		 */ +		if (optopt == (int)'-') +			return (EOF); +		if (!*place) +			++optind; +		if (opterr && *ostr != ':') +			(void)fprintf(stderr, +			    "%s: illegal option -- %c\n", progname, optopt); +		return (BADCH); +	} +	if (*++oli != ':') {			/* don't need argument */ +		optarg = NULL; +		if (!*place) +			++optind; +	} +	else {					/* need an argument */ +		if (*place)			/* no white space */ +			optarg = place; +		else if (nargc <= ++optind) {	/* no arg */ +			place = EMSG; +			if (*ostr == ':') +				return (BADARG); +			if (opterr) +				(void)fprintf(stderr, +				    "%s: option requires an argument -- %c\n", +				    progname, optopt); +			return (BADCH); +		} +		else				/* white space */ +			optarg = nargv[optind]; +		place = EMSG; +		++optind; +	} +	return (optopt);			/* dump back option letter */ +} diff --git a/db-4.8.30/clib/isalpha.c b/db-4.8.30/clib/isalpha.c new file mode 100644 index 0000000..8c143f9 --- /dev/null +++ b/db-4.8.30/clib/isalpha.c @@ -0,0 +1,28 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 2005-2009 Oracle.  All rights reserved. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * isalpha -- + * + * PUBLIC: #ifndef HAVE_ISALPHA + * PUBLIC: int isalpha __P((int)); + * PUBLIC: #endif + */ +int +isalpha(c) +	int c; +{ +	/* +	 * Depends on ASCII-like character ordering. +	 */ +	return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') ? 1 : 0); +} diff --git a/db-4.8.30/clib/isdigit.c b/db-4.8.30/clib/isdigit.c new file mode 100644 index 0000000..1fc0a26 --- /dev/null +++ b/db-4.8.30/clib/isdigit.c @@ -0,0 +1,28 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 2005-2009 Oracle.  All rights reserved. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * isdigit -- + * + * PUBLIC: #ifndef HAVE_ISDIGIT + * PUBLIC: int isdigit __P((int)); + * PUBLIC: #endif + */ +int +isdigit(c) +	int c; +{ +	/* +	 * Depends on ASCII-like character ordering. +	 */ +	return (c >= '0' && c <= '9' ? 1 : 0); +} diff --git a/db-4.8.30/clib/isprint.c b/db-4.8.30/clib/isprint.c new file mode 100644 index 0000000..d46f3b8 --- /dev/null +++ b/db-4.8.30/clib/isprint.c @@ -0,0 +1,28 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 2005-2009 Oracle.  All rights reserved. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * isprint -- + * + * PUBLIC: #ifndef HAVE_ISPRINT + * PUBLIC: int isprint __P((int)); + * PUBLIC: #endif + */ +int +isprint(c) +	int c; +{ +	/* +	 * Depends on ASCII character values. +	 */ +	return ((c >= ' ' && c <= '~') ? 1 : 0); +} diff --git a/db-4.8.30/clib/isspace.c b/db-4.8.30/clib/isspace.c new file mode 100644 index 0000000..aeec3a8 --- /dev/null +++ b/db-4.8.30/clib/isspace.c @@ -0,0 +1,26 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 2005-2009 Oracle.  All rights reserved. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * isspace -- + * + * PUBLIC: #ifndef HAVE_ISSPACE + * PUBLIC: int isspace __P((int)); + * PUBLIC: #endif + */ +int +isspace(c) +	int c; +{ +	return (c == '\t' || c == '\n' || +	    c == '\v' || c == '\f' || c == '\r' || c == ' ' ? 1 : 0); +} diff --git a/db-4.8.30/clib/memcmp.c b/db-4.8.30/clib/memcmp.c new file mode 100644 index 0000000..6b16157 --- /dev/null +++ b/db-4.8.30/clib/memcmp.c @@ -0,0 +1,62 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 1996-2009 Oracle.  All rights reserved. + */ +/* + * 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. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * memcmp -- + * + * PUBLIC: #ifndef HAVE_MEMCMP + * PUBLIC: int memcmp __P((const void *, const void *, size_t)); + * PUBLIC: #endif + */ +int +memcmp(s1, s2, n) +	const void *s1, *s2; +	size_t n; +{ +	if (n != 0) { +		unsigned char *p1 = (unsigned char *)s1, +			      *p2 = (unsigned char *)s2; +		do { +			if (*p1++ != *p2++) +				return (*--p1 - *--p2); +		} while (--n != 0); +	} +	return (0); +} diff --git a/db-4.8.30/clib/memmove.c b/db-4.8.30/clib/memmove.c new file mode 100644 index 0000000..650f70a --- /dev/null +++ b/db-4.8.30/clib/memmove.c @@ -0,0 +1,150 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 1996-2009 Oracle.  All rights reserved. + */ +/* + * 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. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.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 */ + +#undef	wsize +#define	wsize	sizeof(word) +#undef	wmask +#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 +/* + * PUBLIC: #ifndef HAVE_MEMCPY + * PUBLIC: void *memcpy __P((void *, const void *, size_t)); + * PUBLIC: #endif + */ +void * +memcpy(dst0, src0, length) +#else +#ifdef MEMMOVE +/* + * PUBLIC: #ifndef HAVE_MEMMOVE + * PUBLIC: void *memmove __P((void *, const void *, size_t)); + * PUBLIC: #endif + */ +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 +	 */ +#undef	TLOOP +#define	TLOOP(s) if (t) TLOOP1(s) +#undef	TLOOP1 +#define	TLOOP1(s) do { s; } while (--t) + +	if ((unsigned long)dst < (unsigned long)src) { +		/* +		 * Copy forward. +		 */ +		t = (size_t)src;	/* only need low bits */ +		if ((t | (size_t)dst) & wmask) { +			/* +			 * Try to align operands.  This cannot be done +			 * unless the low bits match. +			 */ +			if ((t ^ (size_t)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 = (size_t)src; +		if ((t | (size_t)dst) & wmask) { +			if ((t ^ (size_t)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 +} diff --git a/db-4.8.30/clib/printf.c b/db-4.8.30/clib/printf.c new file mode 100644 index 0000000..37187a4 --- /dev/null +++ b/db-4.8.30/clib/printf.c @@ -0,0 +1,142 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 2005-2009 Oracle.  All rights reserved. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * printf -- + * + * PUBLIC: #ifndef HAVE_PRINTF + * PUBLIC: int printf __P((const char *, ...)); + * PUBLIC: #endif + */ +#ifndef HAVE_PRINTF +int +#ifdef STDC_HEADERS +printf(const char *fmt, ...) +#else +printf(fmt, va_alist) +	const char *fmt; +	va_dcl +#endif +{ +	va_list ap; +	size_t len; +	char buf[2048];    /* !!!: END OF THE STACK DON'T TRUST SPRINTF. */ + +#ifdef STDC_HEADERS +	va_start(ap, fmt); +#else +	va_start(ap); +#endif +	len = (size_t)vsnprintf(buf, sizeof(buf), fmt, ap); +#ifdef HAVE_BREW +	/* +	 * The BREW vsnprintf function return count includes the trailing +	 * nul-termination character. +	 */ +	if (len > 0 && len <= sizeof(buf) && buf[len - 1] == '\0') +		--len; +#endif + +	va_end(ap); + +	/* +	 * We implement printf/fprintf with fwrite, because Berkeley DB uses +	 * fwrite in other places. +	 */ +	return (fwrite( +	    buf, sizeof(char), (size_t)len, stdout) == len ? (int)len: -1); +} +#endif /* HAVE_PRINTF */ + +/* + * fprintf -- + * + * PUBLIC: #ifndef HAVE_PRINTF + * PUBLIC: int fprintf __P((FILE *, const char *, ...)); + * PUBLIC: #endif + */ +#ifndef HAVE_PRINTF +int +#ifdef STDC_HEADERS +fprintf(FILE *fp, const char *fmt, ...) +#else +fprintf(fp, fmt, va_alist) +	FILE *fp; +	const char *fmt; +	va_dcl +#endif +{ +	va_list ap; +	size_t len; +	char buf[2048];    /* !!!: END OF THE STACK DON'T TRUST SPRINTF. */ + +#ifdef STDC_HEADERS +	va_start(ap, fmt); +#else +	va_start(ap); +#endif +	len = vsnprintf(buf, sizeof(buf), fmt, ap); +#ifdef HAVE_BREW +	/* +	 * The BREW vsnprintf function return count includes the trailing +	 * nul-termination character. +	 */ +	if (len > 0 && len <= sizeof(buf) && buf[len - 1] == '\0') +		--len; +#endif + +	va_end(ap); + +	/* +	 * We implement printf/fprintf with fwrite, because Berkeley DB uses +	 * fwrite in other places. +	 */ +	return (fwrite( +	    buf, sizeof(char), (size_t)len, fp) == len ? (int)len: -1); +} +#endif /* HAVE_PRINTF */ + +/* + * vfprintf -- + * + * PUBLIC: #ifndef HAVE_PRINTF + * PUBLIC: int vfprintf __P((FILE *, const char *, va_list)); + * PUBLIC: #endif + */ +#ifndef HAVE_PRINTF +int +vfprintf(fp, fmt, ap) +	FILE *fp; +	const char *fmt; +	va_list ap; +{ +	size_t len; +	char buf[2048];    /* !!!: END OF THE STACK DON'T TRUST SPRINTF. */ + +	len = vsnprintf(buf, sizeof(buf), fmt, ap); +#ifdef HAVE_BREW +	/* +	 * The BREW vsnprintf function return count includes the trailing +	 * nul-termination character. +	 */ +	if (len > 0 && len <= sizeof(buf) && buf[len - 1] == '\0') +		--len; +#endif + +	/* +	 * We implement printf/fprintf with fwrite, because Berkeley DB uses +	 * fwrite in other places. +	 */ +	return (fwrite( +	    buf, sizeof(char), (size_t)len, fp) == len ? (int)len: -1); +} +#endif /* HAVE_PRINTF */ diff --git a/db-4.8.30/clib/qsort.c b/db-4.8.30/clib/qsort.c new file mode 100644 index 0000000..cec6288 --- /dev/null +++ b/db-4.8.30/clib/qsort.c @@ -0,0 +1,181 @@ +/*- + * Copyright (c) 1992, 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. 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. + * + * static char sccsid[] = "@(#)qsort.c	8.1 (Berkeley) 6/4/93"; + * Id: qsort.c,v 1.4 1996/04/19 18:40:20 bde + */ + +#include "db_config.h" + +#include "db_int.h" + +static char	*med3 __P((char *, +		    char *, char *, int (*)(const void *, const void *))); +static void	 swapfunc __P((char *, char *, int, int)); + +#define	min(a, b)	(a) < (b) ? a : b + +/* + * Qsort routine from Bentley & McIlroy's "Engineering a Sort Function". + */ +#define	swapcode(TYPE, parmi, parmj, n) {		\ +	long i = (n) / sizeof(TYPE);			\ +	register TYPE *pi = (TYPE *) (parmi);		\ +	register TYPE *pj = (TYPE *) (parmj);		\ +	do {						\ +		register TYPE	t = *pi;		\ +		*pi++ = *pj;				\ +		*pj++ = t;				\ +	} while (--i > 0);				\ +} + +#define	SWAPINIT(a, es) swaptype = ((char *)a - (char *)0) % sizeof(long) || \ +	es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1; + +static inline void +swapfunc(a, b, n, swaptype) +	char *a, *b; +	int n, swaptype; +{ +	if (swaptype <= 1) +		swapcode(long, a, b, n) +	else +		swapcode(char, a, b, n) +} + +#define	swap(a, b)					\ +	if (swaptype == 0) {				\ +		long t = *(long *)(a);			\ +		*(long *)(a) = *(long *)(b);		\ +		*(long *)(b) = t;			\ +	} else						\ +		swapfunc(a, b, es, swaptype) + +#define	vecswap(a, b, n)	if ((n) > 0) swapfunc(a, b, n, swaptype) + +static inline char * +med3(a, b, c, cmp) +	char *a, *b, *c; +	int (*cmp)(const void *, const void *); +{ +	return cmp(a, b) < 0 ? +	       (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a )) +	      :(cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c )); +} + +/* + * PUBLIC: #ifndef HAVE_QSORT + * PUBLIC: void qsort __P((void *, + * PUBLIC:     size_t, size_t, int(*)(const void *, const void *))); + * PUBLIC: #endif + */ +void +qsort(a, n, es, cmp) +	void *a; +	size_t n, es; +	int (*cmp) __P((const void *, const void *)); +{ +	char *pa, *pb, *pc, *pd, *pl, *pm, *pn; +	int d, r, swaptype, swap_cnt; + +loop:	SWAPINIT(a, es); +	swap_cnt = 0; +	if (n < 7) { +		for (pm = (char *)a + es; pm < (char *)a + n * es; pm += es) +			for (pl = pm; pl > (char *)a && cmp(pl - es, pl) > 0; +			     pl -= es) +				swap(pl, pl - es); +		return; +	} +	pm = (char *)a + (n / 2) * es; +	if (n > 7) { +		pl = a; +		pn = (char *)a + (n - 1) * es; +		if (n > 40) { +			d = (n / 8) * es; +			pl = med3(pl, pl + d, pl + 2 * d, cmp); +			pm = med3(pm - d, pm, pm + d, cmp); +			pn = med3(pn - 2 * d, pn - d, pn, cmp); +		} +		pm = med3(pl, pm, pn, cmp); +	} +	swap(a, pm); +	pa = pb = (char *)a + es; + +	pc = pd = (char *)a + (n - 1) * es; +	for (;;) { +		while (pb <= pc && (r = cmp(pb, a)) <= 0) { +			if (r == 0) { +				swap_cnt = 1; +				swap(pa, pb); +				pa += es; +			} +			pb += es; +		} +		while (pb <= pc && (r = cmp(pc, a)) >= 0) { +			if (r == 0) { +				swap_cnt = 1; +				swap(pc, pd); +				pd -= es; +			} +			pc -= es; +		} +		if (pb > pc) +			break; +		swap(pb, pc); +		swap_cnt = 1; +		pb += es; +		pc -= es; +	} +	if (swap_cnt == 0) {  /* Switch to insertion sort */ +		for (pm = (char *)a + es; pm < (char *)a + n * es; pm += es) +			for (pl = pm; pl > (char *)a && cmp(pl - es, pl) > 0; +			     pl -= es) +				swap(pl, pl - es); +		return; +	} + +	pn = (char *)a + n * es; +	r = min(pa - (char *)a, pb - pa); +	vecswap(a, pb - r, r); +	r = min((int)(pd - pc), (int)(pn - pd - es)); +	vecswap(pb, pn - r, r); +	if ((r = (int)(pb - pa)) > (int)es) +		qsort(a, r / es, es, cmp); +	if ((r = (int)(pd - pc)) > (int)es) { +		/* Iterate rather than recurse to save stack space */ +		a = pn - r; +		n = r / es; +		goto loop; +	} +/*		qsort(pn - r, r / es, es, cmp);*/ +} diff --git a/db-4.8.30/clib/raise.c b/db-4.8.30/clib/raise.c new file mode 100644 index 0000000..74eada1 --- /dev/null +++ b/db-4.8.30/clib/raise.c @@ -0,0 +1,26 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 1997-2009 Oracle.  All rights reserved. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * raise -- + *	Send a signal to the current process. + * + * PUBLIC: #ifndef HAVE_RAISE + * PUBLIC: int raise __P((int)); + * PUBLIC: #endif + */ +int +raise(s) +	int s; +{ +	return (kill(getpid(), s)); +} diff --git a/db-4.8.30/clib/rand.c b/db-4.8.30/clib/rand.c new file mode 100644 index 0000000..6b81006 --- /dev/null +++ b/db-4.8.30/clib/rand.c @@ -0,0 +1,25 @@ +/* + * Copied from the ANSI C standard 4.10.2.2. + */ +#include "db_config.h" + +#include "db_int.h" + +/* + * rand, srand -- + * + * PUBLIC: #ifndef HAVE_RAND + * PUBLIC: int rand __P((void)); + * PUBLIC: void srand __P((unsigned int)); + * PUBLIC: #endif + */ +int rand(void)	/* RAND_MAX assumed to be 32767 */ +{ +	DB_GLOBAL(rand_next) = DB_GLOBAL(rand_next) * 1103515245 + 12345; +	return (unsigned int) (DB_GLOBAL(rand_next)/65536) % 32768; +} + +void srand(unsigned int seed) +{ +	DB_GLOBAL(rand_next) = seed; +} diff --git a/db-4.8.30/clib/snprintf.c b/db-4.8.30/clib/snprintf.c new file mode 100644 index 0000000..b6fe79b --- /dev/null +++ b/db-4.8.30/clib/snprintf.c @@ -0,0 +1,149 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 1996-2009 Oracle.  All rights reserved. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.h" + +#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) +static void sprintf_overflow __P((void)); +static int  sprintf_retcharpnt __P((void)); +#endif + +/* + * snprintf -- + *	Bounded version of sprintf. + * + * PUBLIC: #ifndef HAVE_SNPRINTF + * PUBLIC: int snprintf __P((char *, size_t, const char *, ...)); + * PUBLIC: #endif + */ +#ifndef HAVE_SNPRINTF +int +#ifdef STDC_HEADERS +snprintf(char *str, size_t n, const char *fmt, ...) +#else +snprintf(str, n, fmt, va_alist) +	char *str; +	size_t n; +	const char *fmt; +	va_dcl +#endif +{ +	static int ret_charpnt = -1; +	va_list ap; +	size_t len; + +	if (ret_charpnt == -1) +		ret_charpnt = sprintf_retcharpnt(); + +#ifdef STDC_HEADERS +	va_start(ap, fmt); +#else +	va_start(ap); +#endif +	len = (size_t)vsprintf(str, fmt, ap); +	if (ret_charpnt) +		len = strlen(str); + +	va_end(ap); + +	if (len >= n) { +		sprintf_overflow(); +		/* NOTREACHED */ +	} +	return ((int)len); +} +#endif + +/* + * vsnprintf -- + *	Bounded version of vsprintf. + * + * PUBLIC: #ifndef HAVE_VSNPRINTF + * PUBLIC: int vsnprintf __P((char *, size_t, const char *, va_list)); + * PUBLIC: #endif + */ +#ifndef HAVE_VSNPRINTF +int +vsnprintf(str, n, fmt, ap) +	char *str; +	size_t n; +	const char *fmt; +	va_list ap; +{ +	static int ret_charpnt = -1; +	size_t len; + +	if (ret_charpnt == -1) +		ret_charpnt = sprintf_retcharpnt(); + +	len = (size_t)vsprintf(str, fmt, ap); +	if (ret_charpnt) +		len = strlen(str); + +	if (len >= n) { +		sprintf_overflow(); +		/* NOTREACHED */ +	} +	return ((int)len); +} +#endif + +#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) +static void +sprintf_overflow() +{ +	/* +	 * !!! +	 * We're potentially manipulating strings handed us by the application, +	 * and on systems without a real snprintf() the sprintf() calls could +	 * have overflowed the buffer.  We can't do anything about it now, but +	 * we don't want to return control to the application, we might have +	 * overwritten the stack with a Trojan horse.  We're not trying to do +	 * anything recoverable here because systems without snprintf support +	 * are pretty rare anymore. +	 */ +#define	OVERFLOW_ERROR	"internal buffer overflow, process ended\n" +#ifndef	STDERR_FILENO +#define	STDERR_FILENO	2 +#endif +	(void)write(STDERR_FILENO, OVERFLOW_ERROR, sizeof(OVERFLOW_ERROR) - 1); + +	/* Be polite. */ +	exit(1); + +	/* But firm. */ +	__os_abort(NULL); + +	/* NOTREACHED */ +} + +static int +sprintf_retcharpnt() +{ +	int ret_charpnt; +	char buf[10]; + +	/* +	 * Some old versions of sprintf return a pointer to the first argument +	 * instead of a character count.  Assume the return value of snprintf, +	 * vsprintf, etc. will be the same as sprintf, and check the easy one. +	 * +	 * We do this test at run-time because it's not a test we can do in a +	 * cross-compilation environment. +	 */ + +	ret_charpnt = +	    (int)sprintf(buf, "123") != 3 || +	    (int)sprintf(buf, "123456789") != 9 || +	    (int)sprintf(buf, "1234") != 4; + +	return (ret_charpnt); +} +#endif diff --git a/db-4.8.30/clib/strcasecmp.c b/db-4.8.30/clib/strcasecmp.c new file mode 100644 index 0000000..287895c --- /dev/null +++ b/db-4.8.30/clib/strcasecmp.c @@ -0,0 +1,97 @@ +/* + * Copyright (c) 1987, 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. 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. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * strcasecmp -- + *	Do strcmp(3) in a case-insensitive manner. + * + * PUBLIC: #ifndef HAVE_STRCASECMP + * PUBLIC: int strcasecmp __P((const char *, const char *)); + * PUBLIC: #endif + */ +int +strcasecmp(s1, s2) +	const char *s1, *s2; +{ +	u_char s1ch, s2ch; + +	for (;;) { +		s1ch = *s1++; +		s2ch = *s2++; +		if (s1ch >= 'A' && s1ch <= 'Z')		/* tolower() */ +			s1ch += 32; +		if (s2ch >= 'A' && s2ch <= 'Z')		/* tolower() */ +			s2ch += 32; +		if (s1ch != s2ch) +			return (s1ch - s2ch); +		if (s1ch == '\0') +			return (0); +	} +	/* NOTREACHED */ +} + +/* + * strncasecmp -- + *	Do strncmp(3) in a case-insensitive manner. + * + * PUBLIC: #ifndef HAVE_STRCASECMP + * PUBLIC: int strncasecmp __P((const char *, const char *, size_t)); + * PUBLIC: #endif + */ +int +strncasecmp(s1, s2, n) +	const char *s1, *s2; +	register size_t n; +{ +	u_char s1ch, s2ch; + +	for (; n != 0; --n) { +		s1ch = *s1++; +		s2ch = *s2++; +		if (s1ch >= 'A' && s1ch <= 'Z')		/* tolower() */ +			s1ch += 32; +		if (s2ch >= 'A' && s2ch <= 'Z')		/* tolower() */ +			s2ch += 32; +		if (s1ch != s2ch) +			return (s1ch - s2ch); +		if (s1ch == '\0') +			return (0); +	} +	return (0); +} diff --git a/db-4.8.30/clib/strcat.c b/db-4.8.30/clib/strcat.c new file mode 100644 index 0000000..d99c907 --- /dev/null +++ b/db-4.8.30/clib/strcat.c @@ -0,0 +1,53 @@ +/* + * Copyright (c) 1988, 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. 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. + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * strcat -- + * + * PUBLIC: #ifndef HAVE_STRCAT + * PUBLIC: char *strcat __P((char *, const char *)); + * PUBLIC: #endif + */ +char * +strcat(char *s, const char *append) +{ +	char *save = s; + +	for (; *s; ++s); +	while ((*s++ = *append++)); +	return (save); +} diff --git a/db-4.8.30/clib/strchr.c b/db-4.8.30/clib/strchr.c new file mode 100644 index 0000000..a8ac4ce --- /dev/null +++ b/db-4.8.30/clib/strchr.c @@ -0,0 +1,57 @@ +/*- + * 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. 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. + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * strchr -- + * + * PUBLIC: #ifndef HAVE_STRCHR + * PUBLIC: char *strchr __P((const char *,  int)); + * PUBLIC: #endif + */ +char *strchr(const char *p, int ch) +{ +	char c; + +	c = ch; +	for (;; ++p) { +		if (*p == c) +			return ((char *)p); +		if (*p == '\0') +			return (NULL); +	} +	/* NOTREACHED */ +} diff --git a/db-4.8.30/clib/strdup.c b/db-4.8.30/clib/strdup.c new file mode 100644 index 0000000..5863340 --- /dev/null +++ b/db-4.8.30/clib/strdup.c @@ -0,0 +1,59 @@ +/* + * Copyright (c) 1988, 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. 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. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * strdup -- + * + * PUBLIC: #ifndef HAVE_STRDUP + * PUBLIC: char *strdup __P((const char *)); + * PUBLIC: #endif + */ +char * +strdup(str) +	const char *str; +{ +	size_t len; +	char *copy; + +	len = strlen(str) + 1; +	if (!(copy = malloc((u_int)len))) +		return (NULL); +	memcpy(copy, str, len); +	return (copy); +} diff --git a/db-4.8.30/clib/strerror.c b/db-4.8.30/clib/strerror.c new file mode 100644 index 0000000..1d20a5f --- /dev/null +++ b/db-4.8.30/clib/strerror.c @@ -0,0 +1,225 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 1997-2009 Oracle.  All rights reserved. + */ +/* + * Copyright (c) 1988, 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. + * + * $Id$ + */ + +/* + * Copyright (c) 1982, 1985, 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. 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. + * + * __FBSDID("FreeBSD: /repoman/r/ncvs/src/lib/libc/gen/errlst.c,v 1.8 2005/04/02 12:33:28 das Exp $"); + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * __db_strerror -- + *	Return the string associated with an errno. + * + * PUBLIC: #ifndef HAVE_STRERROR + * PUBLIC: char *strerror __P((int)); + * PUBLIC: #endif + */ +char * +strerror(num) +	int num; +{ +#define	ERRSTR(v, s) do {						\ +	if (num == (v))							\ +		return (s);						\ +} while (0) +	ERRSTR(0, "Undefined error: 0"); +	ERRSTR(EPERM, "Operation not permitted"); +	ERRSTR(ENOENT, "No such file or directory"); +	ERRSTR(ESRCH, "No such process"); +	ERRSTR(EINTR, "Interrupted system call"); +	ERRSTR(EIO, "Input/output error"); +	ERRSTR(ENXIO, "Device not configured"); +	ERRSTR(E2BIG, "Argument list too long"); +	ERRSTR(ENOEXEC, "Exec format error"); +	ERRSTR(EBADF, "Bad file descriptor"); +	ERRSTR(ECHILD, "No child processes"); +	ERRSTR(EDEADLK, "Resource deadlock avoided"); +	ERRSTR(ENOMEM, "Cannot allocate memory"); +	ERRSTR(EACCES, "Permission denied"); +	ERRSTR(EFAULT, "Bad address"); +	ERRSTR(ENOTBLK, "Block device required"); +	ERRSTR(EBUSY, "Device busy"); +	ERRSTR(EEXIST, "File exists"); +	ERRSTR(EXDEV, "Cross-device link"); +	ERRSTR(ENODEV, "Operation not supported by device"); +	ERRSTR(ENOTDIR, "Not a directory"); +	ERRSTR(EISDIR, "Is a directory"); +	ERRSTR(EINVAL, "Invalid argument"); +	ERRSTR(ENFILE, "Too many open files in system"); +	ERRSTR(EMFILE, "Too many open files"); +	ERRSTR(ENOTTY, "Inappropriate ioctl for device"); +	ERRSTR(ETXTBSY, "Text file busy"); +	ERRSTR(EFBIG, "File too large"); +	ERRSTR(ENOSPC, "No space left on device"); +	ERRSTR(ESPIPE, "Illegal seek"); +	ERRSTR(EROFS, "Read-only file system"); +	ERRSTR(EMLINK, "Too many links"); +	ERRSTR(EPIPE, "Broken pipe"); + +/* math software */ +	ERRSTR(EDOM, "Numerical argument out of domain"); +	ERRSTR(ERANGE, "Result too large"); + +/* non-blocking and interrupt i/o */ +	ERRSTR(EAGAIN, "Resource temporarily unavailable"); +	ERRSTR(EWOULDBLOCK, "Resource temporarily unavailable"); +	ERRSTR(EINPROGRESS, "Operation now in progress"); +	ERRSTR(EALREADY, "Operation already in progress"); + +/* ipc/network software -- argument errors */ +	ERRSTR(ENOTSOCK, "Socket operation on non-socket"); +	ERRSTR(EDESTADDRREQ, "Destination address required"); +	ERRSTR(EMSGSIZE, "Message too long"); +	ERRSTR(EPROTOTYPE, "Protocol wrong type for socket"); +	ERRSTR(ENOPROTOOPT, "Protocol not available"); +	ERRSTR(EPROTONOSUPPORT, "Protocol not supported"); +	ERRSTR(ESOCKTNOSUPPORT, "Socket type not supported"); +	ERRSTR(EOPNOTSUPP, "Operation not supported"); +	ERRSTR(EPFNOSUPPORT, "Protocol family not supported"); +	ERRSTR(EAFNOSUPPORT, "Address family not supported by protocol family"); +	ERRSTR(EADDRINUSE, "Address already in use"); +	ERRSTR(EADDRNOTAVAIL, "Can't assign requested address"); + +/* ipc/network software -- operational errors */ +	ERRSTR(ENETDOWN, "Network is down"); +	ERRSTR(ENETUNREACH, "Network is unreachable"); +	ERRSTR(ENETRESET, "Network dropped connection on reset"); +	ERRSTR(ECONNABORTED, "Software caused connection abort"); +	ERRSTR(ECONNRESET, "Connection reset by peer"); +	ERRSTR(ENOBUFS, "No buffer space available"); +	ERRSTR(EISCONN, "Socket is already connected"); +	ERRSTR(ENOTCONN, "Socket is not connected"); +	ERRSTR(ESHUTDOWN, "Can't send after socket shutdown"); +	ERRSTR(ETOOMANYREFS, "Too many references: can't splice"); +	ERRSTR(ETIMEDOUT, "Operation timed out"); +	ERRSTR(ECONNREFUSED, "Connection refused"); + +	ERRSTR(ELOOP, "Too many levels of symbolic links"); +	ERRSTR(ENAMETOOLONG, "File name too long"); + +/* should be rearranged */ +	ERRSTR(EHOSTDOWN, "Host is down"); +	ERRSTR(EHOSTUNREACH, "No route to host"); +	ERRSTR(ENOTEMPTY, "Directory not empty"); + +/* quotas & mush */ +	ERRSTR(EPROCLIM, "Too many processes"); +	ERRSTR(EUSERS, "Too many users"); +	ERRSTR(EDQUOT, "Disc quota exceeded"); + +/* Network File System */ +	ERRSTR(ESTALE, "Stale NFS file handle"); +	ERRSTR(EREMOTE, "Too many levels of remote in path"); +	ERRSTR(EBADRPC, "RPC struct is bad"); +	ERRSTR(ERPCMISMATCH, "RPC version wrong"); +	ERRSTR(EPROGUNAVAIL, "RPC prog. not avail"); +	ERRSTR(EPROGMISMATCH, "Program version wrong"); +	ERRSTR(EPROCUNAVAIL, "Bad procedure for program"); + +	ERRSTR(ENOLCK, "No locks available"); +	ERRSTR(ENOSYS, "Function not implemented"); +	ERRSTR(EFTYPE, "Inappropriate file type or format"); +#ifdef EAUTH +	ERRSTR(EAUTH, "Authentication error"); +#endif +#ifdef ENEEDAUTH +	ERRSTR(ENEEDAUTH, "Need authenticator"); +#endif +	ERRSTR(EIDRM, "Identifier removed"); +	ERRSTR(ENOMSG, "No message of desired type"); +#ifdef EOVERFLOW +	ERRSTR(EOVERFLOW, "Value too large to be stored in data type"); +#endif +	ERRSTR(ECANCELED, "Operation canceled"); +	ERRSTR(EILSEQ, "Illegal byte sequence"); +#ifdef ENOATTR +	ERRSTR(ENOATTR, "Attribute not found"); +#endif + +/* General */ +#ifdef EDOOFUS +	ERRSTR(EDOOFUS, "Programming error"); +#endif + +#ifdef EBADMSG +	ERRSTR(EBADMSG, "Bad message"); +#endif +#ifdef EMULTIHOP +	ERRSTR(EMULTIHOP, "Multihop attempted"); +#endif +#ifdef ENOLINK +	ERRSTR(ENOLINK, "Link has been severed"); +#endif +#ifdef EPROTO +	ERRSTR(EPROTO, "Protocol error"); +#endif + +	return (__db_unknown_error(num)); +} diff --git a/db-4.8.30/clib/strncat.c b/db-4.8.30/clib/strncat.c new file mode 100644 index 0000000..ce8273a --- /dev/null +++ b/db-4.8.30/clib/strncat.c @@ -0,0 +1,69 @@ +/*- + * Copyright (c) 1990, 1993 + *	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. + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * strncat -- + * + * PUBLIC: #ifndef HAVE_STRNCAT + * PUBLIC: char *strncat __P((char *, const char *, size_t)); + * PUBLIC: #endif + */ +/* + * Concatenate src on the end of dst.  At most strlen(dst)+n+1 bytes + * are written at dst (at most n+1 bytes being appended).  Return dst. + */ +char * +strncat(char *dst, const char *src, size_t n) +{ +	if (n != 0) { +		char *d = dst; +		const char *s = src; + +		while (*d != 0) +			d++; +		do { +			if ((*d = *s++) == 0) +				break; +			d++; +		} while (--n != 0); +		*d = 0; +	} +	return (dst); +} diff --git a/db-4.8.30/clib/strncmp.c b/db-4.8.30/clib/strncmp.c new file mode 100644 index 0000000..9738b5b --- /dev/null +++ b/db-4.8.30/clib/strncmp.c @@ -0,0 +1,61 @@ +/* + * Copyright (c) 1989, 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. 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. + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * strncmp -- + * + * PUBLIC: #ifndef HAVE_STRNCMP + * PUBLIC: int strncmp __P((const char *, const char *, size_t)); + * PUBLIC: #endif + */ +int +strncmp(s1, s2, n) +	const char *s1, *s2; +	size_t n; +{ + +	if (n == 0) +		return (0); +	do { +		if (*s1 != *s2++) +			return (*(const unsigned char *)s1 - +				*(const unsigned char *)(s2 - 1)); +		if (*s1++ == 0) +			break; +	} while (--n != 0); +	return (0); +} diff --git a/db-4.8.30/clib/strrchr.c b/db-4.8.30/clib/strrchr.c new file mode 100644 index 0000000..8753e94 --- /dev/null +++ b/db-4.8.30/clib/strrchr.c @@ -0,0 +1,58 @@ +/* + * Copyright (c) 1988, 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. 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. + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * strrchr -- + * + * PUBLIC: #ifndef HAVE_STRRCHR + * PUBLIC: char *strrchr __P((const char *, int)); + * PUBLIC: #endif + */ +char *strrchr(const char *p, int ch) +{ +	char *save; +	char c; + +	c = ch; +	for (save = NULL;; ++p) { +		if (*p == c) +			save = (char *)p; +		if (*p == '\0') +			return (save); +	} +	/* NOTREACHED */ +} diff --git a/db-4.8.30/clib/strsep.c b/db-4.8.30/clib/strsep.c new file mode 100644 index 0000000..f79d0f5 --- /dev/null +++ b/db-4.8.30/clib/strsep.c @@ -0,0 +1,80 @@ +/*- + * 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. 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. + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * Get next token from string *stringp, where tokens are possibly-empty + * strings separated by characters from delim. + * + * Writes NULs into the string at *stringp to end tokens. + * delim need not remain constant from call to call. + * On return, *stringp points past the last NUL written (if there might + * be further tokens), or is NULL (if there are definitely no more tokens). + * + * If *stringp is NULL, strsep returns NULL. + * + * PUBLIC: #ifndef HAVE_STRSEP + * PUBLIC: char *strsep __P((char **, const char *)); + * PUBLIC: #endif + */ +char * +strsep(stringp, delim) +	char **stringp; +	const char *delim; +{ +	char *s; +	const char *spanp; +	int c, sc; +	char *tok; + +	if ((s = *stringp) == NULL) +		return (NULL); +	for (tok = s;;) { +		c = *s++; +		spanp = delim; +		do { +			if ((sc = *spanp++) == c) { +				if (c == 0) +					s = NULL; +				else +					s[-1] = 0; +				*stringp = s; +				return (tok); +			} +		} while (sc != 0); +	} +	/* NOTREACHED */ +} diff --git a/db-4.8.30/clib/strtol.c b/db-4.8.30/clib/strtol.c new file mode 100644 index 0000000..eb76b8f --- /dev/null +++ b/db-4.8.30/clib/strtol.c @@ -0,0 +1,142 @@ +/*- + * 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. 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. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * Convert a string to a long integer. + * + * Assumes that the upper and lower case + * alphabets and digits are each contiguous. + * + * PUBLIC: #ifndef HAVE_STRTOL + * PUBLIC: long strtol __P((const char *, char **, int)); + * PUBLIC: #endif + */ +long +strtol(nptr, endptr, base) +	const char * nptr; +	char ** endptr; +	int base; +{ +	const char *s; +	unsigned long acc; +	char c; +	unsigned long cutoff; +	int neg, any, cutlim; + +	/* +	 * 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. +	 */ +	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')) { +		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; + +	/* +	 * 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) + LONG_MAX +	    : LONG_MAX; +	cutlim = cutoff % base; +	cutoff /= 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 = neg ? LONG_MIN : LONG_MAX; +		errno = ERANGE; +	} else if (!any) { +noconv: +		errno = EINVAL; +	} else if (neg) +		acc = -(long)acc; +	if (endptr != NULL) +		*endptr = (char *)(any ? s - 1 : nptr); +	return (acc); +} diff --git a/db-4.8.30/clib/strtoul.c b/db-4.8.30/clib/strtoul.c new file mode 100644 index 0000000..d0495a3 --- /dev/null +++ b/db-4.8.30/clib/strtoul.c @@ -0,0 +1,121 @@ +/* + * 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. 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. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * Convert a string to an unsigned long integer. + * + * Assumes that the upper and lower case + * alphabets and digits are each contiguous. + * + * PUBLIC: #ifndef HAVE_STRTOUL + * PUBLIC: unsigned long strtoul __P((const char *, char **, int)); + * PUBLIC: #endif + */ +unsigned long +strtoul(nptr, endptr, base) +	const char * nptr; +	char ** 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')) { +		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/db-4.8.30/clib/time.c b/db-4.8.30/clib/time.c new file mode 100644 index 0000000..2b7e9f4 --- /dev/null +++ b/db-4.8.30/clib/time.c @@ -0,0 +1,34 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 2006-2009 Oracle.  All rights reserved. + * + * $Id$ + */ + +#include "db_config.h" + +#include "db_int.h" + +/* + * time -- + * + * PUBLIC: #ifndef HAVE_TIME + * PUBLIC: time_t time __P((time_t *)); + * PUBLIC: #endif + */ +time_t +time(nowp) +	time_t *nowp; +{ +	db_timespec t; +	time_t res; + +	__os_gettime(NULL, &t, 0); + +	res = t.tv_sec + t.tv_nsec / NS_PER_SEC; + +	if (nowp != NULL) +		*nowp = res; +	return (res); +} | 
