[MKISOFS]

Update mkisofs to schily-2017-09-07.
Among other things, this version comes with an upstream fix for David's x64 fix in r75399. We are now using 100% unmodified upstream code again.

svn path=/trunk/; revision=75806
This commit is contained in:
Colin Finck
2017-09-09 15:06:48 +00:00
parent dc1e7928d0
commit 6116aa816b
17 changed files with 378 additions and 128 deletions
@@ -1,6 +1,6 @@
/* @(#)version.h 1.93 16/12/15 Copyright 2007-2016 J. Schilling */
/* @(#)version.h 1.94 17/03/28 Copyright 2007-2017 J. Schilling */
/*
* The version for cdrtools programs
*/
#define VERSION "3.02a07"
#define VERSION "3.02a08"
@@ -11,6 +11,8 @@
* with the License.
*
* See the file CDDL.Schily.txt in this distribution for details.
* A copy of the CDDL is also available via the Internet at
* http://www.opensource.org/licenses/cddl1.txt
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file CDDL.Schily.txt from this distribution.
@@ -11,6 +11,8 @@
* with the License.
*
* See the file CDDL.Schily.txt in this distribution for details.
* A copy of the CDDL is also available via the Internet at
* http://www.opensource.org/licenses/cddl1.txt
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file CDDL.Schily.txt from this distribution.
@@ -1,9 +1,9 @@
/* @(#)libport.h 1.44 15/05/09 Copyright 1995-2015 J. Schilling */
/* @(#)libport.h 1.45 17/05/02 Copyright 1995-2017 J. Schilling */
/*
* Prototypes for POSIX standard functions that may be missing on the
* local platform and thus are implemented inside libschily.
*
* Copyright (c) 1995-2015 J. Schilling
* Copyright (c) 1995-2017 J. Schilling
*/
/*
* The contents of this file are subject to the terms of the
@@ -213,8 +213,8 @@ extern wchar_t *wcsstr __PR((const wchar_t *s1,
#endif /* _SCHILY_WCHAR_H */
#ifndef HAVE_RENAME
extern int rename __PR((const char *old,
const char *new));
extern int rename __PR((const char *__old,
const char *__new));
#endif
/*
@@ -378,8 +378,8 @@ extern ssize_t readlinkat __PR((int fd, const char *name,
char *lbuf, size_t lbufsize));
#endif
#ifndef HAVE_RENAMEAT
extern int renameat __PR((int oldfd, const char *old,
int newfd, const char *new));
extern int renameat __PR((int oldfd, const char *__old,
int newfd, const char *__new));
#endif
#ifndef HAVE_SYMLINKAT
extern int symlinkat __PR((const char *content,
@@ -1,8 +1,8 @@
/* @(#)maxpath.h 1.12 10/08/27 Copyright 1985, 1995, 1998, 2001-2010 J. Schilling */
/* @(#)maxpath.h 1.13 17/04/27 Copyright 1985, 1995, 1998, 2001-2017 J. Schilling */
/*
* Definitions for dealing with statically limitations on pathnames
*
* Copyright (c) 1985, 1995, 1998, 2001-2010 J. Schilling
* Copyright (c) 1985, 1995, 1998, 2001-2017 J. Schilling
*/
/*
* The contents of this file are subject to the terms of the
@@ -11,6 +11,8 @@
* with the License.
*
* See the file CDDL.Schily.txt in this distribution for details.
* A copy of the CDDL is also available via the Internet at
* http://www.opensource.org/licenses/cddl1.txt
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file CDDL.Schily.txt from this distribution.
@@ -54,7 +56,7 @@
#endif
#if !defined(FOUND_MAXPATHNAME)
# define MAXPATHNAME 256 /* Is there a limit? */
# define MAXPATHNAME 1024 /* Is there a limit? */
#endif
#ifndef PATH_MAX
@@ -95,7 +97,7 @@
# define FOUND_MAXFILENAME
#endif
#if !defined(FOUND_MAXPATHNAME)
#if !defined(FOUND_MAXFILENAME)
#include <schily/stdlib.h>
#endif
#if !defined(FOUND_MAXFILENAME) && defined(_MAX_FNAME)
@@ -103,11 +105,18 @@
# define FOUND_MAXFILENAME
#endif
#if !defined(FOUND_MAXFILENAME)
# define MAXFILENAME 256
#endif
#ifndef NAME_MAX
#define NAME_MAX MAXFILENAME
#endif
#ifndef MAXNAMLEN
#define MAXNAMLEN MAXFILENAME
#endif
#ifndef MAXNAMELEN
#define MAXNAMELEN MAXFILENAME
#endif
#endif /* _SCHILY_MAXPATH_H */
@@ -1,11 +1,11 @@
/* @(#)patmatch.h 1.15 10/08/27 Copyright 1985,1993-2010 J. Schilling */
/* @(#)patmatch.h 1.16 17/07/02 Copyright 1985,1993-2017 J. Schilling */
#ifndef _SCHILY_PATMATCH_H
#define _SCHILY_PATMATCH_H
/*
* Definitions for the pattern matching functions.
*
* Copyright (c) 1985,1993-2010 J. Schilling
* Copyright (c) 1985,1993-2017 J. Schilling
*/
/*
* The contents of this file are subject to the terms of the
@@ -14,6 +14,8 @@
* with the License.
*
* See the file CDDL.Schily.txt in this distribution for details.
* A copy of the CDDL is also available via the Internet at
* http://www.opensource.org/licenses/cddl1.txt
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file CDDL.Schily.txt from this distribution.
@@ -121,6 +123,17 @@ extern wchar_t *patwlmatch __PR((const wchar_t *__pat, const int *__aux,
int __soff, int __slen,
int __alt, int __state[]));
extern unsigned char *patmbmatch __PR((const wchar_t *__pat,
const int *__aux,
const unsigned char *__str,
int __soff, int __slen,
int __alt, int __state[]));
extern unsigned char *patmblmatch __PR((const wchar_t *__pat,
const int *__aux,
const unsigned char *__str,
int __soff, int __slen,
int __alt, int __state[]));
#ifdef __cplusplus
}
@@ -1,4 +1,4 @@
/* @(#)schily.h 1.122 16/12/18 Copyright 1985-2016 J. Schilling */
/* @(#)schily.h 1.123 17/08/03 Copyright 1985-2016 J. Schilling */
/*
* Definitions for libschily
*
@@ -47,9 +47,6 @@
#ifndef _SCHILY_CCOMDEFS_H
#include <schily/ccomdefs.h>
#endif
#ifndef _SCHILY_STDINT_H
#include <schily/stdint.h>
#endif
#ifdef __cplusplus
extern "C" {
@@ -467,12 +464,12 @@ extern size_t wcslcatl __PR((wchar_t *, size_t, ...));
extern int wcseql __PR((const wchar_t *, const wchar_t *));
#endif
#ifdef va_arg
extern int format __PR((void (*)(char, intptr_t), intptr_t, const char *,
extern int format __PR((void (*)(char, void *), void *, const char *,
va_list));
extern int fprformat __PR((intptr_t, const char *, va_list));
extern int fprformat __PR((void *, const char *, va_list));
#else
extern int format __PR((void (*)(char, intptr_t), intptr_t, const char *, void *));
extern int fprformat __PR((intptr_t, const char *, void *));
extern int format __PR((void (*)(char, void *), void *, const char *, void *));
extern int fprformat __PR((void *, const char *, void *));
#endif
extern int ftoes __PR((char *, double, int, int));
@@ -11,6 +11,8 @@
* with the License.
*
* See the file CDDL.Schily.txt in this distribution for details.
* A copy of the CDDL is also available via the Internet at
* http://www.opensource.org/licenses/cddl1.txt
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file CDDL.Schily.txt from this distribution.
@@ -1,8 +1,8 @@
/* @(#)unistd.h 1.27 14/06/19 Copyright 1996-2014 J. Schilling */
/* @(#)unistd.h 1.28 17/04/30 Copyright 1996-2017 J. Schilling */
/*
* Definitions for unix system interface
*
* Copyright (c) 1996-2014 J. Schilling
* Copyright (c) 1996-2017 J. Schilling
*/
/*
* The contents of this file are subject to the terms of the
@@ -124,14 +124,14 @@
#define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
#endif
#ifndef HAVE_ENVIRON_DEF
extern char **environ;
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifndef HAVE_ENVIRON_DEF
extern char **environ;
#endif
#if !defined(HAVE_UNISTD_H) || !defined(_POSIX_VERSION)
/*
* Maybe we need a lot more definitions here...
@@ -1,8 +1,8 @@
/* @(#)wctype.h 1.8 13/07/08 Copyright 2009-2013 J. Schilling */
/* @(#)wctype.h 1.9 17/08/05 Copyright 2009-2017 J. Schilling */
/*
* Abstraction from wctype.h
*
* Copyright (c) 2009-2013 J. Schilling
* Copyright (c) 2009-2017 J. Schilling
*/
/*
* The contents of this file are subject to the terms of the
@@ -68,6 +68,10 @@
#define iswalnum(c) isalnum(c)
#undef iswalpha
#define iswalpha(c) isalpha(c)
#ifdef HAVE_ISBLANK
#undef iswblank
#define iswblank(c) isblank(c)
#endif
#undef iswcntrl
#define iswcntrl(c) iscntrl(c)
#undef iswcntrl
@@ -1,8 +1,8 @@
/* @(#)comerr.c 1.43 15/07/01 Copyright 1985-1989, 1995-2015 J. Schilling */
/* @(#)comerr.c 1.44 17/03/13 Copyright 1985-1989, 1995-2017 J. Schilling */
/*
* Routines for printing command errors
*
* Copyright (c) 1985-1989, 1995-2015 J. Schilling
* Copyright (c) 1985-1989, 1995-2017 J. Schilling
*/
/*
* The contents of this file are subject to the terms of the
@@ -332,8 +332,12 @@ comexit(err)
int err;
{
while (exfuncs) {
ex_t *fp;
(*exfuncs->func)(err, exfuncs->arg);
fp = exfuncs;
exfuncs = exfuncs->next;
free(fp);
}
exit(err);
/* NOTREACHED */
@@ -1,8 +1,8 @@
/* @(#)fnmatch.c 8.20 15/07/06 2005-2015 J. Schilling from 8.2 (Berkeley) */
/* @(#)fnmatch.c 8.24 17/08/30 2005-2017 J. Schilling from 8.2 (Berkeley) */
#include <schily/mconfig.h>
#ifndef lint
static UConst char sccsid[] =
"@(#)fnmatch.c 8.20 15/07/06 2005-2015 J. Schilling from 8.2 (Berkeley)";
"@(#)fnmatch.c 8.24 17/08/30 2005-2017 J. Schilling from 8.2 (Berkeley)";
#endif
/*
* Copyright (c) 1989, 1993, 1994
@@ -11,6 +11,12 @@ static UConst char sccsid[] =
* This code is derived from software contributed to Berkeley by
* Guido van Rossum.
*
* Copyright (c) 2005-2017 J. Schilling
* 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:
@@ -37,7 +43,7 @@ static UConst char sccsid[] =
*/
#if defined(LIBC_SCCS) && !defined(lint)
static UConst char sccsid[] = "@(#)fnmatch.c 8.20 (Berkeley) 07/06/15";
static UConst char sccsid[] = "@(#)fnmatch.c 8.24 (Berkeley) 08/30/17";
#endif /* LIBC_SCCS and not lint */
/* "FBSD src/lib/libc/gen/fnmatch.c,v 1.19 2010/04/16 22:29:24 jilles Exp $" */
@@ -71,6 +77,8 @@ static UConst char sccsid[] = "@(#)fnmatch.c 8.20 (Berkeley) 07/06/15";
#define RANGE_NOMATCH 0
#define RANGE_ERROR (-1)
#define CL_SIZE 32 /* Max size for '[: :]' */
static int rangematch __PR((const char *, wchar_t, int, char **, mbstate_t *));
static int fnmatch1 __PR((const char *, const char *, const char *, int,
mbstate_t, mbstate_t));
@@ -127,11 +135,14 @@ fnmatch1(pattern, string, stringstart, flags, patmbs, strmbs)
mbstate_t patmbs;
mbstate_t strmbs;
{
const char *bt_pattern, *bt_string;
mbstate_t bt_patmbs, bt_strmbs;
char *newp;
char c;
wchar_t pc, sc;
size_t pclen, sclen;
bt_pattern = bt_string = NULL;
for (;;) {
pclen = mbrtowc(&pc, pattern, MB_LEN_MAX, &patmbs);
if (pclen == (size_t)-1 || pclen == (size_t)-2)
@@ -147,16 +158,18 @@ fnmatch1(pattern, string, stringstart, flags, patmbs, strmbs)
case EOS:
if ((flags & FNM_LEADING_DIR) && sc == '/')
return (0);
return (sc == EOS ? 0 : FNM_NOMATCH);
if (sc == EOS)
return (0);
goto backtrack;
case '?':
if (sc == EOS)
return (FNM_NOMATCH);
if (sc == '/' && (flags & FNM_PATHNAME))
return (FNM_NOMATCH);
goto backtrack;
if (sc == '.' && (flags & FNM_PERIOD) &&
(string == stringstart ||
((flags & FNM_PATHNAME) && *(string - 1) == '/')))
return (FNM_NOMATCH);
goto backtrack;
string += sclen;
break;
case '*':
@@ -168,7 +181,7 @@ fnmatch1(pattern, string, stringstart, flags, patmbs, strmbs)
if (sc == '.' && (flags & FNM_PERIOD) &&
(string == stringstart ||
((flags & FNM_PATHNAME) && *(string - 1) == '/')))
return (FNM_NOMATCH);
goto backtrack;
/* Optimize for pattern with * at end or before /. */
if (c == EOS) {
@@ -184,43 +197,34 @@ fnmatch1(pattern, string, stringstart, flags, patmbs, strmbs)
break;
}
/* General case, use recursion. */
while (sc != EOS) {
if (!fnmatch1(pattern, string, stringstart,
flags, patmbs, strmbs))
return (0);
sclen = mbrtowc(&sc, string, MB_LEN_MAX,
&strmbs);
if (sclen == (size_t)-1 ||
sclen == (size_t)-2) {
sc = (unsigned char)*string;
sclen = 1;
memset(&strmbs, 0, sizeof (strmbs));
}
if (sc == '/' && (flags & FNM_PATHNAME))
break;
string += sclen;
}
return (FNM_NOMATCH);
/*
* First try the shortest match for the '*' that
* could work. We can forget any earlier '*' since
* there is no way having it match more characters
* can help us, given that we are already here.
*/
bt_pattern = pattern, bt_patmbs = patmbs;
bt_string = string, bt_strmbs = strmbs;
break;
case '[':
if (sc == EOS)
return (FNM_NOMATCH);
if (sc == '/' && (flags & FNM_PATHNAME))
return (FNM_NOMATCH);
goto backtrack;
if (sc == '.' && (flags & FNM_PERIOD) &&
(string == stringstart ||
((flags & FNM_PATHNAME) && *(string - 1) == '/')))
return (FNM_NOMATCH);
goto backtrack;
switch (rangematch(pattern, sc, flags, &newp,
&patmbs)) {
&patmbs)) {
case RANGE_ERROR:
goto norm;
case RANGE_MATCH:
pattern = newp;
break;
case RANGE_NOMATCH:
return (FNM_NOMATCH);
goto backtrack;
}
string += sclen;
break;
@@ -231,20 +235,45 @@ fnmatch1(pattern, string, stringstart, flags, patmbs, strmbs)
if (pclen == (size_t)-1 || pclen == (size_t)-2)
return (FNM_NOMATCH);
if (pclen == 0)
pc = '\\';
return (FNM_NOMATCH);
pattern += pclen;
}
/* FALLTHROUGH */
default:
norm:
if (pc == sc)
;
else if ((flags & FNM_CASEFOLD) &&
(towlower(pc) == towlower(sc)))
;
else
return (FNM_NOMATCH);
string += sclen;
if (pc == sc) {
;
} else if ((flags & FNM_CASEFOLD) &&
(towlower(pc) == towlower(sc))) {
;
} else {
backtrack:
/*
* If we have a mismatch (other than hitting
* the end of the string), go back to the last
* '*' seen and have it match one additional
* character.
*/
if (bt_pattern == NULL)
return (FNM_NOMATCH);
sclen = mbrtowc(&sc, bt_string, MB_LEN_MAX,
&bt_strmbs);
if (sclen == (size_t)-1 ||
sclen == (size_t)-2) {
sc = (unsigned char)*bt_string;
sclen = 1;
memset(&bt_strmbs, 0,
sizeof (bt_strmbs));
}
if (sc == EOS)
return (FNM_NOMATCH);
if (sc == '/' && flags & FNM_PATHNAME)
return (FNM_NOMATCH);
bt_string += sclen;
pattern = bt_pattern, patmbs = bt_patmbs;
string = bt_string, strmbs = bt_strmbs;
}
break;
}
}
@@ -253,7 +282,8 @@ fnmatch1(pattern, string, stringstart, flags, patmbs, strmbs)
#ifdef PROTOTYPES
static int
rangematch(const char *pattern, wchar_t test, int flags, char **newp, mbstate_t *patmbs)
rangematch(const char *pattern, wchar_t test, int flags, char **newp,
mbstate_t *patmbs)
#else
static int
rangematch(pattern, test, flags, newp, patmbs)
@@ -266,8 +296,13 @@ rangematch(pattern, test, flags, newp, patmbs)
{
int negate, ok;
wchar_t c, c2;
wchar_t otest = test;
size_t pclen;
const char *origpat;
#ifdef XXX_COLLATE
struct xlocale_collate *table = (struct xlocale_collate *)
__get_locale()->components[XLC_COLLATE];
#endif
/*
* A bracket expression starting with an unquoted circumflex
@@ -290,6 +325,8 @@ rangematch(pattern, test, flags, newp, patmbs)
ok = 0;
origpat = pattern;
for (;;) {
int quoted = 0;
if (*pattern == ']' && pattern > origpat) {
pattern++;
break;
@@ -297,13 +334,54 @@ rangematch(pattern, test, flags, newp, patmbs)
return (RANGE_ERROR);
} else if (*pattern == '/' && (flags & FNM_PATHNAME)) {
return (RANGE_NOMATCH);
} else if (*pattern == '\\' && !(flags & FNM_NOESCAPE))
} else if (*pattern == '\\' && !(flags & FNM_NOESCAPE)) {
pattern++;
quoted++;
}
pclen = mbrtowc(&c, pattern, MB_LEN_MAX, patmbs);
if (pclen == (size_t)-1 || pclen == (size_t)-2)
return (RANGE_NOMATCH);
pattern += pclen;
if (!quoted && c == '[') {
if (pattern[0] == ':') {
char class[CL_SIZE+1];
char *pc = class;
const char *p;
p = pattern + 1; /* Eat ':' */
for (;;) {
if (*p == '\0')
return (RANGE_ERROR);
if (*p == ':' && p[1] == ']')
break;
if (pc >= &class[CL_SIZE])
return (RANGE_ERROR);
*pc++ = *p++;
}
if (pc == class)
return (RANGE_ERROR);
*pc = '\0';
pattern = p + 2; /* Skip ":]" */
if (iswctype(otest, wctype(class))) {
ok = 1;
} else if (flags & FNM_CASEFOLD) {
/*
* Convert to the other case
*/
if (strcmp(class, "upper") == 0)
if (iswctype(otest,
wctype("lower")))
ok = 1;
else if (strcmp(class, "lower") == 0)
if (iswctype(otest,
wctype("upper")))
ok = 1;
}
continue;
}
}
if (flags & FNM_CASEFOLD)
c = towlower(c);
@@ -323,10 +401,10 @@ rangematch(pattern, test, flags, newp, patmbs)
c2 = towlower(c2);
#ifdef XXX_COLLATE
if (__collate_load_error ?
if (table->__collate_load_error ?
c <= test && test <= c2 :
__collate_range_cmp(c, test) <= 0 &&
__collate_range_cmp(test, c2) <= 0)
__wcollate_range_cmp(c, test) <= 0 &&
__wcollate_range_cmp(test, c2) <= 0)
ok = 1;
#else
if (c <= test && test <= c2)
@@ -1,4 +1,4 @@
/* @(#)format.c 1.61 16/08/10 Copyright 1985-2016 J. Schilling */
/* @(#)format.c 1.62 17/08/03 Copyright 1985-2017 J. Schilling */
/*
* format
* common code for printf fprintf & sprintf
@@ -6,7 +6,7 @@
* allows recursive printf with "%r", used in:
* error, comerr, comerrno, errmsg, errmsgno and the like
*
* Copyright (c) 1985-2016 J. Schilling
* Copyright (c) 1985-2017 J. Schilling
*/
/*
* The contents of this file are subject to the terms of the
@@ -138,9 +138,9 @@ typedef struct f_args {
char *ptr; /* Current ptr in buf */
int cnt; /* Free char count in buf */
#else
void (*outf)__PR((char, intptr_t)); /* Func from format(fun, arg) */
void (*outf)__PR((char, void *)); /* Func from format(fun, arg) */
#endif
intptr_t farg; /* Arg from format (fun, arg) */
void *farg; /* Arg from format (fun, arg) */
int minusflag; /* Fieldwidth is negative */
int flags; /* General flags (+-#) */
int fldwidth; /* Field width as in %3d */
@@ -227,7 +227,7 @@ xflsbuf(c, ap)
#define FORMAT_FUNC_NAME format
#define FORMAT_FUNC_PARM
#define FORMAT_FUNC_PROTO_DECL void (*fun)(char, intptr_t),
#define FORMAT_FUNC_PROTO_DECL void (*fun)(char, void *),
#define FORMAT_FUNC_KR_DECL register void (*fun)();
#define FORMAT_FUNC_KR_ARGS fun,
@@ -235,7 +235,7 @@ xflsbuf(c, ap)
#endif
#ifdef FORMAT_BUFFER
#define FARG (farg|1)
#define FARG ((void *)((UIntptr_t)farg|1))
#else
#define FARG farg
#endif
@@ -243,14 +243,14 @@ xflsbuf(c, ap)
#ifdef PROTOTYPES
EXPORT int
FORMAT_FUNC_NAME(FORMAT_FUNC_PROTO_DECL
intptr_t farg,
void *farg,
const char *fmt,
va_list oargs)
#else
EXPORT int
FORMAT_FUNC_NAME(FORMAT_FUNC_KR_ARGS farg, fmt, oargs)
FORMAT_FUNC_KR_DECL
register intptr_t farg;
register void *farg;
register char *fmt;
va_list oargs;
#endif
@@ -287,14 +287,14 @@ FORMAT_FUNC_NAME(FORMAT_FUNC_KR_ARGS farg, fmt, oargs)
#endif
#ifdef FORMAT_BUFFER
if ((farg & 1) == 0) { /* Called externally */
if (((UIntptr_t)farg & 1) == 0) { /* Called externally */
fa.cnt = BFSIZ;
fa.ptr = fa.iobuf;
fa.fp = (FILE *)farg;
fa.err = 0;
farg = fa.farg = (intptr_t)&fa;
farg = fa.farg = &fa;
} else { /* recursion */
farg &= ~1;
farg = (void *)((UIntptr_t)farg & ~1);
}
#endif
#ifdef FORMAT_FUNC_PARM
@@ -1023,7 +1023,7 @@ error sizeof (ptrdiff_t) is unknown
}
out:
#ifdef FORMAT_BUFFER
if (farg == (intptr_t)&fa) { /* Top level call, flush buffer */
if (farg == &fa) { /* Top level call, flush buffer */
if (fa.err)
return (EOF);
if ((fa.ptr != fa.iobuf) &&
@@ -1208,9 +1208,9 @@ prbuf(s, fa)
{
register int diff;
register int rfillc;
register intptr_t arg = fa->farg;
register void *arg = fa->farg;
#ifdef FORMAT_FUNC_PARM
register void (*fun) __PR((char, intptr_t)) = fa->outf;
register void (*fun) __PR((char, void *)) = fa->outf;
#endif
register int count;
register int lzero = 0;
@@ -1274,9 +1274,9 @@ prc(c, fa)
{
register int diff;
register int rfillc;
register intptr_t arg = fa->farg;
register void *arg = fa->farg;
#ifdef FORMAT_FUNC_PARM
register void (*fun) __PR((char, intptr_t)) = fa->outf;
register void (*fun) __PR((char, void *)) = fa->outf;
#endif
register int count;
@@ -1,12 +1,12 @@
/* @(#)getargs.c 2.70 16/10/23 Copyright 1985, 1988, 1994-2016 J. Schilling */
/* @(#)getargs.c 2.71 17/07/16 Copyright 1985, 1988, 1994-2017 J. Schilling */
#include <schily/mconfig.h>
#ifndef lint
static UConst char sccsid[] =
"@(#)getargs.c 2.70 16/10/23 Copyright 1985, 1988, 1994-2016 J. Schilling";
"@(#)getargs.c 2.71 17/07/16 Copyright 1985, 1988, 1994-2017 J. Schilling";
#endif
#define NEW
/*
* Copyright (c) 1985, 1988, 1994-2016 J. Schilling
* Copyright (c) 1985, 1988, 1994-2017 J. Schilling
*
* 1.3.88 Start implementation of release 2
*/
@@ -1096,8 +1096,10 @@ dosflags(argp, vfmt, pac, pav, flags, oargs)
if (rsf[i].c == *p)
break;
}
if (i >= MAXSF)
if (i >= MAXSF) {
va_end(args);
return (BADFLAG);
}
if (i == nsf) {
rsf[i].curarg = (void *)0;
rsf[i].curfun = (void *)0;
@@ -1,6 +1,6 @@
/* @(#)jsprintf.c 1.19 16/01/21 Copyright 1985, 1995-2016 J. Schilling */
/* @(#)jsprintf.c 1.20 17/08/03 Copyright 1985, 1995-2017 J. Schilling */
/*
* Copyright (c) 1985, 1995-2016 J. Schilling
* Copyright (c) 1985, 1995-2017 J. Schilling
*/
/*
* The contents of this file are subject to the terms of the
@@ -57,7 +57,7 @@ js_printf(form, va_alist)
#else
va_start(args);
#endif
ret = fprformat((intptr_t)stdout, form, args);
ret = fprformat(stdout, form, args);
va_end(args);
return (ret);
}
@@ -82,7 +82,7 @@ js_fprintf(file, form, va_alist)
#else
va_start(args);
#endif
ret = fprformat((intptr_t)file, form, args);
ret = fprformat(file, form, args);
va_end(args);
return (ret);
}
@@ -103,7 +103,7 @@ typedef struct {
} *BUF, _BUF;
LOCAL void _bflush __PR((BUF));
LOCAL void _bput __PR((char, intptr_t));
LOCAL void _bput __PR((char, void *));
EXPORT int js_fprintf __PR((FILE *, const char *, ...));
EXPORT int js_printf __PR((const char *, ...));
@@ -120,12 +120,12 @@ _bflush(bp)
#ifdef PROTOTYPES
LOCAL void
_bput(char c, intptr_t l)
_bput(char c, void *l)
#else
LOCAL void
_bput(c, l)
char c;
intptr_t l;
void *l;
#endif
{
register BUF bp = (BUF)l;
@@ -158,7 +158,7 @@ js_printf(form, va_alist)
#else
va_start(args);
#endif
format(_bput, (intptr_t)&bb, form, args);
format(_bput, &bb, form, args);
va_end(args);
if (bb.cnt < BFSIZ)
_bflush(&bb);
@@ -189,7 +189,7 @@ js_fprintf(file, form, va_alist)
#else
va_start(args);
#endif
format(_bput, (intptr_t)&bb, form, args);
format(_bput, &bb, form, args);
va_end(args);
if (bb.cnt < BFSIZ)
_bflush(&bb);
@@ -1,6 +1,6 @@
/* @(#)jssnprintf.c 1.13 16/08/10 Copyright 1985, 1995-2016 J. Schilling */
/* @(#)jssnprintf.c 1.14 17/08/03 Copyright 1985, 1995-2017 J. Schilling */
/*
* Copyright (c) 1985, 1995-2016 J. Schilling
* Copyright (c) 1985, 1995-2017 J. Schilling
*/
/*
* The contents of this file are subject to the terms of the
@@ -33,12 +33,12 @@ typedef struct {
#ifdef PROTOTYPES
static void
_cput(char c, intptr_t l)
_cput(char c, void *l)
#else
static void
_cput(c, l)
char c;
intptr_t l;
void *l;
#endif
{
register BUF bp = (BUF)l;
@@ -78,7 +78,7 @@ js_snprintf(buf, maxcnt, form, va_alist)
#else
va_start(args);
#endif
cnt = format(_cput, (intptr_t)&bb, form, args);
cnt = format(_cput, &bb, form, args);
va_end(args);
if (maxcnt > 0)
*(bb.ptr) = '\0';
@@ -1,10 +1,18 @@
/* @(#)match.c 1.24 10/08/21 Copyright 1985, 1995-2010 J. Schilling */
/* @(#)match.c 1.27 17/08/13 Copyright 1985, 1995-2017 J. Schilling */
#include <schily/standard.h>
#include <schily/patmatch.h>
#define POSIX_CLASS /* Support [[:alpha:]] by default */
#ifdef NO_POSIX_CLASS /* Allow to disable [[:alpha:]] */
#undef POSIX_CLASS
#endif
#ifdef POSIX_CLASS
#include <schily/wchar.h> /* With [[:alpha:]], we need wctype() */
#include <schily/wctype.h> /* and thus wchar.h and wctype.h */
#endif
/*
* Pattern matching functions
*
* Copyright (c) 1985, 1995-2010 J. Schilling
* Copyright (c) 1985, 1995-2017 J. Schilling
*/
/*
* The contents of this file are subject to the terms of the
@@ -13,6 +21,8 @@
* with the License.
*
* See the file CDDL.Schily.txt in this distribution for details.
* A copy of the CDDL is also available via the Internet at
* http://www.opensource.org/licenses/cddl1.txt
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file CDDL.Schily.txt from this distribution.
@@ -33,6 +43,7 @@
*
* Character classes have been added to allow "[<character list>]"
* to be used.
* POSIX features like [[:alpha:]] have been added.
* Start of line '^' and end of line '$' have been added.
*/
@@ -53,15 +64,36 @@
#define patmatch patwmatch
#endif
#define CHAR wchar_t
#define PCHAR wchar_t
#endif
#ifdef __MB_CHAR
#undef patmatch
#ifdef __LINE_MATCH
#define patmatch patmblmatch
#else
#define patmatch patmbmatch
#endif
#define PCHAR wchar_t
#endif
#ifndef CHAR
typedef unsigned char Uchar;
#define DID_UCHAR_TYPE
#define CHAR Uchar
#endif
#ifndef PCHAR
#ifndef DID_UCHAR_TYPE
typedef unsigned char Uchar;
#endif
#define PCHAR Uchar
#endif
#define ENDSTATE (-1)
#define CL_SIZE 32 /* Max size for '[: :]' */
/*
* The Interpreter
*/
@@ -91,22 +123,63 @@ typedef unsigned char Uchar;
/*
* match a character in class
*
* Syntax errors do not appear here, they are handled by the compiler,
* so in theory we could remove the "return (0)" statements from the
* the POSIX class code.
*/
#ifdef POSIX_CLASS
#define CHK_POSIX_CLASS \
else if (*lpat == LCLASS) { \
if (lpat[1] == ':') { \
char class[CL_SIZE+1]; \
char *pc = class; \
\
lpat += 2; /* Eat ':' */ \
for (;;) { \
if (*lpat == '\0') { \
ok = FALSE; \
goto out; \
} \
if (*lpat == ':' && lpat[1] == RCLASS) \
break; \
if (pc >= &class[CL_SIZE]) { \
ok = FALSE; \
goto out; \
} \
*pc++ = *lpat++; \
} \
if (pc == class) { \
ok = FALSE; \
goto out; \
} \
*pc = '\0'; \
lpat += 2; /* Skip ":]" */ \
if (iswctype(lc, wctype(class))) { \
ok = !ok; \
goto out; \
} \
continue; \
} \
}
#else
#define CHK_POSIX_CLASS
#endif
#define in_class(found, pat, c) { \
register const CHAR *lpat = pat; \
register const PCHAR *lpat = pat; \
register int lc = c; \
int lo_bound; \
int hi_bound; \
\
found = FALSE; \
BOOL ok = FALSE; \
\
if (*lpat == NOT) { \
lpat++; \
found = TRUE; \
ok = TRUE; \
} \
while (*lpat != RCLASS) { \
if (*lpat == QUOTE) \
lpat++; \
CHK_POSIX_CLASS \
lo_bound = *lpat++; \
if (*lpat == RANGE) { \
lpat++; \
@@ -117,10 +190,12 @@ typedef unsigned char Uchar;
hi_bound = lo_bound; \
} \
if (lo_bound <= lc && lc <= hi_bound) { \
found = !found; \
break; \
ok = !ok; \
goto out; \
} \
} \
out: \
found = ok; \
}
/*
@@ -129,10 +204,10 @@ typedef unsigned char Uchar;
* Trys to match a string beginning at offset
* against the compiled pattern.
*/
#ifndef __WIDE_CHAR
#if !defined(__WIDE_CHAR) && !defined(__MB_CHAR)
EXPORT CHAR
*opatmatch(pat, aux, str, soff, slen, alt)
const CHAR *pat;
const PCHAR *pat;
const int *aux;
const CHAR *str;
int soff;
@@ -153,7 +228,7 @@ EXPORT CHAR
*/
EXPORT CHAR *
patmatch(pat, aux, str, soff, slen, alt, state)
const CHAR *pat;
const PCHAR *pat;
const int *aux;
const CHAR *str;
int soff;
@@ -166,7 +241,12 @@ patmatch(pat, aux, str, soff, slen, alt, state)
register int *i;
register int p;
register int q, s, k;
#ifdef __MB_CHAR
wchar_t c;
int mlen = 1;
#else
int c;
#endif
const CHAR *lastp = (CHAR *)NULL;
#ifdef __LINE_MATCH
@@ -178,14 +258,29 @@ for (; soff <= slen; soff++) {
if (alt != ENDSTATE)
put(sp, state, sp, alt);
#ifdef __MB_CHAR
mbtowc(NULL, NULL, 0);
for (s = soff; ; s += mlen) {
#else
for (s = soff; ; s++) {
#endif
/*
* next char from input string
*/
if (s >= slen)
if (s >= slen) {
c = 0;
else
} else {
#ifdef __MB_CHAR
mlen = mbtowc(&c, (char *)str, slen - s);
if (mlen < 0) {
mbtowc(NULL, NULL, 0);
c = str[s];
mlen = 1;
}
#else
c = str[s];
#endif
}
/*
* first complete the closure
*/
@@ -287,17 +382,17 @@ return ((CHAR *)lastp);
}
#ifndef __LINE_MATCH
#if !defined(__LINE_MATCH) && !defined(__MB_CHAR)
/*
* The Compiler
*/
typedef struct args {
const CHAR *pattern;
const PCHAR *pattern;
int *aux;
int patp;
int length;
CHAR Ch;
PCHAR Ch;
} arg_t;
LOCAL void nextitem __PR((arg_t *));
@@ -317,6 +412,15 @@ LOCAL int join __PR((int *, int, int));
(ap)->Ch = (ap)->pattern[(ap)->patp]; \
}
/*
* 'peek' the next character from pattern
*/
#define pch(ap) \
((((ap)->patp + 1) >= (ap)->length) ? \
0 \
: \
(ap)->pattern[(ap)->patp+1]) \
/*
* get the next item from pattern
*/
@@ -348,8 +452,39 @@ prim(ap)
case RBRACK:
return (ENDSTATE);
case LCLASS:
while (ap->Ch != RCLASS && ap->Ch != '\0')
while (ap->Ch != RCLASS && ap->Ch != '\0') {
#ifdef POSIX_CLASS
if (ap->Ch == LCLASS) {
if (pch(ap) == ':') { /* [:alpha:] */
char class[CL_SIZE+1];
char *pc = class;
nextitem(ap);
nextitem(ap);
while (ap->Ch != ':' &&
ap->Ch != '\0') {
if (pc > &class[CL_SIZE])
return (ENDSTATE);
*pc = ap->Ch;
if (*pc++ != ap->Ch)
return (ENDSTATE);
nextitem(ap);
}
if (pc == class)
return (ENDSTATE);
*pc = '\0';
if (ap->Ch == '\0')
return (ENDSTATE);
if (wctype(class) == 0)
return (ENDSTATE);
nextitem(ap);
}
if (ap->Ch != RCLASS)
return (ENDSTATE);
}
#endif
nextitem(ap);
}
if (ap->Ch == '\0')
return (ENDSTATE);
nextitem(ap);
@@ -381,10 +516,12 @@ expr(ap, altp)
int exits = ENDSTATE;
int a;
int *aux = ap->aux;
CHAR Ch;
PCHAR Ch;
for (;;) {
a = prim(ap);
if (a == ENDSTATE)
return (ENDSTATE);
Ch = ap->Ch;
if (Ch == ALT || Ch == RBRACK || Ch == '\0') {
exits = join(aux, exits, a);
@@ -445,7 +582,7 @@ join(aux, a, b)
*/
EXPORT int
patcompile(pat, len, aux)
const CHAR *pat;
const PCHAR *pat;
int len;
int *aux;
{
@@ -467,4 +604,4 @@ patcompile(pat, len, aux)
setexits(aux, i, ENDSTATE);
return (alt);
}
#endif /* LMATCH */
#endif /* !defined(__LINE_MATCH) && !defined(__MB_CHAR) */