Update minix-port.patch

This commit is contained in:
Arun Thomas 2011-07-01 17:53:12 +02:00
parent db0be09803
commit 49a93d54be

View file

@ -89,6 +89,15 @@ diff -ru nbsdsrc/src/lib/libc/Makefile lib/nbsd_libc/Makefile
# workaround for I18N stuffs: build singlebyte setlocale() for libc.a,
@@ -146,4 +171,8 @@
# force the dynamic linker to initialize libc first
SHLIB_SHFLAGS+= -Wl,-z,initfirst
+
+.include <bsd.own.mk>
+SUBDIR+= pkgconfig
+.include <bsd.subdir.mk>
diff -ru nbsdsrc/src/lib/libc/Makefile.inc lib/nbsd_libc/Makefile.inc
--- nbsdsrc/src/lib/libc/Makefile.inc
+++ lib/nbsd_libc/Makefile.inc
@ -356,24 +365,6 @@ diff -ru nbsdsrc/src/lib/libc/gdtoa/gdtoa_locks.c lib/nbsd_libc/gdtoa/gdtoa_lock
+#ifdef _REENTRANT /* !__minix */
mutex_t __gdtoa_locks[2] = { MUTEX_INITIALIZER, MUTEX_INITIALIZER };
+#endif /* _REENTRANT */
diff -ru nbsdsrc/src/lib/libc/gdtoa/gdtoaimp.h lib/nbsd_libc/gdtoa/gdtoaimp.h
--- nbsdsrc/src/lib/libc/gdtoa/gdtoaimp.h
+++ lib/nbsd_libc/gdtoa/gdtoaimp.h
@@ -1,4 +1,4 @@
-/* $NetBSD: gdtoaimp.h,v 1.7 2009/05/07 20:31:44 christos Exp $ */
+/* $NetBSD: gdtoaimp.h,v 1.8 2011/01/21 23:36:49 christos Exp $ */
/****************************************************************
@@ -276,7 +276,7 @@
Exactly one of IEEE_LITTLE_ENDIAN, IEEE_BIG_ENDIAN, VAX, or IBM should be defined.
#endif
-typedef union { double d; ULong L[2]; } U;
+typedef union { double d; ULong L[2]; } __attribute__((__may_alias__)) U;
#ifdef YES_ALIAS
#define dval(x) x
diff -ru nbsdsrc/src/lib/libc/gen/Makefile.inc lib/nbsd_libc/gen/Makefile.inc
--- nbsdsrc/src/lib/libc/gen/Makefile.inc
+++ lib/nbsd_libc/gen/Makefile.inc
@ -962,231 +953,6 @@ diff -ru nbsdsrc/src/lib/libc/gen/getpwent.c lib/nbsd_libc/gen/getpwent.c
mutex_unlock(&_pwmutex);
switch (r) {
case NS_SUCCESS:
diff -ru nbsdsrc/src/lib/libc/gen/glob.c lib/nbsd_libc/gen/glob.c
--- nbsdsrc/src/lib/libc/gen/glob.c
+++ lib/nbsd_libc/gen/glob.c
@@ -1,4 +1,4 @@
-/* $NetBSD: glob.c,v 1.27 2010/09/06 14:40:25 christos Exp $ */
+/* $NetBSD: glob.c,v 1.28 2011/01/21 23:30:31 christos Exp $ */
/*
* Copyright (c) 1989, 1993
@@ -37,7 +37,7 @@
#if 0
static char sccsid[] = "@(#)glob.c 8.3 (Berkeley) 10/13/93";
#else
-__RCSID("$NetBSD: glob.c,v 1.27 2010/09/06 14:40:25 christos Exp $");
+__RCSID("$NetBSD: glob.c,v 1.28 2011/01/21 23:30:31 christos Exp $");
#endif
#endif /* LIBC_SCCS and not lint */
@@ -87,13 +87,18 @@
#define NO_GETPW_R
#endif
-#define GLOB_LIMIT_MALLOC 65536
-#define GLOB_LIMIT_STAT 128
-#define GLOB_LIMIT_READDIR 16384
+#define GLOB_LIMIT_STRING 65536 /* number of readdirs */
+#define GLOB_LIMIT_STAT 128 /* number of stat system calls */
+#define GLOB_LIMIT_READDIR 16384 /* total buffer size of path strings */
+#define GLOB_LIMIT_PATH 1024 /* number of path elements */
+#define GLOB_LIMIT_BRACE 128 /* Number of brace calls */
-#define GLOB_INDEX_MALLOC 0
-#define GLOB_INDEX_STAT 1
-#define GLOB_INDEX_READDIR 2
+struct glob_limit {
+ size_t l_string;
+ size_t l_stat;
+ size_t l_readdir;
+ size_t l_brace;
+};
/*
* XXX: For NetBSD 1.4.x compatibility. (kill me l8r)
@@ -158,17 +163,17 @@
static DIR *g_opendir(Char *, glob_t *);
static Char *g_strchr(const Char *, int);
static int g_stat(Char *, __gl_stat_t *, glob_t *);
-static int glob0(const Char *, glob_t *, size_t *);
-static int glob1(Char *, glob_t *, size_t *);
+static int glob0(const Char *, glob_t *, struct glob_limit *);
+static int glob1(Char *, glob_t *, struct glob_limit *);
static int glob2(Char *, Char *, Char *, const Char *, glob_t *,
- size_t *);
+ struct glob_limit *);
static int glob3(Char *, Char *, Char *, const Char *, const Char *,
- const Char *, glob_t *, size_t *);
-static int globextend(const Char *, glob_t *, size_t *);
+ const Char *, glob_t *, struct glob_limit *);
+static int globextend(const Char *, glob_t *, struct glob_limit *);
static const Char *globtilde(const Char *, Char *, size_t, glob_t *);
-static int globexp1(const Char *, glob_t *, size_t *);
+static int globexp1(const Char *, glob_t *, struct glob_limit *);
static int globexp2(const Char *, const Char *, glob_t *, int *,
- size_t *);
+ struct glob_limit *);
static int match(const Char *, const Char *, const Char *);
#ifdef DEBUG
static void qprintf(const char *, Char *);
@@ -181,8 +186,7 @@
const u_char *patnext;
int c;
Char *bufnext, *bufend, patbuf[MAXPATHLEN+1];
- /* 0 = malloc(), 1 = stat(), 2 = readdir() */
- size_t limit[] = { 0, 0, 0 };
+ struct glob_limit limit = { 0, 0, 0, 0 };
_DIAGASSERT(pattern != NULL);
@@ -218,9 +222,9 @@
*bufnext = EOS;
if (flags & GLOB_BRACE)
- return globexp1(patbuf, pglob, limit);
+ return globexp1(patbuf, pglob, &limit);
else
- return glob0(patbuf, pglob, limit);
+ return glob0(patbuf, pglob, &limit);
}
/*
@@ -229,7 +233,7 @@
* characters
*/
static int
-globexp1(const Char *pattern, glob_t *pglob, size_t *limit)
+globexp1(const Char *pattern, glob_t *pglob, struct glob_limit *limit)
{
const Char* ptr = pattern;
int rv;
@@ -237,6 +241,12 @@
_DIAGASSERT(pattern != NULL);
_DIAGASSERT(pglob != NULL);
+ if ((pglob->gl_flags & GLOB_LIMIT) &&
+ limit->l_brace++ >= GLOB_LIMIT_BRACE) {
+ errno = 0;
+ return GLOB_NOSPACE;
+ }
+
/* Protect a single {}, for find(1), like csh */
if (pattern[0] == LBRACE && pattern[1] == RBRACE && pattern[2] == EOS)
return glob0(pattern, pglob, limit);
@@ -256,7 +266,7 @@
*/
static int
globexp2(const Char *ptr, const Char *pattern, glob_t *pglob, int *rv,
- size_t *limit)
+ struct glob_limit *limit)
{
int i;
Char *lm, *ls;
@@ -461,7 +471,7 @@
* to find no matches.
*/
static int
-glob0(const Char *pattern, glob_t *pglob, size_t *limit)
+glob0(const Char *pattern, glob_t *pglob, struct glob_limit *limit)
{
const Char *qpatnext;
int c, error;
@@ -570,7 +580,7 @@
}
static int
-glob1(Char *pattern, glob_t *pglob, size_t *limit)
+glob1(Char *pattern, glob_t *pglob, struct glob_limit *limit)
{
Char pathbuf[MAXPATHLEN+1];
@@ -596,7 +606,7 @@
*/
static int
glob2(Char *pathbuf, Char *pathend, Char *pathlim, const Char *pattern,
- glob_t *pglob, size_t *limit)
+ glob_t *pglob, struct glob_limit *limit)
{
__gl_stat_t sb;
const Char *p;
@@ -624,10 +634,11 @@
return 0;
if ((pglob->gl_flags & GLOB_LIMIT) &&
- limit[GLOB_INDEX_STAT]++ >= GLOB_LIMIT_STAT) {
+ limit->l_stat++ >= GLOB_LIMIT_STAT) {
errno = 0;
*pathend++ = SEP;
*pathend = EOS;
+printf("stat limit\n");
return GLOB_NOSPACE;
}
if (((pglob->gl_flags & GLOB_MARK) &&
@@ -692,7 +703,7 @@
static int
glob3(Char *pathbuf, Char *pathend, Char *pathlim, const Char *pattern,
const Char *restpattern, const Char *pglobstar, glob_t *pglob,
- size_t *limit)
+ struct glob_limit *limit)
{
struct dirent *dp;
DIR *dirp;
@@ -785,7 +796,7 @@
Char *dc;
if ((pglob->gl_flags & GLOB_LIMIT) &&
- limit[GLOB_INDEX_READDIR]++ >= GLOB_LIMIT_READDIR) {
+ limit->l_readdir++ >= GLOB_LIMIT_READDIR) {
errno = 0;
*pathend++ = SEP;
*pathend = EOS;
@@ -894,7 +905,7 @@
* gl_pathv points to (gl_offs + gl_pathc + 1) items.
*/
static int
-globextend(const Char *path, glob_t *pglob, size_t *limit)
+globextend(const Char *path, glob_t *pglob, struct glob_limit *limit)
{
char **pathv;
size_t i, newsize, len;
@@ -905,6 +916,9 @@
_DIAGASSERT(pglob != NULL);
newsize = sizeof(*pathv) * (2 + pglob->gl_pathc + pglob->gl_offs);
+ if ((pglob->gl_flags & GLOB_LIMIT) &&
+ newsize > GLOB_LIMIT_PATH * sizeof(*pathv))
+ goto nospace;
pathv = pglob->gl_pathv ? realloc(pglob->gl_pathv, newsize) :
malloc(newsize);
if (pathv == NULL)
@@ -921,7 +935,7 @@
for (p = path; *p++;)
continue;
len = (size_t)(p - path);
- limit[GLOB_INDEX_MALLOC] += len;
+ limit->l_string += len;
if ((copy = malloc(len)) != NULL) {
if (g_Ctoc(path, copy, len)) {
free(copy);
@@ -932,12 +946,13 @@
pathv[pglob->gl_offs + pglob->gl_pathc] = NULL;
if ((pglob->gl_flags & GLOB_LIMIT) &&
- (newsize + limit[GLOB_INDEX_MALLOC]) >= GLOB_LIMIT_MALLOC) {
- errno = 0;
- return GLOB_NOSPACE;
- }
+ (newsize + limit->l_string) >= GLOB_LIMIT_STRING)
+ goto nospace;
return copy == NULL ? GLOB_NOSPACE : 0;
+nospace:
+ errno = 0;
+ return GLOB_NOSPACE;
}
diff -ru nbsdsrc/src/lib/libc/gen/gr_private.h lib/nbsd_libc/gen/gr_private.h
--- nbsdsrc/src/lib/libc/gen/gr_private.h
+++ lib/nbsd_libc/gen/gr_private.h