Commit 99024956 by Bruce Korb

Initial revision

From-SVN: r18731
parent 670ee920
## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
##
## Makefile for constructing the "best" include fixer we can
##
## $Id: Makefile,v 1.1 1998/03/20 16:19:41 korbb Exp $
##
## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
OBJ = fixincl.o server.o regex.o
HDR = server.h regex.h
## LIB = -lgen
SH_TARGET = inclhack.sh fixincl.sh
BIN_TARGET = fixincl
AG_TEXT = $(SH_TARGET) fixincl.x \
inclhack.def inclhack.tpl hackshell.tpl fixincl.tpl
TARGETS = $(SH_TARGET) $(BIN_TARGET)
default : fixincl.sh
all : $(TARGETS)
sh : $(SH_TARGET)
$(OBJ): $(HDR)
fixincl.o: fixincl.x
fixincl: $(OBJ)
if $(CC) -o $@ $(OBJ) $(LIB) ; then : ; else \
rm -f $@ ; echo false > $@ ; fi
regex.o: regex.c
$(CC) -g -DSTDC_HEADERS=1 -c regex.c
fixincl.x: fixincl.tpl inclhack.def
@if ( autogen --help > /dev/null 2>&1 ) ; then \
echo autogen -T fixincl.tpl -b fixincl inclhack.def ; \
autogen -T fixincl.tpl -b fixincl inclhack.def ; \
else echo You need to install autogen ; touch $@ ; fi
inclhack.sh: inclhack.def inclhack.tpl hackshell.tpl
@if ( autogen --help > /dev/null 2>&1 ) ; then \
echo autogen inclhack.def ; \
autogen inclhack.def ; \
else echo You need to install autogen ; touch $@ ; fi
fixincl.sh: inclhack.def inclhack.tpl fixincl inclhack.sh
@if ( ./fixincl -v > /dev/null 2>&1 ) ; then \
if ( autogen --help > /dev/null 2>&1 ) ; then \
echo autogen -DPROGRAM=1 -b fixincl inclhack.def ; \
autogen -DPROGRAM=1 -b fixincl inclhack.def ; touch $@ ; \
else echo You need to install autogen ; touch $@ ; fi ; \
else cp inclhack.sh $@ ; echo cp inclhack.sh $@ ; fi
clean:
rm -f *.o fixincl
install: fixincl.sh
@rm -f ../../gcc/fixincl.sh ; \
echo cp fixincl.sh ../../gcc ; \
cp fixincl.sh ../../gcc ; \
chmod +x ../../gcc/fixincl.sh
@echo check for fixincl copy...
@if ( ./fixincl -v > /dev/null 2>&1 ) ; then \
echo cp fixincl ../../gcc/fixincl ; \
cp fixincl ../../gcc/fixincl ; fi
/*
* $Id: fixincl.c,v 1.1 1998/03/20 16:19:41 korbb Exp $
*
* Install modified versions of certain ANSI-incompatible system header
* files which are fixed to work correctly with ANSI C and placed in a
* directory that GNU C will search.
*
* See README-fixinc for more information.
*
* fixincl is free software.
*
* You may redistribute it and/or modify it under the terms of the
* GNU General Public License, as published by the Free Software
* Foundation; either version 2, or (at your option) any later version.
*
* fixincl is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with fixincl. See the file "COPYING". If not,
* write to: The Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#include <sys/param.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/stropts.h>
#include <sys/wait.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <stropts.h>
#include <poll.h>
#include <fcntl.h>
#include <ctype.h>
#include "regex.h"
#include "server.h"
#define tSCC static const char
#define tCC const char
#define tSC static char
typedef int tSuccess;
#define FAILURE ((tSuccess)-1)
#define SUCCESS ((tSuccess) 0)
#define PROBLEM ((tSuccess) 1)
#define SUCCEEDED( p ) ((p) == SUCCESS)
#define SUCCESSFUL( p ) SUCCEEDED( p )
#define FAILED( p ) ((p) < SUCCESS)
#define HADGLITCH( p ) ((p) > SUCCESS)
#define NUL '\0'
typedef enum
{
TT_TEST, TT_EGREP, TT_NEGREP
}
teTestType;
typedef struct test_desc tTestDesc;
struct test_desc
{
teTestType type;
const char *pzTest;
regex_t *pTestRegex;
};
typedef enum
{
PATCH_SED, PATCH_SHELL
}
tePatch;
typedef struct patch_desc tPatchDesc;
typedef struct fix_desc tFixDesc;
struct fix_desc
{
const char *pzFixName;
const char *pzFileList;
regex_t *pListRegex;
int testCt;
tTestDesc *pTestDesc;
const char **papzPatchArgs;
};
char *pzDestDir = (char *) NULL;
char *pzSrcDir = (char *) NULL;
pid_t chainHead = (pid_t) - 1;
const char zInclQuote[] = "^[ \t]*#[ \t]*include[ \t]*\"[^/]";
regex_t inclQuoteRegex;
char zFileNameBuf[0x8000];
char *loadFile (const char *pzFile);
void process (char *data, const char *dir, const char *file);
void runCompiles (void);
#include "fixincl.x"
int
main (argc, argv)
int argc;
char **argv;
{
static const char zGnuLib[] =
"This file is part of the GNU C Library";
#ifndef NO_BOGOSITY_LIMITS
size_t loopCt;
#endif
char *apzNames[128];
size_t fileNameCt;
if (argc != 1)
{
if (argc != 2)
{
fputs ("fixincl ERROR: files specified on command line (not stdin)\n",
stderr);
exit (EXIT_FAILURE);
}
if (strcmp (argv[1], "-v") == 0)
{
fputs ("$Id: fixincl.c,v 1.1 1998/03/20 16:19:41 korbb Exp $\n", stderr);
exit (EXIT_SUCCESS);
}
freopen (argv[1], "r", stdin);
}
pzDestDir = getenv ("DESTDIR");
if (pzDestDir == (char *) NULL)
{
fprintf (stderr, "fixincl ERROR: %s cannot find destination dir\n"
"\t(`DESTDIR' must be an environment variable)\n", *argv);
exit (EXIT_FAILURE);
}
pzSrcDir = getenv ("SRCDIR");
if (pzSrcDir == (char *) NULL)
{
fprintf (stderr, "fixincl ERROR: %s cannot find source dir\n"
"\t(`SRCDIR' must be an environment variable)\n", *argv);
exit (EXIT_FAILURE);
}
runCompiles ();
#ifndef NO_BOGOSITY_LIMITS
for (;;)
{
char *pzBuf;
pid_t child;
/*
* Only the parent process can read from stdin without
* confusing the world. (How does the child tell the
* parent to skip forward? Pipes and files behave differently.)
*/
for (fileNameCt = 0, pzBuf = zFileNameBuf;
(fileNameCt < 128)
&& (pzBuf
< (zFileNameBuf + sizeof (zFileNameBuf) - MAXPATHLEN));
)
{
if (fgets (pzBuf, MAXPATHLEN, stdin) == (char *) NULL)
break;
while (isspace (*pzBuf))
pzBuf++;
apzNames[fileNameCt++] = pzBuf;
pzBuf += strlen (pzBuf);
while (isspace (pzBuf[-1]))
pzBuf--;
*pzBuf++ = '\0';
}
if (fileNameCt == 0)
return EXIT_SUCCESS;
child = fork ();
if (child == NULLPROCESS)
break;
if (child == NOPROCESS)
{
fprintf (stderr, "Error %d (%s) forking in main\n",
errno, strerror (errno));
exit (EXIT_FAILURE);
}
waitpid (child, (int *) NULL, 0);
}
#else
#error "NON-BOGUS LIMITS NOT SUPPORTED?!?!"
#endif
/*
* For every file specified in stdandard in
* (except as throttled for bogus reasons)...
*/
for (loopCt = 0; loopCt < fileNameCt; loopCt++)
{
char *pzData;
char *pzFile = apzNames[loopCt];
if (access (pzFile, R_OK) != 0)
{
int erno = errno;
fprintf (stderr, "Cannot access %s from %s\n\terror %d (%s)\n",
pzFile, getcwd ((char *) NULL, MAXPATHLEN),
erno, strerror (erno));
}
else if (pzData = loadFile (pzFile),
(pzData != (char *) NULL))
{
if (strstr (pzData, zGnuLib) == (char *) NULL)
process (pzData, pzDestDir, pzFile);
free ((void *) pzData);
}
}
return EXIT_SUCCESS;
}
char *
loadFile (pzFile)
const char *pzFile;
{
char *pzDta;
size_t fileSize;
{
struct stat stbf;
if (stat (pzFile, &stbf) != 0)
{
fprintf (stderr, "error %d (%s) stat-ing %s\n",
errno, strerror (errno), pzFile);
return (char *) NULL;
}
fileSize = stbf.st_size;
}
if (fileSize == 0)
return (char *) NULL;
pzDta = (char *) malloc ((fileSize + 16) & ~0x00F);
if (pzDta == (char *) NULL)
{
fprintf (stderr, "error: could not malloc %d bytes\n",
fileSize);
exit (EXIT_FAILURE);
}
{
FILE *fp = fopen (pzFile, "r");
size_t sizeLeft = fileSize;
char *readPtr = pzDta;
if (fp == (FILE *) NULL)
{
fprintf (stderr, "error %d (%s) opening %s\n", errno,
strerror (errno), pzFile);
free ((void *) pzDta);
return (char *) NULL;
}
do
{
size_t sizeRead = fread ((void *) readPtr, 1, sizeLeft, fp);
if (sizeRead == 0)
{
if (feof (fp))
break;
if (ferror (fp))
{
fprintf (stderr, "error %d (%s) reading %s\n", errno,
strerror (errno), pzFile);
free ((void *) pzDta);
fclose (fp);
return (char *) NULL;
}
}
readPtr += sizeRead;
sizeLeft -= sizeRead;
}
while (sizeLeft != 0);
*readPtr = '\0';
fclose (fp);
return pzDta;
}
}
void
runCompiles ()
{
tSCC zBadComp[] = "fixincl ERROR: cannot compile %s regex for %s\n"
"\texpr = `%s'\n" "\terror %s\n";
tFixDesc *pFD = fixDescList;
int fixCt = FIX_COUNT;
tTestDesc *pTD;
int tstCt;
int reCt = REGEX_COUNT;
const char *pzErr;
regex_t *pRegex = (regex_t *) malloc (REGEX_COUNT * sizeof (regex_t));
if (pRegex == (regex_t *) NULL)
{
fprintf (stderr, "fixincl ERROR: cannot allocate %d bytes for regex\n",
REGEX_COUNT * sizeof (regex_t));
exit (EXIT_FAILURE);
}
re_set_syntax (RE_SYNTAX_EGREP);
pzErr = re_compile_pattern (zInclQuote, strlen (zInclQuote),
&inclQuoteRegex);
if (pzErr != (char *) NULL)
{
fprintf (stderr, zBadComp, "quoted include", "runCompiles",
zInclQuote, pzErr);
exit (EXIT_FAILURE);
}
/*
* FOR every fixup, ...
*/
for (;;)
{
pTD = pFD->pTestDesc;
tstCt = pFD->testCt;
/*
* FOR every test for the fixup, ...
*/
while (--tstCt >= 0)
{
switch (pTD->type)
{
case TT_EGREP:
case TT_NEGREP:
if (--reCt < 0)
{
fputs ("out of RE's\n", stderr);
exit (EXIT_FAILURE);
}
pTD->pTestRegex = pRegex++;
pzErr = re_compile_pattern (pTD->pzTest,
strlen (pTD->pzTest),
pTD->pTestRegex);
if (pzErr != (char *) NULL)
{
fprintf (stderr, zBadComp, "select test", pFD->pzFixName,
pTD->pzTest, pzErr);
exit (EXIT_FAILURE);
}
}
pTD++;
}
if (--fixCt <= 0)
break;
pFD++;
}
}
FILE *
createFile (pzFile)
const char *pzFile;
{
int fd;
FILE *pf;
char fname[MAXPATHLEN];
sprintf (fname, "%s/%s", pzDestDir, pzFile);
unlink (fname);
fd = open (fname, O_WRONLY | O_CREAT);
if ((fd < 0) && (errno == ENOENT))
{
char *pzDir = strchr (fname + 1, '/');
struct stat stbf;
while (pzDir != (char *) NULL)
{
*pzDir = NUL;
if (stat (fname, &stbf) < 0)
{
mkdir (fname, S_IFDIR | S_IRWXU | S_IRGRP | S_IXGRP
| S_IROTH | S_IXOTH);
}
*pzDir = '/';
pzDir = strchr (pzDir + 1, '/');
}
fd = open (fname, O_WRONLY | O_CREAT);
}
if (fd < 0)
{
fprintf (stderr, "Error %d (%s) creating %s\n",
errno, strerror (errno), fname);
exit (EXIT_FAILURE);
}
fprintf (stderr, "Fixed: %s\n", pzFile);
pf = fdopen (fd, "w");
#ifdef LATER
{
static const char zHdr[] =
"/*\n"
" * DO NOT EDIT THIS FILE.\n"
" *\n"
" * It has been auto-edited by fixincludes from /usr/include/%s\n"
" * This had to be done to correct non-standard usages in the\n"
" * original, manufacturer supplied header file.\n"
" */\n\n";
fprintf (pf, zHdr, pzFile);
}
#endif
return pf;
}
tSuccess
testTest (pTest)
tTestDesc *pTest;
{
char *pzRes;
tSuccess res = FAILURE;
static char zCmdBuf[4096];
tSCC zCmdFmt[] = "if ( test %s ) > /dev/null 2>&1\n"
"then echo TRUE\n" "else echo FALSE\n" "fi";
sprintf (zCmdBuf, zCmdFmt, pTest->pzTest);
pzRes = runShell (zCmdBuf);
if (*pzRes == 'T')
res = SUCCESS;
free ((void *) pzRes);
return res;
}
tSuccess
egrepTest (pzDta, pTest)
char *pzDta;
tTestDesc *pTest;
{
regmatch_t match;
#ifndef NO_BOGOSITY
if (pTest->pTestRegex == 0)
fprintf (stderr, "fixincl ERROR RE not compiled: `%s'\n", pTest->pzTest);
#endif
if (regexec (pTest->pTestRegex, pzDta, 1, &match, 0) == 0)
return SUCCESS;
return FAILURE;
}
void
extractQuotedFiles (pzDta, pzFile, pMatch)
char *pzDta;
const char *pzFile;
regmatch_t *pMatch;
{
char *pzDirEnd = strrchr (pzFile, '/');
char *pzInclQuot = pzDta;
fprintf (stderr, "Quoted includes in %s\n", pzFile);
/*
* Set "pzFile" to point to the containing subdirectory of the source
* If there is none, then it is in our current direcory, ".".
*/
if (pzDirEnd == (char *) NULL)
pzFile = ".";
else
*pzDirEnd = '\0';
for (;;)
{
pzInclQuot += pMatch->rm_so;
/*
* Skip forward to the included file name
*/
while (isspace (*pzInclQuot))
pzInclQuot++;
while (isspace (*++pzInclQuot));
pzInclQuot += sizeof ("include") - 1;
while (*pzInclQuot++ != '"');
/*
* Print the source directory and the subdirectory of the file
* in question.
*/
printf ("%s %s/", pzSrcDir, pzFile);
pzDirEnd = pzInclQuot;
/*
* Append to the directory the relative path of the desired file
*/
while (*pzInclQuot != '"')
putc (*pzInclQuot++, stdout);
/*
* Now print the destination directory appended with the relative
* path of the desired file
*/
printf (" %s/%s/", pzDestDir, pzFile);
while (*pzDirEnd != '"')
putc (*pzDirEnd++, stdout);
/*
* End of entry
*/
putc ('\n', stdout);
/*
* Find the next entry
*/
if (regexec (&inclQuoteRegex, pzInclQuot, 1, pMatch, 0) != 0)
break;
}
}
/*
* Process the potential fixes for a particular include file
*/
void
process (pzDta, pzDir, pzFile)
char *pzDta;
const char *pzDir;
const char *pzFile;
{
static char zEnvFile[1024] =
{"file="};
tFixDesc *pFD = fixDescList;
int todoCt = FIX_COUNT;
tFdPair fdp =
{-1, -1};
/*
* IF this is the first time through,
* THEN put the 'file' environment variable into the environment.
* This is used by some of the subject shell scripts and tests.
*/
if (zEnvFile[5] == NUL)
putenv (zEnvFile);
/*
* Ghastly as it is, this actually updates the value of the variable:
*
* putenv(3C) C Library Functions putenv(3C)
*
* DESCRIPTION
* putenv() makes the value of the environment variable name
* equal to value by altering an existing variable or creating
* a new one. In either case, the string pointed to by string
* becomes part of the environment, so altering the string will
* change the environment. string points to a string of the
* form ``name=value.'' The space used by string is no longer
* used once a new string-defining name is passed to putenv().
*/
strcpy (zEnvFile + 5, pzFile);
chainHead = NOPROCESS;
/*
* For every fix in our fix list, ...
*/
for (; todoCt > 0; pFD++, todoCt--)
{
tTestDesc *pTD;
int tstCt;
tSuccess egrepRes;
/*
* IF there is a file name restriction,
* THEN ensure the current file name matches one in the pattern
*/
if (pFD->pzFileList != (char *) NULL)
{
const char *pzFil = pzFile;
const char *pzScn = pFD->pzFileList;
size_t nmLen;
while ((pzFil[0] == '.') && (pzFil[1] == '/'))
pzFil += 2;
nmLen = strlen (pzFil);
for (;;)
{
pzScn = strstr (pzScn + 1, pzFil);
if (pzScn == (char *) NULL)
goto nextFix;
if ((pzScn[-1] == '|') && (pzScn[nmLen] == '|'))
break;
}
}
egrepRes = PROBLEM;
/*
* IF there are no tests
* THEN we always run the fixup
*/
for (pTD = pFD->pTestDesc, tstCt = pFD->testCt;
tstCt-- > 0;
pTD++)
{
switch (pTD->type)
{
case TT_TEST:
/*
* IF *any* of the shell tests fail,
* THEN do not process the fix.
*/
if (!SUCCESSFUL (testTest (pTD)))
goto nextFix;
break;
case TT_EGREP:
/*
* IF we have not had a successful egrep test
* *AND* this test does not pass,
* THEN mark the egrep test as failing. It starts
* out as a "PROBLEM", meaning that if we do not
* encounter any egrep tests, then we will let it pass.
*/
if ((!SUCCESSFUL (egrepRes))
&& (!SUCCESSFUL (egrepTest (pzDta, pTD))))
egrepRes = FAILURE;
break;
case TT_NEGREP:
/*
* IF *any* of the negative egrep tests fail,
* THEN do not process the fix.
*/
if (SUCCESSFUL (egrepTest (pzDta, pTD)))
goto nextFix;
break;
}
}
/*
* IF there were no egrep tests *OR* at least one passed, ...
*/
if (!FAILED (egrepRes))
{
fprintf (stderr, "Applying %-32s to %s\n",
pFD->pzFixName, pzFile);
if (fdp.readFd == -1)
{
fdp.readFd = open (pzFile, O_RDONLY);
if (fdp.readFd < 0)
{
fprintf (stderr, "Error %d (%s) opening %s\n", errno,
strerror (errno), pzFile);
exit (EXIT_FAILURE);
}
}
for (;;)
{
int newFd = chainOpen (fdp.readFd,
(tpChar *) pFD->papzPatchArgs,
(chainHead == -1)
? &chainHead : (pid_t *) NULL);
if (newFd != -1)
{
fdp.readFd = newFd;
break;
}
fprintf (stderr, "Error %d (%s) starting filter process "
"for %s\n", errno, strerror (errno),
pFD->pzFixName);
if (errno != EAGAIN)
exit (EXIT_FAILURE);
sleep (1);
}
}
nextFix:;
}
/*
* IF after all the tests we did not start any patch programs,
* THEN quit now.
*/
if (fdp.readFd < 0)
return;
{
FILE *inFp = fdopen (fdp.readFd, "r");
FILE *oFp = (FILE *) NULL;
char *pzCmp = pzDta;
for (;;)
{
int ch;
ch = getc (inFp);
if (ch == EOF)
break;
if (oFp != (FILE *) NULL)
putc (ch, oFp);
else if (ch != *pzCmp)
{
oFp = createFile (pzFile);
if (pzCmp != pzDta)
{
char c = *pzCmp;
*pzCmp = NUL;
fputs (pzDta, oFp);
*pzCmp = c;
}
putc (ch, oFp);
}
else
pzCmp++;
}
if (oFp != (FILE *) NULL)
{
regmatch_t match;
fchmod (fileno (oFp), S_IRUSR | S_IRGRP | S_IROTH);
fclose (oFp);
if (regexec (&inclQuoteRegex, pzDta, 1, &match, 0) == 0)
extractQuotedFiles (pzDta, pzFile, &match);
}
fclose (inFp);
}
close (fdp.readFd);
}
#!/bin/sh -p
#
# DO NOT EDIT THIS FILE (fixincl.sh)
#
# It has been autogen-ed Thursday March 19, 1998 at 08:37:00 AM PST
# From the definitions inclhack.def
# and the template file inclhack.tpl
#
# Install modified versions of certain ANSI-incompatible system header
# files which are fixed to work correctly with ANSI C and placed in a
# directory that GNU C will search.
#
# This script contains 101 fixup scripts.
#
# See README-fixinc for more information.
#
# inclhack is free software.
#
# You may redistribute it and/or modify it under the terms of the
# GNU General Public License, as published by the Free Software
# Foundation; either version 2, or (at your option) any later version.
#
# inclhack is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with inclhack. See the file "COPYING". If not,
# write to: The Free Software Foundation, Inc.,
# 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#
# # # # # # # # # # # # # # # # # # # # #
#
# Directory containing the original header files.
# (This was named INCLUDES, but that conflicts with a name in Makefile.in.)
#
INPUT=${2-${INPUT-/usr/include}}
( \cd ${INPUT} > /dev/null 2>&1 ) || {
echo 'fixincludes: input dir `'$INPUT"' is an invalid directory"
exit 1
}
# # # # # # # # # # # # # # # # # # # # #
#
# Directory in which to store the results.
# Fail if no arg to specify a directory for the output.
if [ "x$1" = "x" ]
then echo fixincludes: no output directory specified
exit 1
fi
LIB=${1}
# Make sure it exists.
if [ ! -d $LIB ]; then
mkdir $LIB || {
echo fixincludes: output dir '`'$LIB"' cannot be created"
exit 1
}
else
( \cd $LIB && touch DONE && rm DONE ) || {
echo fixincludes: output dir '`'$LIB"' is an invalid directory"
exit 1
}
fi
# Define what target system we're fixing.
#
if test -r ./Makefile; then
target_canonical="`sed -n -e 's,^target[ ]*=[ ]*\(.*\)$,\1,p' < Makefile`"
fi
# If not from the Makefile, then try config.guess
#
if test -z "${target_canonical}" ; then
if test -x ./config.guess ; then
target_canonical="`config.guess`" ; fi
test -z "${target_canonical}" && target_canonical=unknown
fi
# # # # # # # # # # # # # # # # # # # # #
#
# Define PWDCMD as a command to use to get the working dir
# in the form that we want.
PWDCMD=pwd
case "`$PWDCMD`" in
//*)
# On an Apollo, discard everything before `/usr'.
PWDCMD="eval pwd | sed -e 's,.*/usr/,/usr/,'"
;;
esac
# Original directory.
ORIGDIR=`${PWDCMD}`
FIXINCL=${ORIGDIR}/fixincl
export FIXINCL
# Make LIB absolute only if needed to avoid problems with the amd.
case $LIB in
/*)
;;
*)
cd $LIB; LIB=`${PWDCMD}`
;;
esac
echo Building fixed headers in ${LIB}
# Determine whether this system has symbolic links.
if ln -s X $LIB/ShouldNotExist 2>/dev/null; then
rm -f $LIB/ShouldNotExist
LINKS=true
elif ln -s X /tmp/ShouldNotExist 2>/dev/null; then
rm -f /tmp/ShouldNotExist
LINKS=true
else
LINKS=false
fi
# # # # # # # # # # # # # # # # # # # # #
#
echo Finding directories and links to directories
cd ${INPUT}
# Find all directories and all symlinks that point to directories.
# Put the list in $files.
# Each time we find a symlink, add it to newdirs
# so that we do another find within the dir the link points to.
# Note that $files may have duplicates in it;
# later parts of this file are supposed to ignore them.
dirs="."
levels=2
while [ -n "$dirs" ] && [ $levels -gt 0 ]
do
levels=`expr $levels - 1`
newdirs=
for d in $dirs
do
echo " Searching $INPUT/$d"
# Find all directories under $d, relative to $d, excluding $d itself.
# (The /. is needed after $d in case $d is a symlink.)
files="$files `find $d/. -type d -print | \
sed -e '/\/\.$/d' -e 's@/./@/@g'`"
# Find all links to directories.
# Using `-exec test -d' in find fails on some systems,
# and trying to run test via sh fails on others,
# so this is the simplest alternative left.
# First find all the links, then test each one.
theselinks=
$LINKS && \
theselinks=`find $d/. -type l -print | sed -e 's@/./@/@g'`
for d1 in $theselinks --dummy--
do
# If the link points to a directory,
# add that dir to $newdirs
if [ -d $d1 ]
then
files="$files $d1"
if [ "`ls -ld $d1 | sed -n 's/.*-> //p'`" != "." ]
then
newdirs="$newdirs $d1"
fi
fi
done
done
dirs="$newdirs"
done
# # # # # # # # # # # # # # # # # # # # #
#
dirs=
echo "All directories (including links to directories):"
echo $files
for file in $files; do
rm -rf $LIB/$file
if [ ! -d $LIB/$file ]
then mkdir $LIB/$file
fi
done
mkdir $LIB/root
# # # # # # # # # # # # # # # # # # # # #
#
# treetops gets an alternating list
# of old directories to copy
# and the new directories to copy to.
treetops="${INPUT} ${LIB}"
if $LINKS; then
echo 'Making symbolic directory links'
for file in $files; do
dest=`ls -ld $file | sed -n 's/.*-> //p'`
if [ "$dest" ]; then
cwd=`${PWDCMD}`
# In case $dest is relative, get to $file's dir first.
cd ${INPUT}
cd `echo ./$file | sed -n 's&[^/]*$&&p'`
# Check that the target directory exists.
# Redirections changed to avoid bug in sh on Ultrix.
(cd $dest) > /dev/null 2>&1
if [ $? = 0 ]; then
cd $dest
# X gets the dir that the link actually leads to.
x=`${PWDCMD}`
# Canonicalize ${INPUT} now to minimize the time an
# automounter has to change the result of ${PWDCMD}.
cinput=`cd ${INPUT}; ${PWDCMD}`
# If a link points to ., make a similar link to .
if [ $x = ${cinput} ]; then
echo $file '->' . ': Making link'
rm -fr ${LIB}/$file > /dev/null 2>&1
ln -s . ${LIB}/$file > /dev/null 2>&1
# If link leads back into ${INPUT},
# make a similar link here.
elif expr $x : "${cinput}/.*" > /dev/null; then
# Y gets the actual target dir name, relative to ${INPUT}.
y=`echo $x | sed -n "s&${cinput}/&&p"`
# DOTS is the relative path from ${LIB}/$file's dir back to ${LIB}.
dots=`echo "$file" |
sed -e 's@^./@@' -e 's@/./@/@g' -e 's@[^/][^/]*@..@g' -e 's@..$@@'`
echo $file '->' $dots$y ': Making link'
rm -fr ${LIB}/$file > /dev/null 2>&1
ln -s $dots$y ${LIB}/$file > /dev/null 2>&1
else
# If the link is to a dir $target outside ${INPUT},
# repoint the link at ${INPUT}/root$target
# and process $target into ${INPUT}/root$target
# treat this directory as if it actually contained the files.
echo $file '->' root$x ': Making link'
if [ -d $LIB/root$x ]
then true
else
dirname=root$x/
dirmade=.
cd $LIB
while [ x$dirname != x ]; do
component=`echo $dirname | sed -e 's|/.*$||'`
mkdir $component >/dev/null 2>&1
cd $component
dirmade=$dirmade/$component
dirname=`echo $dirname | sed -e 's|[^/]*/||'`
done
fi
# Duplicate directory structure created in ${LIB}/$file in new
# root area.
for file2 in $files; do
case $file2 in
$file/*)
dupdir=${LIB}/root$x/`echo $file2 | sed -n "s|^${file}/||p"`
echo "Duplicating ${file}'s ${dupdir}"
if [ -d ${dupdir} ]
then true
else
mkdir ${dupdir}
fi
;;
*)
;;
esac
done
# Get the path from ${LIB} to $file, accounting for symlinks.
parent=`echo "$file" | sed -e 's@/[^/]*$@@'`
libabs=`cd ${LIB}; ${PWDCMD}`
file2=`cd ${LIB}; cd $parent; ${PWDCMD} | sed -e "s@^${libabs}@@"`
# DOTS is the relative path from ${LIB}/$file's dir back to ${LIB}.
dots=`echo "$file2" | sed -e 's@/[^/]*@../@g'`
rm -fr ${LIB}/$file > /dev/null 2>&1
ln -s ${dots}root$x ${LIB}/$file > /dev/null 2>&1
treetops="$treetops $x ${LIB}/root$x"
fi
fi
cd $cwd
fi
done
fi
# # # # # # # # # # # # # # # # # # # # #
#
required=
set x $treetops
shift
while [ $# != 0 ]; do
# $1 is an old directory to copy, and $2 is the new directory to copy to.
#
SRCDIR=`cd ${INPUT} ; cd $1 ; ${PWDCMD}`
export SRCDIR
shift
DESTDIR=`cd $1;${PWDCMD}`
export DESTDIR
shift
# The same dir can appear more than once in treetops.
# There's no need to scan it more than once.
#
if [ -f ${DESTDIR}/DONE ]
then continue ; fi
touch ${DESTDIR}/DONE
echo Fixing directory ${SRCDIR} into ${DESTDIR}
# Check .h files which are symlinks as well as those which are files.
# A link to a header file will not be processed by anything but this.
#
cd ${SRCDIR}
required="$required `if $LINKS; then
find . -name '*.h' \( -type f -o -type l \) -print
else
find . -name '*.h' -type f -print
fi | ${FIXINCL}`"
done
## Make sure that any include files referenced using double quotes
## exist in the fixed directory. This comes last since otherwise
## we might end up deleting some of these files "because they don't
## need any change."
set x `echo $required`
shift
while [ $# != 0 ]; do
newreq=
while [ $# != 0 ]; do
# $1 is the directory to copy from,
# $2 is the unfixed file,
# $3 is the fixed file name.
#
cd ${INPUT}
cd $1
if [ -r $2 ] && [ ! -r $3 ]; then
cp $2 $3 >/dev/null 2>&1 || echo "Can't copy $2" >&2
chmod +w $3 2>/dev/null
chmod a+r $3 2>/dev/null
echo Copied $2
for include in `egrep '^[ ]*#[ ]*include[ ]*"[^/]' $3 |
sed -e 's/^[ ]*#[ ]*include[ ]*"\([^"]*\)".*$/\1/'`
do
dir=`echo $2 | sed -e s'|/[^/]*$||'`
dir2=`echo $3 | sed -e s'|/[^/]*$||'`
newreq="$newreq $1 $dir/$include $dir2/$include"
done
fi
shift; shift; shift
done
set x $newreq
shift
done
echo 'Cleaning up DONE files.'
cd $LIB
find . -name DONE -exec rm -f '{}' ';'
echo 'Removing unneeded directories:'
cd $LIB
files=`find . -type d -print | sort -r`
for file in $files; do
rmdir $LIB/$file > /dev/null 2>&1
done
[= autogen template -*- Mode: C -*-
x =]
/*
[= _eval "# * " _DNE =]
*
* Install modified versions of certain ANSI-incompatible system header
* files which are fixed to work correctly with ANSI C and placed in a
* directory that GNU C will search.
*
* This script contains [=_eval fix _hilim 1 +=] fixup scripts.
*
* See README-fixinc for more information.
*
[=_eval inclhack "# * " _gpl=]
*[=
_FOR fix =]
*
* Description [=_eval _index 1 + "#%3d -" _printf=] [=hackname _Cap=] fix
*/
tSCC z[=hackname _cap=]Name[] =
[=hackname _cap _str=];
/*
* File name selection pattern
*/[=
_IF files _exist=]
tSCC z[=hackname _cap=]List[] =[=
_FOR files=]
"|" [=files _str=][=
/files=] "|";[=
_ELSE =]
#define z[=hackname _cap=]List (char*)NULL[=
_ENDIF "files _exist" =][=
_IF exesel _exist=]
/*
* content selection pattern
*/[=
_FOR exesel =]
tSCC z[=hackname _cap=]Select[=_eval _index=][] =
[=exesel _str=];[=
/exesel =][=
_ELIF select _exist=]
/*
* content selection pattern
*/[=
_FOR select =]
tSCC z[=hackname _cap=]Select[=_eval _index=][] =
[=select _str=];[=
/select =][=
_ENDIF =][=
_IF bypass _exist=]
/*
* content bypass pattern
*/[=
_FOR bypass =]
tSCC z[=hackname _cap=]Bypass[=_eval _index=][] =
[=bypass _str=];[=
/bypass =][=
_ENDIF =][=
_IF test _exist=]
/*
* content test pattern. A shell will deal with it later.
*/[=
_FOR test =]
tSCC z[=hackname _cap=]Test[=_eval _index=][] =
[=test _str=];[=
/test =][=
_ENDIF =][=
_IF exesel _exist select _exist bypass _exist test _exist | | |
=]
#define [=hackname _up =]_TEST_CT [=
_IF exesel _exist =][=
_eval test _count bypass _count exesel _count + + =][=
_ELSE =][=
_eval test _count bypass _count select _count + + =][=
_ENDIF =]
tTestDesc a[=hackname _cap=]Tests[] = {[=
_IF test _exist =][=
_FOR test=]
{ TT_TEST, z[=hackname _cap=]Test[=_eval _index=], 0 /* unused */ },[=
/test =][=
_ENDIF =][=
_IF bypass _exist =][=
_FOR bypass=]
{ TT_NEGREP, z[=hackname _cap=]Bypass[=_eval _index=], (regex_t*)NULL },[=
/bypass =][=
_ENDIF =][=
_IF exesel _exist =][=
_FOR exesel ,=]
{ TT_EGREP, z[=hackname _cap=]Select[=_eval _index=], (regex_t*)NULL }[=
/exesel =][=
_ELIF select _exist =][=
_FOR select ,=]
{ TT_EGREP, z[=hackname _cap=]Select[=_eval _index=], (regex_t*)NULL }[=
/select =][=
_ENDIF =] };[=
_ELSE =]
#define [=hackname _up=]_TEST_CT 0
#define a[=hackname _cap=]Tests (tTestDesc*)NULL[=
_ENDIF =]
/*
* Fix Command Arguments for [=hackname _cap=]
*/
const char* apz[=hackname _cap=]Patch[] = {[=
_IF sed _exist =] "sed"[=_FOR sed=],
"-e" [=sed _str=][=/sed=][=
_ELIF replacement _exist =] "sed",
"s@[=select[]=]@[=replacement=]@"[=
_ELIF shell _exist =] "sh", "-c",
[=shell _str=][=
_ELSE =][=_ERROR hackname _get "Error: %s has two fixup specifications"
_printf =][=
_ENDIF=],
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *[=
/fix=]
*
* List of all fixes
*/
#define REGEX_COUNT [=_eval fix.select _count
fix.bypass _count + =]
#define FIX_COUNT [=_eval fix _count =]
tFixDesc fixDescList[ [=_eval fix _count =] ] = {[=
_FOR fix ",\n" =]
{ z[=hackname _cap=]Name, z[=hackname _cap=]List, (regex_t*)NULL,
[=hackname _up=]_TEST_CT, a[=hackname _cap=]Tests,
apz[=hackname _cap=]Patch }[=
/fix=]
};
/*
* DO NOT EDIT THIS FILE (fixincl.x)
*
* It has been autogen-ed Thursday March 19, 1998 at 08:34:20 AM PST
* From the definitions inclhack.def
* and the template file fixincl.tpl
*
* Install modified versions of certain ANSI-incompatible system header
* files which are fixed to work correctly with ANSI C and placed in a
* directory that GNU C will search.
*
* This script contains 101 fixup scripts.
*
* See README-fixinc for more information.
*
* inclhack is free software.
*
* You may redistribute it and/or modify it under the terms of the
* GNU General Public License, as published by the Free Software
* Foundation; either version 2, or (at your option) any later version.
*
* inclhack is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with inclhack. See the file "COPYING". If not,
* write to: The Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
*
* Description 1 - Aix_Syswait fix
*/
tSCC zAix_SyswaitName[] =
"Aix_Syswait";
/*
* File name selection pattern
*/
tSCC zAix_SyswaitList[] =
"|" "sys/wait.h" "|";
/*
* content selection pattern
*/
tSCC zAix_SyswaitSelect0[] =
"bos325,";
#define AIX_SYSWAIT_TEST_CT 1
tTestDesc aAix_SyswaitTests[] = {
{ TT_EGREP, zAix_SyswaitSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Aix_Syswait
*/
const char* apzAix_SyswaitPatch[] = { "sed",
"-e" "/^extern pid_t wait3();$/i\\\n"
"struct rusage;",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 2 - Aix_Volatile fix
*/
tSCC zAix_VolatileName[] =
"Aix_Volatile";
/*
* File name selection pattern
*/
tSCC zAix_VolatileList[] =
"|" "sys/signal.h" "|";
/*
* content selection pattern
*/
tSCC zAix_VolatileSelect0[] =
"typedef volatile int sig_atomic_t";
#define AIX_VOLATILE_TEST_CT 1
tTestDesc aAix_VolatileTests[] = {
{ TT_EGREP, zAix_VolatileSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Aix_Volatile
*/
const char* apzAix_VolatilePatch[] = { "sed",
"-e" "s/typedef volatile int sig_atomic_t/typedef int sig_atomic_t/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 3 - Alpha_Getopt fix
*/
tSCC zAlpha_GetoptName[] =
"Alpha_Getopt";
/*
* File name selection pattern
*/
tSCC zAlpha_GetoptList[] =
"|" "stdio.h"
"|" "stdlib.h" "|";
/*
* content selection pattern
*/
tSCC zAlpha_GetoptSelect0[] =
"getopt\\(int, char \\*\\[";
#define ALPHA_GETOPT_TEST_CT 1
tTestDesc aAlpha_GetoptTests[] = {
{ TT_EGREP, zAlpha_GetoptSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Alpha_Getopt
*/
const char* apzAlpha_GetoptPatch[] = { "sed",
"-e" "s/getopt(int, char \\*\\[\\],[ ]*char \\*)/getopt(int, char *const[], const char *)/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 4 - Alpha_Parens fix
*/
tSCC zAlpha_ParensName[] =
"Alpha_Parens";
/*
* File name selection pattern
*/
tSCC zAlpha_ParensList[] =
"|" "sym.h" "|";
/*
* content selection pattern
*/
tSCC zAlpha_ParensSelect0[] =
"#ifndef\\(__mips64\\)";
#define ALPHA_PARENS_TEST_CT 1
tTestDesc aAlpha_ParensTests[] = {
{ TT_EGREP, zAlpha_ParensSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Alpha_Parens
*/
const char* apzAlpha_ParensPatch[] = { "sed",
"-e" "s/#ifndef(__mips64)/#ifndef __mips64/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 5 - Alpha_Sbrk fix
*/
tSCC zAlpha_SbrkName[] =
"Alpha_Sbrk";
/*
* File name selection pattern
*/
tSCC zAlpha_SbrkList[] =
"|" "unistd.h" "|";
/*
* content selection pattern
*/
tSCC zAlpha_SbrkSelect0[] =
"char[ \t]*\\*[\t ]*sbrk[ \t]*\\(";
#define ALPHA_SBRK_TEST_CT 1
tTestDesc aAlpha_SbrkTests[] = {
{ TT_EGREP, zAlpha_SbrkSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Alpha_Sbrk
*/
const char* apzAlpha_SbrkPatch[] = { "sed",
"-e" "s/char\\([ \t]*\\*[\t ]*sbrk[ \t]*(\\)/void\\1/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 6 - Arm_Norcroft_Hint fix
*/
tSCC zArm_Norcroft_HintName[] =
"Arm_Norcroft_Hint";
/*
* File name selection pattern
*/
tSCC zArm_Norcroft_HintList[] =
"|" "X11/Intrinsic.h" "|";
#define ARM_NORCROFT_HINT_TEST_CT 0
#define aArm_Norcroft_HintTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Arm_Norcroft_Hint
*/
const char* apzArm_Norcroft_HintPatch[] = { "sed",
"-e" "s/___type p_type/p_type/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 7 - Arm_Wchar fix
*/
tSCC zArm_WcharName[] =
"Arm_Wchar";
/*
* File name selection pattern
*/
tSCC zArm_WcharList[] =
"|" "stdlib.h" "|";
/*
* content selection pattern
*/
tSCC zArm_WcharSelect0[] =
"#[ \t]*define[ \t]*__wchar_t";
#define ARM_WCHAR_TEST_CT 1
tTestDesc aArm_WcharTests[] = {
{ TT_EGREP, zArm_WcharSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Arm_Wchar
*/
const char* apzArm_WcharPatch[] = { "sed",
"-e" "s/\\(#[ \t]*ifndef[ \t]*\\)__wchar_t/\\1_GCC_WCHAR_T/",
"-e" "s/\\(#[ \t]*define[ \t]*\\)__wchar_t/\\1_GCC_WCHAR_T/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 8 - Aux_Asm fix
*/
tSCC zAux_AsmName[] =
"Aux_Asm";
/*
* File name selection pattern
*/
tSCC zAux_AsmList[] =
"|" "sys/param.h" "|";
/*
* content selection pattern
*/
tSCC zAux_AsmSelect0[] =
"#ifndef NOINLINE";
#define AUX_ASM_TEST_CT 1
tTestDesc aAux_AsmTests[] = {
{ TT_EGREP, zAux_AsmSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Aux_Asm
*/
const char* apzAux_AsmPatch[] = { "sed",
"-e" "s|#ifndef NOINLINE|#if !defined(NOINLINE) \\&\\& !defined(__GNUC__)|",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 9 - Avoid_Bool fix
*/
tSCC zAvoid_BoolName[] =
"Avoid_Bool";
/*
* File name selection pattern
*/
tSCC zAvoid_BoolList[] =
"|" "curses.h" "|";
#define AVOID_BOOL_TEST_CT 0
#define aAvoid_BoolTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Avoid_Bool
*/
const char* apzAvoid_BoolPatch[] = { "sed",
"-e" "/^#[ \t]*define[ \t][ \t]*bool[ \t][ \t]*char[ \t]*$/i\\\n"
"#ifndef __cplusplus",
"-e" "/^#[ \t]*define[ \t][ \t]*bool[ \t][ \t]*char[ \t]*$/a\\\n"
"#endif",
"-e" "/^typedef[ \t][ \t]*char[ \t][ \t]*bool[ \t]*;/i\\\n"
"#ifndef __cplusplus",
"-e" "/^typedef[ \t][ \t]*char[ \t][ \t]*bool[ \t]*;/a\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 10 - Bad_Malloc_Decl fix
*/
tSCC zBad_Malloc_DeclName[] =
"Bad_Malloc_Decl";
/*
* File name selection pattern
*/
tSCC zBad_Malloc_DeclList[] =
"|" "rpc/types.h" "|";
/*
* content bypass pattern
*/
tSCC zBad_Malloc_DeclBypass0[] =
"\"C\"";
#define BAD_MALLOC_DECL_TEST_CT 1
tTestDesc aBad_Malloc_DeclTests[] = {
{ TT_NEGREP, zBad_Malloc_DeclBypass0, (regex_t*)NULL }, };
/*
* Fix Command Arguments for Bad_Malloc_Decl
*/
const char* apzBad_Malloc_DeclPatch[] = { "sed",
"-e" "1i\\\n"
"#ifdef __cplusplus\\\n"
"extern \"C\" {\\\n"
"#endif\\\n"
"",
"-e" "$a\\\n"
"#ifdef __cplusplus\\\n"
"}\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 11 - Bad_Struct_Term fix
*/
tSCC zBad_Struct_TermName[] =
"Bad_Struct_Term";
/*
* File name selection pattern
*/
tSCC zBad_Struct_TermList[] =
"|" "curses.h" "|";
/*
* content selection pattern
*/
tSCC zBad_Struct_TermSelect0[] =
"^[ \t]*typedef[ \t]+struct[ \t]+term[ \t]*;";
#define BAD_STRUCT_TERM_TEST_CT 1
tTestDesc aBad_Struct_TermTests[] = {
{ TT_EGREP, zBad_Struct_TermSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Bad_Struct_Term
*/
const char* apzBad_Struct_TermPatch[] = { "sed",
"-e" "s/^[ \t]*typedef[ \t][ \t]*\\(struct[ \t][ \t]*term[ \t]*;[ \t]*\\)$/\\1/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 12 - Badquote fix
*/
tSCC zBadquoteName[] =
"Badquote";
/*
* File name selection pattern
*/
tSCC zBadquoteList[] =
"|" "sundev/vuid_event.h" "|";
#define BADQUOTE_TEST_CT 0
#define aBadquoteTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Badquote
*/
const char* apzBadquotePatch[] = { "sed",
"-e" "s/doesn't/does not/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 13 - Broken_Assert_Stdio fix
*/
tSCC zBroken_Assert_StdioName[] =
"Broken_Assert_Stdio";
/*
* File name selection pattern
*/
tSCC zBroken_Assert_StdioList[] =
"|" "assert.h" "|";
/*
* content selection pattern
*/
tSCC zBroken_Assert_StdioSelect0[] =
"stderr";
/*
* content bypass pattern
*/
tSCC zBroken_Assert_StdioBypass0[] =
"include.*stdio.h";
#define BROKEN_ASSERT_STDIO_TEST_CT 2
tTestDesc aBroken_Assert_StdioTests[] = {
{ TT_NEGREP, zBroken_Assert_StdioBypass0, (regex_t*)NULL },
{ TT_EGREP, zBroken_Assert_StdioSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Broken_Assert_Stdio
*/
const char* apzBroken_Assert_StdioPatch[] = { "sed",
"-e" "1i\\\n"
"#include <stdio.h>",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 14 - Broken_Assert_Stdlib fix
*/
tSCC zBroken_Assert_StdlibName[] =
"Broken_Assert_Stdlib";
/*
* File name selection pattern
*/
tSCC zBroken_Assert_StdlibList[] =
"|" "assert.h" "|";
/*
* content selection pattern
*/
tSCC zBroken_Assert_StdlibSelect0[] =
"exit *\\(|abort *\\(";
/*
* content bypass pattern
*/
tSCC zBroken_Assert_StdlibBypass0[] =
"include.*stdlib.h";
#define BROKEN_ASSERT_STDLIB_TEST_CT 2
tTestDesc aBroken_Assert_StdlibTests[] = {
{ TT_NEGREP, zBroken_Assert_StdlibBypass0, (regex_t*)NULL },
{ TT_EGREP, zBroken_Assert_StdlibSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Broken_Assert_Stdlib
*/
const char* apzBroken_Assert_StdlibPatch[] = { "sed",
"-e" "1i\\\n"
"#ifdef __cplusplus\\\n"
"#include <stdlib.h>\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 15 - Bsd43_Io_Macros fix
*/
tSCC zBsd43_Io_MacrosName[] =
"Bsd43_Io_Macros";
/*
* File name selection pattern
*/
#define zBsd43_Io_MacrosList (char*)NULL
/*
* content selection pattern
*/
tSCC zBsd43_Io_MacrosSelect0[] =
"BSD43__IO";
#define BSD43_IO_MACROS_TEST_CT 1
tTestDesc aBsd43_Io_MacrosTests[] = {
{ TT_EGREP, zBsd43_Io_MacrosSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Bsd43_Io_Macros
*/
const char* apzBsd43_Io_MacrosPatch[] = { "sed",
"-e" "/[ \t]BSD43__IO[A-Z]*[ \t]*(/s/(\\(.\\),/('\\1',/",
"-e" "/#[ \t]*define[ \t]*[ \t]BSD43__IO/s/'\\([cgx]\\)'/\\1/g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 16 - Cxx_Cmnt_Hpux fix
*/
tSCC zCxx_Cmnt_HpuxName[] =
"Cxx_Cmnt_Hpux";
/*
* File name selection pattern
*/
tSCC zCxx_Cmnt_HpuxList[] =
"|" "sys/pci.h" "|";
/*
* content selection pattern
*/
tSCC zCxx_Cmnt_HpuxSelect0[] =
"System Private Structures";
#define CXX_CMNT_HPUX_TEST_CT 1
tTestDesc aCxx_Cmnt_HpuxTests[] = {
{ TT_EGREP, zCxx_Cmnt_HpuxSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Cxx_Cmnt_Hpux
*/
const char* apzCxx_Cmnt_HpuxPatch[] = { "sed",
"-e" "s|//.*$||g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 17 - Cxx_Cmnt_Irix fix
*/
tSCC zCxx_Cmnt_IrixName[] =
"Cxx_Cmnt_Irix";
/*
* File name selection pattern
*/
tSCC zCxx_Cmnt_IrixList[] =
"|" "fam.h" "|";
/*
* content selection pattern
*/
tSCC zCxx_Cmnt_IrixSelect0[] =
"indigo.esd";
#define CXX_CMNT_IRIX_TEST_CT 1
tTestDesc aCxx_Cmnt_IrixTests[] = {
{ TT_EGREP, zCxx_Cmnt_IrixSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Cxx_Cmnt_Irix
*/
const char* apzCxx_Cmnt_IrixPatch[] = { "sed",
"-e" "s|//.*$||g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 18 - Cxx_Cmnt_Sunos fix
*/
tSCC zCxx_Cmnt_SunosName[] =
"Cxx_Cmnt_Sunos";
/*
* File name selection pattern
*/
tSCC zCxx_Cmnt_SunosList[] =
"|" "sbusdev/audiovar.h"
"|" "sys/audiovar.h" "|";
#define CXX_CMNT_SUNOS_TEST_CT 0
#define aCxx_Cmnt_SunosTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Cxx_Cmnt_Sunos
*/
const char* apzCxx_Cmnt_SunosPatch[] = { "sed",
"-e" "s|//.*$||g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 19 - Cxx_Cmnt_Vxworks fix
*/
tSCC zCxx_Cmnt_VxworksName[] =
"Cxx_Cmnt_Vxworks";
/*
* File name selection pattern
*/
tSCC zCxx_Cmnt_VxworksList[] =
"|" "drv/netif/if_med.h" "|";
/*
* content selection pattern
*/
tSCC zCxx_Cmnt_VxworksSelect0[] =
"Wind River";
#define CXX_CMNT_VXWORKS_TEST_CT 1
tTestDesc aCxx_Cmnt_VxworksTests[] = {
{ TT_EGREP, zCxx_Cmnt_VxworksSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Cxx_Cmnt_Vxworks
*/
const char* apzCxx_Cmnt_VxworksPatch[] = { "sed",
"-e" "s|//.*$||g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 20 - Ecd_Cursor fix
*/
tSCC zEcd_CursorName[] =
"Ecd_Cursor";
/*
* File name selection pattern
*/
tSCC zEcd_CursorList[] =
"|" "sunwindow/win_lock.h"
"|" "sunwindow/win_cursor.h" "|";
#define ECD_CURSOR_TEST_CT 0
#define aEcd_CursorTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Ecd_Cursor
*/
const char* apzEcd_CursorPatch[] = { "sed",
"-e" "s/ecd.cursor/ecd_cursor/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 21 - Else_Label fix
*/
tSCC zElse_LabelName[] =
"Else_Label";
/*
* File name selection pattern
*/
#define zElse_LabelList (char*)NULL
/*
* content selection pattern
*/
tSCC zElse_LabelSelect0[] =
"^[ \t]*#[ \t]*else[ \t]+[!-.0-~]";
#define ELSE_LABEL_TEST_CT 1
tTestDesc aElse_LabelTests[] = {
{ TT_EGREP, zElse_LabelSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Else_Label
*/
const char* apzElse_LabelPatch[] = { "sed",
"-e" ":loop\n"
"/\\\\$/N\n"
"s/\\\\$/\\\\+++fixinc_eol+++/\n"
"/\\\\$/b loop\n"
"s/\\\\+++fixinc_eol+++/\\\\/g\n"
"s%^\\([ \t]*#[ \t]*else\\)[ \t]*/[^*].*%\\1%\n"
"s%^\\([ \t]*#[ \t]*else\\)[ \t]*[^/ \t].*%\\1%",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 22 - Endif_Label fix
*/
tSCC zEndif_LabelName[] =
"Endif_Label";
/*
* File name selection pattern
*/
#define zEndif_LabelList (char*)NULL
/*
* content selection pattern
*/
tSCC zEndif_LabelSelect0[] =
"^[ \t]*#[ \t]*endif[ \t]+[!-.0-~]";
#define ENDIF_LABEL_TEST_CT 1
tTestDesc aEndif_LabelTests[] = {
{ TT_EGREP, zEndif_LabelSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Endif_Label
*/
const char* apzEndif_LabelPatch[] = { "sed",
"-e" ":loop\n"
"/\\\\$/N\n"
"s/\\\\$/\\\\+++fixinc_eol+++/\n"
"/\\\\$/b loop\n"
"s/\\\\+++fixinc_eol+++/\\\\/g\n"
"s%^\\([ \t]*#[ \t]*endif\\)[ \t]*/[^*].*%\\1%\n"
"s%^\\([ \t]*#[ \t]*endif\\)[ \t]*\\*[^/].*%\\1%\n"
"s%^\\([ \t]*#[ \t]*endif\\)[ \t]*[^/* \t].*%\\1%",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 23 - Hp_Inline fix
*/
tSCC zHp_InlineName[] =
"Hp_Inline";
/*
* File name selection pattern
*/
tSCC zHp_InlineList[] =
"|" "sys/spinlock.h" "|";
/*
* content selection pattern
*/
tSCC zHp_InlineSelect0[] =
"include.*\"\\.\\./machine/";
#define HP_INLINE_TEST_CT 1
tTestDesc aHp_InlineTests[] = {
{ TT_EGREP, zHp_InlineSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Hp_Inline
*/
const char* apzHp_InlinePatch[] = { "sed",
"-e" "s,\"../machine/inline.h\",<machine/inline.h>,",
"-e" "s,\"../machine/psl.h\",<machine/psl.h>,",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 24 - Hp_Sysfile fix
*/
tSCC zHp_SysfileName[] =
"Hp_Sysfile";
/*
* File name selection pattern
*/
tSCC zHp_SysfileList[] =
"|" "sys/file.h" "|";
/*
* content selection pattern
*/
tSCC zHp_SysfileSelect0[] =
"HPUX_SOURCE";
#define HP_SYSFILE_TEST_CT 1
tTestDesc aHp_SysfileTests[] = {
{ TT_EGREP, zHp_SysfileSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Hp_Sysfile
*/
const char* apzHp_SysfilePatch[] = { "sed",
"-e" "s/(\\.\\.\\.)/(struct file * ...)/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 25 - Hpux_Cxx_Unready fix
*/
tSCC zHpux_Cxx_UnreadyName[] =
"Hpux_Cxx_Unready";
/*
* File name selection pattern
*/
tSCC zHpux_Cxx_UnreadyList[] =
"|" "assert.h"
"|" "sys/mman.h" "|";
/*
* content bypass pattern
*/
tSCC zHpux_Cxx_UnreadyBypass0[] =
"\"C\"|__BEGIN_DECLS";
#define HPUX_CXX_UNREADY_TEST_CT 1
tTestDesc aHpux_Cxx_UnreadyTests[] = {
{ TT_NEGREP, zHpux_Cxx_UnreadyBypass0, (regex_t*)NULL }, };
/*
* Fix Command Arguments for Hpux_Cxx_Unready
*/
const char* apzHpux_Cxx_UnreadyPatch[] = { "sed",
"-e" "1i\\\n"
"#ifdef __cplusplus\\\n"
"extern \"C\" {\\\n"
"#endif\\\n"
"",
"-e" "$a\\\n"
"#ifdef __cplusplus\\\n"
"}\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 26 - Hpux_Maxint fix
*/
tSCC zHpux_MaxintName[] =
"Hpux_Maxint";
/*
* File name selection pattern
*/
tSCC zHpux_MaxintList[] =
"|" "sys/param.h" "|";
#define HPUX_MAXINT_TEST_CT 0
#define aHpux_MaxintTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Hpux_Maxint
*/
const char* apzHpux_MaxintPatch[] = { "sed",
"-e" "/^#[ \t]*define[ \t]*MAXINT[ \t]/i\\\n"
"#ifndef MAXINT",
"-e" "/^#[ \t]*define[ \t]*MAXINT[ \t]/a\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 27 - Hpux_Systime fix
*/
tSCC zHpux_SystimeName[] =
"Hpux_Systime";
/*
* File name selection pattern
*/
tSCC zHpux_SystimeList[] =
"|" "sys/time.h" "|";
/*
* content selection pattern
*/
tSCC zHpux_SystimeSelect0[] =
"^extern struct sigevent;";
#define HPUX_SYSTIME_TEST_CT 1
tTestDesc aHpux_SystimeTests[] = {
{ TT_EGREP, zHpux_SystimeSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Hpux_Systime
*/
const char* apzHpux_SystimePatch[] = { "sed",
"-e" "s/^extern struct sigevent;/struct sigevent;/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 28 - Interactv_Add1 fix
*/
tSCC zInteractv_Add1Name[] =
"Interactv_Add1";
/*
* File name selection pattern
*/
tSCC zInteractv_Add1List[] =
"|" "stdio.h"
"|" "math.h"
"|" "ctype.h"
"|" "sys/limits.h"
"|" "sys/fcntl.h"
"|" "sys/dirent.h" "|";
/*
* content test pattern. A shell will deal with it later.
*/
tSCC zInteractv_Add1Test0[] =
"-d /etc/conf/kconfig.d";
tSCC zInteractv_Add1Test1[] =
"-n \"`grep _POSIX_VERSION /usr/include/sys/unistd.h`\"";
#define INTERACTV_ADD1_TEST_CT 2
tTestDesc aInteractv_Add1Tests[] = {
{ TT_TEST, zInteractv_Add1Test0, 0 /* unused */ },
{ TT_TEST, zInteractv_Add1Test1, 0 /* unused */ }, };
/*
* Fix Command Arguments for Interactv_Add1
*/
const char* apzInteractv_Add1Patch[] = { "sed",
"-e" "s/!defined(__STDC__) && !defined(_POSIX_SOURCE)/!defined(_POSIX_SOURCE)/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 29 - Interactv_Add2 fix
*/
tSCC zInteractv_Add2Name[] =
"Interactv_Add2";
/*
* File name selection pattern
*/
tSCC zInteractv_Add2List[] =
"|" "math.h" "|";
/*
* content test pattern. A shell will deal with it later.
*/
tSCC zInteractv_Add2Test0[] =
"-d /etc/conf/kconfig.d";
tSCC zInteractv_Add2Test1[] =
"-n \"`grep _POSIX_VERSION /usr/include/sys/unistd.h`\"";
#define INTERACTV_ADD2_TEST_CT 2
tTestDesc aInteractv_Add2Tests[] = {
{ TT_TEST, zInteractv_Add2Test0, 0 /* unused */ },
{ TT_TEST, zInteractv_Add2Test1, 0 /* unused */ }, };
/*
* Fix Command Arguments for Interactv_Add2
*/
const char* apzInteractv_Add2Patch[] = { "sed",
"-e" "s/fmod(double)/fmod(double, double)/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 30 - Interactv_Add3 fix
*/
tSCC zInteractv_Add3Name[] =
"Interactv_Add3";
/*
* File name selection pattern
*/
tSCC zInteractv_Add3List[] =
"|" "sys/limits.h" "|";
/*
* content test pattern. A shell will deal with it later.
*/
tSCC zInteractv_Add3Test0[] =
"-d /etc/conf/kconfig.d";
tSCC zInteractv_Add3Test1[] =
"-n \"`grep _POSIX_VERSION /usr/include/sys/unistd.h`\"";
#define INTERACTV_ADD3_TEST_CT 2
tTestDesc aInteractv_Add3Tests[] = {
{ TT_TEST, zInteractv_Add3Test0, 0 /* unused */ },
{ TT_TEST, zInteractv_Add3Test1, 0 /* unused */ }, };
/*
* Fix Command Arguments for Interactv_Add3
*/
const char* apzInteractv_Add3Patch[] = { "sed",
"-e" "/CHILD_MAX/s,/\\* Max, Max,",
"-e" "/OPEN_MAX/s,/\\* Max, Max,",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 31 - Io_Def_Quotes fix
*/
tSCC zIo_Def_QuotesName[] =
"Io_Def_Quotes";
/*
* File name selection pattern
*/
#define zIo_Def_QuotesList (char*)NULL
/*
* content selection pattern
*/
tSCC zIo_Def_QuotesSelect0[] =
"[ \t]_IO[A-Z]*[ \t]*\\([A-Za-z]";
#define IO_DEF_QUOTES_TEST_CT 1
tTestDesc aIo_Def_QuotesTests[] = {
{ TT_EGREP, zIo_Def_QuotesSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Io_Def_Quotes
*/
const char* apzIo_Def_QuotesPatch[] = { "sed",
"-e" "s/\\([ \t]_IO[A-Z]*[ \t]*(\\)\\([A-Za-z]\\),/\\1'\\2',/",
"-e" "/#[ \t]*define[ \t]*[ \t]_IO/s/'\\([cgxtf]\\)'/\\1/g",
"-e" "/#[ \t]*define[ \t]*[ \t]DESIOC/s/'\\([cdgx]\\)'/\\1/g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 32 - Ioctl_Fix_Ctrl fix
*/
tSCC zIoctl_Fix_CtrlName[] =
"Ioctl_Fix_Ctrl";
/*
* File name selection pattern
*/
#define zIoctl_Fix_CtrlList (char*)NULL
/*
* content selection pattern
*/
tSCC zIoctl_Fix_CtrlSelect0[] =
"CTRL[ \t]";
#define IOCTL_FIX_CTRL_TEST_CT 1
tTestDesc aIoctl_Fix_CtrlTests[] = {
{ TT_EGREP, zIoctl_Fix_CtrlSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Ioctl_Fix_Ctrl
*/
const char* apzIoctl_Fix_CtrlPatch[] = { "sed",
"-e" "/[^A-Z0-9_]CTRL[ \t]*(/s/\\([^']\\))/'\\1')/",
"-e" "/[^A-Z0-9]_CTRL[ \t]*(/s/\\([^']\\))/'\\1')/",
"-e" "/#[ \t]*define[ \t]*[ \t]CTRL/s/'\\([cgx]\\)'/\\1/g",
"-e" "/#[ \t]*define[ \t]*[ \t]_CTRL/s/'\\([cgx]\\)'/\\1/g",
"-e" "/#[ \t]*define[ \t]*[ \t]BSD43_CTRL/s/'\\([cgx]\\)'/\\1/g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 33 - Ip_Missing_Semi fix
*/
tSCC zIp_Missing_SemiName[] =
"Ip_Missing_Semi";
/*
* File name selection pattern
*/
tSCC zIp_Missing_SemiList[] =
"|" "netinet/ip.h" "|";
#define IP_MISSING_SEMI_TEST_CT 0
#define aIp_Missing_SemiTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Ip_Missing_Semi
*/
const char* apzIp_Missing_SemiPatch[] = { "sed",
"-e" "/^struct/,/^};/s/}$/};/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 34 - Irix_Bogus_Cxx_Cmnt fix
*/
tSCC zIrix_Bogus_Cxx_CmntName[] =
"Irix_Bogus_Cxx_Cmnt";
/*
* File name selection pattern
*/
tSCC zIrix_Bogus_Cxx_CmntList[] =
"|" "elf_abi.h"
"|" "elf.h" "|";
#define IRIX_BOGUS_CXX_CMNT_TEST_CT 0
#define aIrix_Bogus_Cxx_CmntTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Irix_Bogus_Cxx_Cmnt
*/
const char* apzIrix_Bogus_Cxx_CmntPatch[] = { "sed",
"-e" "s@\"/\\*\"\\*/@\"//\"@",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 35 - Irix_Multiline_Cmnt fix
*/
tSCC zIrix_Multiline_CmntName[] =
"Irix_Multiline_Cmnt";
/*
* File name selection pattern
*/
tSCC zIrix_Multiline_CmntList[] =
"|" "sys/types.h" "|";
#define IRIX_MULTILINE_CMNT_TEST_CT 0
#define aIrix_Multiline_CmntTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Irix_Multiline_Cmnt
*/
const char* apzIrix_Multiline_CmntPatch[] = { "sed",
"-e" "s@type of the result@type of the result */@",
"-e" "s@of the sizeof@/* of the sizeof@",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 36 - Irix_Sockaddr fix
*/
tSCC zIrix_SockaddrName[] =
"Irix_Sockaddr";
/*
* File name selection pattern
*/
tSCC zIrix_SockaddrList[] =
"|" "rpc/auth.h" "|";
/*
* content selection pattern
*/
tSCC zIrix_SockaddrSelect0[] =
"authdes_create.*struct sockaddr";
#define IRIX_SOCKADDR_TEST_CT 1
tTestDesc aIrix_SockaddrTests[] = {
{ TT_EGREP, zIrix_SockaddrSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Irix_Sockaddr
*/
const char* apzIrix_SockaddrPatch[] = { "sed",
"-e" "/authdes_create.*struct sockaddr/i\\\n"
"struct sockaddr;",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 37 - Irix_Struct__File fix
*/
tSCC zIrix_Struct__FileName[] =
"Irix_Struct__File";
/*
* File name selection pattern
*/
tSCC zIrix_Struct__FileList[] =
"|" "rpc/xdr.h" "|";
#define IRIX_STRUCT__FILE_TEST_CT 0
#define aIrix_Struct__FileTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Irix_Struct__File
*/
const char* apzIrix_Struct__FilePatch[] = { "sed",
"-e" "/xdrstdio_create.*struct __file_s/i\\\n"
"struct __file_s;",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 38 - Isc_Fmod fix
*/
tSCC zIsc_FmodName[] =
"Isc_Fmod";
/*
* File name selection pattern
*/
tSCC zIsc_FmodList[] =
"|" "math.h" "|";
/*
* content selection pattern
*/
tSCC zIsc_FmodSelect0[] =
"fmod\\(double\\)";
#define ISC_FMOD_TEST_CT 1
tTestDesc aIsc_FmodTests[] = {
{ TT_EGREP, zIsc_FmodSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Isc_Fmod
*/
const char* apzIsc_FmodPatch[] = { "sed",
"-e" "s/fmod(double)/fmod(double, double)/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 39 - Isc_Sys_Limits fix
*/
tSCC zIsc_Sys_LimitsName[] =
"Isc_Sys_Limits";
/*
* File name selection pattern
*/
tSCC zIsc_Sys_LimitsList[] =
"|" "sys/limits.h" "|";
/*
* content selection pattern
*/
tSCC zIsc_Sys_LimitsSelect0[] =
"CHILD_MAX";
#define ISC_SYS_LIMITS_TEST_CT 1
tTestDesc aIsc_Sys_LimitsTests[] = {
{ TT_EGREP, zIsc_Sys_LimitsSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Isc_Sys_Limits
*/
const char* apzIsc_Sys_LimitsPatch[] = { "sed",
"-e" "/CHILD_MAX/s,/\\* Max, Max,",
"-e" "/OPEN_MAX/s,/\\* Max, Max,",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 40 - Kandr_Concat fix
*/
tSCC zKandr_ConcatName[] =
"Kandr_Concat";
/*
* File name selection pattern
*/
tSCC zKandr_ConcatList[] =
"|" "sparc/asm_linkage.h"
"|" "sun3/asm_linkage.h"
"|" "sun3x/asm_linkage.h"
"|" "sun4/asm_linkage.h"
"|" "sun4c/asm_linkage.h"
"|" "sun4m/asm_linkage.h"
"|" "sun4c/debug/asm_linkage.h"
"|" "sun4m/debug/asm_linkage.h"
"|" "arm/as_support.h"
"|" "arm/mc_type.h"
"|" "arm/xcb.h"
"|" "dev/chardefmac.h"
"|" "dev/ps_irq.h"
"|" "dev/screen.h"
"|" "dev/scsi.h"
"|" "sys/tty.h"
"|" "Xm.acorn/XmP.h"
"|" "bsd43/bsd43_.h" "|";
/*
* content selection pattern
*/
tSCC zKandr_ConcatSelect0[] =
"/\\*\\*/";
#define KANDR_CONCAT_TEST_CT 1
tTestDesc aKandr_ConcatTests[] = {
{ TT_EGREP, zKandr_ConcatSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Kandr_Concat
*/
const char* apzKandr_ConcatPatch[] = { "sed",
"-e" "s|/\\*\\*/| ## |g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 41 - Limits_Ifndefs fix
*/
tSCC zLimits_IfndefsName[] =
"Limits_Ifndefs";
/*
* File name selection pattern
*/
tSCC zLimits_IfndefsList[] =
"|" "limits.h" "|";
/*
* content bypass pattern
*/
tSCC zLimits_IfndefsBypass0[] =
"ifndef[ \t]+FLT_MIN";
#define LIMITS_IFNDEFS_TEST_CT 1
tTestDesc aLimits_IfndefsTests[] = {
{ TT_NEGREP, zLimits_IfndefsBypass0, (regex_t*)NULL }, };
/*
* Fix Command Arguments for Limits_Ifndefs
*/
const char* apzLimits_IfndefsPatch[] = { "sed",
"-e" "/[ \t]FLT_MIN[ \t]/i\\\n"
"#ifndef FLT_MIN",
"-e" "/[ \t]FLT_MIN[ \t]/a\\\n"
"#endif",
"-e" "/[ \t]FLT_MAX[ \t]/i\\\n"
"#ifndef FLT_MAX",
"-e" "/[ \t]FLT_MAX[ \t]/a\\\n"
"#endif",
"-e" "/[ \t]FLT_DIG[ \t]/i\\\n"
"#ifndef FLT_DIG",
"-e" "/[ \t]FLT_DIG[ \t]/a\\\n"
"#endif",
"-e" "/[ \t]DBL_MIN[ \t]/i\\\n"
"#ifndef DBL_MIN",
"-e" "/[ \t]DBL_MIN[ \t]/a\\\n"
"#endif",
"-e" "/[ \t]DBL_MAX[ \t]/i\\\n"
"#ifndef DBL_MAX",
"-e" "/[ \t]DBL_MAX[ \t]/a\\\n"
"#endif",
"-e" "/[ \t]DBL_DIG[ \t]/i\\\n"
"#ifndef DBL_DIG",
"-e" "/[ \t]DBL_DIG[ \t]/a\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 42 - Lynx_Void_Int fix
*/
tSCC zLynx_Void_IntName[] =
"Lynx_Void_Int";
/*
* File name selection pattern
*/
tSCC zLynx_Void_IntList[] =
"|" "curses.h" "|";
/*
* content selection pattern
*/
tSCC zLynx_Void_IntSelect0[] =
"#[ \t]*define[ \t]+void[ \t]+int";
#define LYNX_VOID_INT_TEST_CT 1
tTestDesc aLynx_Void_IntTests[] = {
{ TT_EGREP, zLynx_Void_IntSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Lynx_Void_Int
*/
const char* apzLynx_Void_IntPatch[] = { "sed",
"-e" "/#[ \t]*define[ \t][ \t]*void[ \t]int/d",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 43 - Lynxos_Fcntl_Proto fix
*/
tSCC zLynxos_Fcntl_ProtoName[] =
"Lynxos_Fcntl_Proto";
/*
* File name selection pattern
*/
tSCC zLynxos_Fcntl_ProtoList[] =
"|" "fcntl.h" "|";
#define LYNXOS_FCNTL_PROTO_TEST_CT 0
#define aLynxos_Fcntl_ProtoTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Lynxos_Fcntl_Proto
*/
const char* apzLynxos_Fcntl_ProtoPatch[] = { "sed",
"-e" "s/\\(fcntl.*(int, int, \\)int)/\\1...)/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 44 - M88k_Bad_Hypot_Opt fix
*/
tSCC zM88k_Bad_Hypot_OptName[] =
"M88k_Bad_Hypot_Opt";
/*
* File name selection pattern
*/
tSCC zM88k_Bad_Hypot_OptList[] =
"|" "math.h" "|";
#define M88K_BAD_HYPOT_OPT_TEST_CT 0
#define aM88k_Bad_Hypot_OptTests (tTestDesc*)NULL
/*
* Fix Command Arguments for M88k_Bad_Hypot_Opt
*/
const char* apzM88k_Bad_Hypot_OptPatch[] = { "sed",
"-e" "s/extern double floor(), ceil(), fmod(), fabs();/extern double floor(), ceil(), fmod(), fabs _PARAMS((double));/",
"-e" "/^extern double hypot();$/a\\\n"
"\\/* Workaround a stupid Motorola optimization if one\\\n"
" of x or y is 0.0 and the other is negative! *\\/\\\n"
"#ifdef __STDC__\\\n"
"static __inline__ double fake_hypot (double x, double y)\\\n"
"#else\\\n"
"static __inline__ double fake_hypot (x, y)\\\n"
"\tdouble x, y;\\\n"
"#endif\\\n"
"{\\\n"
"\treturn fabs (hypot (x, y));\\\n"
"}\\\n"
"#define hypot\tfake_hypot",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 45 - M88k_Bad_S_If fix
*/
tSCC zM88k_Bad_S_IfName[] =
"M88k_Bad_S_If";
/*
* File name selection pattern
*/
tSCC zM88k_Bad_S_IfList[] =
"|" "sys/stat.h" "|";
/*
* content selection pattern
*/
tSCC zM88k_Bad_S_IfSelect0[] =
"#define[ \t]+S_IS[A-Z]*(m)[ \t]";
#define M88K_BAD_S_IF_TEST_CT 1
tTestDesc aM88k_Bad_S_IfTests[] = {
{ TT_EGREP, zM88k_Bad_S_IfSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for M88k_Bad_S_If
*/
const char* apzM88k_Bad_S_IfPatch[] = { "sed",
"-e" "s/^\\(#define[ \t]*S_IS[A-Z]*(m)\\)[ \t]*(m[ \t]*&[ \t]*\\(S_IF[A-Z][A-Z][A-Z][A-Z]*\\)[ \t]*)/\\1 (((m)\\&S_IFMT)==\\2)/",
"-e" "s/^\\(#define[ \t]*S_IS[A-Z]*(m)\\)[ \t]*(m[ \t]*&[ \t]*\\(0[0-9]*\\)[ \t]*)/\\1 (((m)\\&S_IFMT)==\\2)/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 46 - M88k_Multi_Incl fix
*/
tSCC zM88k_Multi_InclName[] =
"M88k_Multi_Incl";
/*
* File name selection pattern
*/
tSCC zM88k_Multi_InclList[] =
"|" "time.h" "|";
/*
* content bypass pattern
*/
tSCC zM88k_Multi_InclBypass0[] =
"#ifndef";
#define M88K_MULTI_INCL_TEST_CT 1
tTestDesc aM88k_Multi_InclTests[] = {
{ TT_NEGREP, zM88k_Multi_InclBypass0, (regex_t*)NULL }, };
/*
* Fix Command Arguments for M88k_Multi_Incl
*/
const char* apzM88k_Multi_InclPatch[] = { "sh", "-c",
"echo Fixing $file, to protect against multiple inclusion. >&2\n"
" cpp_wrapper=`echo $file | sed -e 's,\\.,_,g' -e 's,/,_,g'`\n"
" sed -e \"1i\\\n"
"#ifndef __GCC_GOT_${cpp_wrapper}_\\\n"
"#define __GCC_GOT_${cpp_wrapper}_\\\n"
"\" \\\n"
"\t-e \"$a\\\n"
"#endif /* ! __GCC_GOT_${cpp_wrapper}_ */\n"
"\"",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 47 - Machine_Name fix
*/
tSCC zMachine_NameName[] =
"Machine_Name";
/*
* File name selection pattern
*/
#define zMachine_NameList (char*)NULL
/*
* content selection pattern
*/
tSCC zMachine_NameSelect0[] =
"^#[ \t]*(if|elif).*[^a-zA-Z0-9_](M32|_*(MIPSE[LB]|SYSTYPE_[A-Z0-9]|[Rr][34]000|host_mips|i386|mips)($|[^a-zA-Z0-9_])|bsd4|is68k|m[68]8k|mc680|news|ns32000|pdp11|pyr|sel|sony_news|sparc|sun|tahoe|tower|u370|u3b|unix|vax)";
#define MACHINE_NAME_TEST_CT 1
tTestDesc aMachine_NameTests[] = {
{ TT_EGREP, zMachine_NameSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Machine_Name
*/
const char* apzMachine_NamePatch[] = { "sed",
"-e" ":loop\n"
"/\\\\$/N\n"
"s/\\\\$/\\\\+++fixinc_eol+++/\n"
"/\\\\$/b loop\n"
"s/\\\\+++fixinc_eol+++/\\\\/g\n"
"/#[\t ]*[el]*if/ {\n"
"\ts/[a-zA-Z0-9_][a-zA-Z0-9_]*/ & /g\n"
"\ts/ M32 / __M32__ /g\n"
"\ts/ _*MIPSE\\([LB]\\) / __MIPSE\\1__ /g\n"
"\ts/ _*SYSTYPE_\\([A-Z0-9]*\\) / __SYSTYPE_\\1__ /g\n"
"\ts/ _*\\([Rr][34]\\)000 / __\\1000__ /g\n"
"\ts/ _*host_mips / __host_mips__ /g\n"
"\ts/ _*i386 / __i386__ /g\n"
"\ts/ _*mips / __mips__ /g\n"
"\ts/ bsd4\\([0-9]\\) / __bsd4\\1__ /g\n"
"\ts/ is68k / __is68k__ /g\n"
"\ts/ m68k / __m68k__ /g\n"
"\ts/ m88k / __m88k__ /g\n"
"\ts/ mc680\\([0-9]\\)0 / __mc680\\10__ /g\n"
"\ts/ news\\([0-9]*\\) / __news\\1__ /g\n"
"\ts/ ns32000 / __ns32000__ /g\n"
"\ts/ pdp11 / __pdp11__ /g\n"
"\ts/ pyr / __pyr__ /g\n"
"\ts/ sel / __sel__ /g\n"
"\ts/ sony_news / __sony_news__ /g\n"
"\ts/ sparc / __sparc__ /g\n"
"\ts/ sun\\([a-z0-9]*\\) / __sun\\1__ /g\n"
"\ts/ tahoe / __tahoe__ /g\n"
"\ts/ tower\\([_0-9]*\\) / __tower\\1__ /g\n"
"\ts/ u370 / __u370__ /g\n"
"\ts/ u3b\\([0-9]*\\) / __u3b\\1__ /g\n"
"\ts/ unix / __unix__ /g\n"
"\ts/ vax / __vax__ /g\n"
"\ts/ \\([a-zA-Z0-9_][a-zA-Z0-9_]*\\) /\\1/g\n"
"\t}",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 48 - Math_Exception fix
*/
tSCC zMath_ExceptionName[] =
"Math_Exception";
/*
* File name selection pattern
*/
tSCC zMath_ExceptionList[] =
"|" "math.h" "|";
/*
* content selection pattern
*/
tSCC zMath_ExceptionSelect0[] =
"struct exception";
#define MATH_EXCEPTION_TEST_CT 1
tTestDesc aMath_ExceptionTests[] = {
{ TT_EGREP, zMath_ExceptionSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Math_Exception
*/
const char* apzMath_ExceptionPatch[] = { "sed",
"-e" "/struct exception/i\\\n"
"#ifdef __cplusplus\\\n"
"#define exception __math_exception\\\n"
"#endif",
"-e" "/struct exception/a\\\n"
"#ifdef __cplusplus\\\n"
"#undef exception\\\n"
"#endif",
"-e" "/matherr/i\\\n"
"#ifdef __cplusplus\\\n"
"#define exception __math_exception\\\n"
"#endif",
"-e" "/matherr/a\\\n"
"#ifdef __cplusplus\\\n"
"#undef exception\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 49 - Math_Gcc_Ifndefs fix
*/
tSCC zMath_Gcc_IfndefsName[] =
"Math_Gcc_Ifndefs";
/*
* File name selection pattern
*/
tSCC zMath_Gcc_IfndefsList[] =
"|" "math.h" "|";
#define MATH_GCC_IFNDEFS_TEST_CT 0
#define aMath_Gcc_IfndefsTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Math_Gcc_Ifndefs
*/
const char* apzMath_Gcc_IfndefsPatch[] = { "sh", "-c",
" dbl_max_def=\"`egrep 'define[ \t]+DBL_MAX[ \t]+.*' ${SRCDIR}/float.h 2>/dev/null`\"\n"
"\n"
"\tif ( test -n \"${dbl_max_def}\" \\\n"
"\t\t-a -n \"`egrep '#define[ \t]*HUGE_VAL[ \t]+DBL_MAX' $file`\" \\\n"
"\t\t-a -z \"`egrep '#define[ \t]+DBL_MAX[ \t]+' $file`\"\n"
"\t ) > /dev/null 2>&1\n"
"\tthen sed -e '/define[ \t]HUGE_VAL[ \t]/i\\\n"
"#ifndef HUGE_VAL\n"
"' \\\n"
"\t-e '/define[ \t]HUGE_VAL[ \t]/a\\\n"
"#endif\n"
"'\\\n"
"\t-e \"/define[ \t]HUGE_VAL[ \t]DBL_MAX/s/DBL_MAX/$dbl_max_def/\"\n"
"\telse sed -e '/define[ \t]HUGE_VAL[ \t]/i\\\n"
"#ifndef HUGE_VAL\n"
"' \\\n"
"\t-e '/define[ \t]HUGE_VAL[ \t]/a\\\n"
"#endif\n"
"'\n"
"\tfi",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 50 - Motorola_Stupid_Opt fix
*/
tSCC zMotorola_Stupid_OptName[] =
"Motorola_Stupid_Opt";
/*
* File name selection pattern
*/
tSCC zMotorola_Stupid_OptList[] =
"|" "math.h" "|";
/*
* content selection pattern
*/
tSCC zMotorola_Stupid_OptSelect0[] =
"^extern double hypot();$";
#define MOTOROLA_STUPID_OPT_TEST_CT 1
tTestDesc aMotorola_Stupid_OptTests[] = {
{ TT_EGREP, zMotorola_Stupid_OptSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Motorola_Stupid_Opt
*/
const char* apzMotorola_Stupid_OptPatch[] = { "sed",
"-e" "/^extern double hypot();$/a\\\n"
"\\/* Workaround a stupid Motorola optimization if one\\\n"
" of x or y is 0.0 and the other is negative! *\\/\\\n"
"#ifdef __STDC__\\\n"
"static __inline__ double fake_hypot (double x, double y)\\\n"
"#else\\\n"
"static __inline__ double fake_hypot (x, y)\\\n"
"\tdouble x, y;\\\n"
"#endif\\\n"
"{\\\n"
"\treturn fabs (hypot (x, y));\\\n"
"}\\\n"
"#define hypot\tfake_hypot",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 51 - Nested_Comment fix
*/
tSCC zNested_CommentName[] =
"Nested_Comment";
/*
* File name selection pattern
*/
tSCC zNested_CommentList[] =
"|" "rpc/rpc.h" "|";
#define NESTED_COMMENT_TEST_CT 0
#define aNested_CommentTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Nested_Comment
*/
const char* apzNested_CommentPatch[] = { "sed",
"-e" "s@^\\(/\\*.*rpc/auth_des.h>.*\\)/\\*@\\1*/ /*@",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 52 - News_Os_Recursion fix
*/
tSCC zNews_Os_RecursionName[] =
"News_Os_Recursion";
/*
* File name selection pattern
*/
tSCC zNews_Os_RecursionList[] =
"|" "stdlib.h" "|";
/*
* content selection pattern
*/
tSCC zNews_Os_RecursionSelect0[] =
"#include <stdlib.h>";
#define NEWS_OS_RECURSION_TEST_CT 1
tTestDesc aNews_Os_RecursionTests[] = {
{ TT_EGREP, zNews_Os_RecursionSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for News_Os_Recursion
*/
const char* apzNews_Os_RecursionPatch[] = { "sed",
"-e" "/^#include <stdlib.h>/i\\\n"
"#ifdef BOGUS_RECURSION",
"-e" "/^#include <stdlib.h>/a\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 53 - Next_Math_Prefix fix
*/
tSCC zNext_Math_PrefixName[] =
"Next_Math_Prefix";
/*
* File name selection pattern
*/
tSCC zNext_Math_PrefixList[] =
"|" "ansi/math.h" "|";
/*
* content selection pattern
*/
tSCC zNext_Math_PrefixSelect0[] =
"^extern.*double.*__const__.*";
#define NEXT_MATH_PREFIX_TEST_CT 1
tTestDesc aNext_Math_PrefixTests[] = {
{ TT_EGREP, zNext_Math_PrefixSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Next_Math_Prefix
*/
const char* apzNext_Math_PrefixPatch[] = { "sed",
"-e" "/^extern.*double.*__const__.*sqrt(/s/__const__//",
"-e" "/^extern.*double.*__const__.*fabs(/s/__const__//",
"-e" "/^extern.*double.*__const__.*cos(/s/__const__//",
"-e" "/^extern.*double.*__const__.*hypot(/s/__const__//",
"-e" "/^extern.*double.*__const__.*sin(/s/__const__//",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 54 - Next_Template fix
*/
tSCC zNext_TemplateName[] =
"Next_Template";
/*
* File name selection pattern
*/
tSCC zNext_TemplateList[] =
"|" "bsd/libc.h" "|";
/*
* content selection pattern
*/
tSCC zNext_TemplateSelect0[] =
"template";
#define NEXT_TEMPLATE_TEST_CT 1
tTestDesc aNext_TemplateTests[] = {
{ TT_EGREP, zNext_TemplateSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Next_Template
*/
const char* apzNext_TemplatePatch[] = { "sed",
"-e" "/\\(.*template\\)/s/template//",
"-e" "/extern.*volatile.*void.*abort/s/volatile//",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 55 - Next_Volitile fix
*/
tSCC zNext_VolitileName[] =
"Next_Volitile";
/*
* File name selection pattern
*/
tSCC zNext_VolitileList[] =
"|" "ansi/stdlib.h" "|";
/*
* content selection pattern
*/
tSCC zNext_VolitileSelect0[] =
"volatile";
#define NEXT_VOLITILE_TEST_CT 1
tTestDesc aNext_VolitileTests[] = {
{ TT_EGREP, zNext_VolitileSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Next_Volitile
*/
const char* apzNext_VolitilePatch[] = { "sed",
"-e" "/extern.*volatile.*void.*exit/s/volatile//",
"-e" "/extern.*volatile.*void.*abort/s/volatile//",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 56 - Next_Wait_Union fix
*/
tSCC zNext_Wait_UnionName[] =
"Next_Wait_Union";
/*
* File name selection pattern
*/
tSCC zNext_Wait_UnionList[] =
"|" "sys/wait.h" "|";
/*
* content selection pattern
*/
tSCC zNext_Wait_UnionSelect0[] =
"wait\\(union wait";
#define NEXT_WAIT_UNION_TEST_CT 1
tTestDesc aNext_Wait_UnionTests[] = {
{ TT_EGREP, zNext_Wait_UnionSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Next_Wait_Union
*/
const char* apzNext_Wait_UnionPatch[] = { "sed",
"-e" "s@wait(union wait@wait(void@",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 57 - No_Double_Slash fix
*/
tSCC zNo_Double_SlashName[] =
"No_Double_Slash";
/*
* File name selection pattern
*/
#define zNo_Double_SlashList (char*)NULL
/*
* content selection pattern
*/
tSCC zNo_Double_SlashSelect0[] =
"//[^*]";
#define NO_DOUBLE_SLASH_TEST_CT 1
tTestDesc aNo_Double_SlashTests[] = {
{ TT_EGREP, zNo_Double_SlashSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for No_Double_Slash
*/
const char* apzNo_Double_SlashPatch[] = { "sed",
"-e" "/\\/\\/[^*]/s|//\\(.*\\)$|/* \\1 */|",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 58 - Nodeent_Syntax fix
*/
tSCC zNodeent_SyntaxName[] =
"Nodeent_Syntax";
/*
* File name selection pattern
*/
tSCC zNodeent_SyntaxList[] =
"|" "netdnet/dnetdb.h" "|";
#define NODEENT_SYNTAX_TEST_CT 0
#define aNodeent_SyntaxTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Nodeent_Syntax
*/
const char* apzNodeent_SyntaxPatch[] = { "sed",
"-e" "s/char.*na_addr *$/char *na_addr;/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 59 - Osf_Namespace_A fix
*/
tSCC zOsf_Namespace_AName[] =
"Osf_Namespace_A";
/*
* File name selection pattern
*/
tSCC zOsf_Namespace_AList[] =
"|" "reg_types.h"
"|" "sys/lc_core.h" "|";
/*
* content test pattern. A shell will deal with it later.
*/
tSCC zOsf_Namespace_ATest0[] =
"-r reg_types.h-a -r sys/lc_core.h-a -n \"`grep '} regex_t;' reg_types.h`\"-a -z \"`grep __regex_t regex.h`\"";
#define OSF_NAMESPACE_A_TEST_CT 1
tTestDesc aOsf_Namespace_ATests[] = {
{ TT_TEST, zOsf_Namespace_ATest0, 0 /* unused */ }, };
/*
* Fix Command Arguments for Osf_Namespace_A
*/
const char* apzOsf_Namespace_APatch[] = { "sed",
"-e" "s/regex_t/__regex_t/g",
"-e" "s/regoff_t/__regoff_t/g",
"-e" "s/regmatch_t/__regmatch_t/g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 60 - Osf_Namespace_B fix
*/
tSCC zOsf_Namespace_BName[] =
"Osf_Namespace_B";
/*
* File name selection pattern
*/
tSCC zOsf_Namespace_BList[] =
"|" "regex.h" "|";
/*
* content test pattern. A shell will deal with it later.
*/
tSCC zOsf_Namespace_BTest0[] =
"-r reg_types.h-a -r sys/lc_core.h-a -n \"`grep '} regex_t;' reg_types.h`\"-a -z \"`grep __regex_t regex.h`\"";
#define OSF_NAMESPACE_B_TEST_CT 1
tTestDesc aOsf_Namespace_BTests[] = {
{ TT_TEST, zOsf_Namespace_BTest0, 0 /* unused */ }, };
/*
* Fix Command Arguments for Osf_Namespace_B
*/
const char* apzOsf_Namespace_BPatch[] = { "sed",
"-e" "/#include <reg_types.h>/a\\\n"
"typedef __regex_t\tregex_t;\\\n"
"typedef __regoff_t\tregoff_t;\\\n"
"typedef __regmatch_t\tregmatch_t;",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 61 - Pthread_Page_Size fix
*/
tSCC zPthread_Page_SizeName[] =
"Pthread_Page_Size";
/*
* File name selection pattern
*/
tSCC zPthread_Page_SizeList[] =
"|" "pthread.h" "|";
/*
* content selection pattern
*/
tSCC zPthread_Page_SizeSelect0[] =
"^int __page_size";
#define PTHREAD_PAGE_SIZE_TEST_CT 1
tTestDesc aPthread_Page_SizeTests[] = {
{ TT_EGREP, zPthread_Page_SizeSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Pthread_Page_Size
*/
const char* apzPthread_Page_SizePatch[] = { "sed",
"-e" "s/^int __page_size/extern int __page_size/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 62 - Rs6000_Double fix
*/
tSCC zRs6000_DoubleName[] =
"Rs6000_Double";
/*
* File name selection pattern
*/
tSCC zRs6000_DoubleList[] =
"|" "math.h" "|";
/*
* content selection pattern
*/
tSCC zRs6000_DoubleSelect0[] =
"[^a-zA-Z_]class\\(";
#define RS6000_DOUBLE_TEST_CT 1
tTestDesc aRs6000_DoubleTests[] = {
{ TT_EGREP, zRs6000_DoubleSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Rs6000_Double
*/
const char* apzRs6000_DoublePatch[] = { "sed",
"-e" "/class[(]/i\\\n"
"#ifndef __cplusplus",
"-e" "/class[(]/a\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 63 - Rs6000_Fchmod fix
*/
tSCC zRs6000_FchmodName[] =
"Rs6000_Fchmod";
/*
* File name selection pattern
*/
tSCC zRs6000_FchmodList[] =
"|" "sys/stat.h" "|";
/*
* content selection pattern
*/
tSCC zRs6000_FchmodSelect0[] =
"fchmod\\(char";
#define RS6000_FCHMOD_TEST_CT 1
tTestDesc aRs6000_FchmodTests[] = {
{ TT_EGREP, zRs6000_FchmodSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Rs6000_Fchmod
*/
const char* apzRs6000_FchmodPatch[] = { "sed",
"-e" "s/fchmod(char \\*/fchmod(int/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 64 - Rs6000_Param fix
*/
tSCC zRs6000_ParamName[] =
"Rs6000_Param";
/*
* File name selection pattern
*/
tSCC zRs6000_ParamList[] =
"|" "stdio.h"
"|" "unistd.h" "|";
#define RS6000_PARAM_TEST_CT 0
#define aRs6000_ParamTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Rs6000_Param
*/
const char* apzRs6000_ParamPatch[] = { "sed",
"-e" "s@rename(const char \\*old, const char \\*new)@rename(const char *_old, const char *_new)@",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 65 - Sony_Include fix
*/
tSCC zSony_IncludeName[] =
"Sony_Include";
/*
* File name selection pattern
*/
tSCC zSony_IncludeList[] =
"|" "machine/machparam.h" "|";
/*
* content selection pattern
*/
tSCC zSony_IncludeSelect0[] =
"\"\\.\\./machine/endian.h\"";
#define SONY_INCLUDE_TEST_CT 1
tTestDesc aSony_IncludeTests[] = {
{ TT_EGREP, zSony_IncludeSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Sony_Include
*/
const char* apzSony_IncludePatch[] = { "sed",
"-e" "s@\"../machine/endian.h\"@<machine/endian.h>@",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 66 - Statsswtch fix
*/
tSCC zStatsswtchName[] =
"Statsswtch";
/*
* File name selection pattern
*/
tSCC zStatsswtchList[] =
"|" "rpcsvc/rstat.h" "|";
/*
* content selection pattern
*/
tSCC zStatsswtchSelect0[] =
"boottime$";
#define STATSSWTCH_TEST_CT 1
tTestDesc aStatsswtchTests[] = {
{ TT_EGREP, zStatsswtchSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Statsswtch
*/
const char* apzStatsswtchPatch[] = { "sed",
"-e" "s/boottime$/boottime;/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 67 - Stdio_Va_List fix
*/
tSCC zStdio_Va_ListName[] =
"Stdio_Va_List";
/*
* File name selection pattern
*/
tSCC zStdio_Va_ListList[] =
"|" "stdio.h" "|";
#define STDIO_VA_LIST_TEST_CT 0
#define aStdio_Va_ListTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Stdio_Va_List
*/
const char* apzStdio_Va_ListPatch[] = { "sh", "-c",
"if ( egrep \"__need___va_list\" $file ) > /dev/null 2>&1 ; then\n"
" :\n"
" else\n"
" echo \"#define __need___va_list\"\n"
" echo \"#include <stdarg.h>\"\n"
" fi\n"
"\n"
" sed -e 's@ va_list @ __gnuc_va_list @' \\\n"
" -e 's@ va_list)@ __gnuc_va_list)@' \\\n"
" -e 's@ _BSD_VA_LIST_));@ __gnuc_va_list));@' \\\n"
" -e 's@ _VA_LIST_));@ __gnuc_va_list));@' \\\n"
" -e 's@ va_list@ __va_list__@' \\\n"
" -e 's@\\*va_list@*__va_list__@' \\\n"
" -e 's@ __va_list)@ __gnuc_va_list)@' \\\n"
" -e 's@GNUC_VA_LIST@GNUC_Va_LIST@' \\\n"
" -e 's@_NEED___VA_LIST@_NEED___Va_LIST@' \\\n"
" -e 's@VA_LIST@DUMMY_VA_LIST@' \\\n"
" -e 's@_Va_LIST@_VA_LIST@'",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 68 - Sun_Bogus_Ifdef fix
*/
tSCC zSun_Bogus_IfdefName[] =
"Sun_Bogus_Ifdef";
/*
* File name selection pattern
*/
tSCC zSun_Bogus_IfdefList[] =
"|" "hsfs/hsfs_spec.h"
"|" "hsfs/iso_spec.h" "|";
/*
* content selection pattern
*/
tSCC zSun_Bogus_IfdefSelect0[] =
"#ifdef __i386__ || __vax__";
#define SUN_BOGUS_IFDEF_TEST_CT 1
tTestDesc aSun_Bogus_IfdefTests[] = {
{ TT_EGREP, zSun_Bogus_IfdefSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Sun_Bogus_Ifdef
*/
const char* apzSun_Bogus_IfdefPatch[] = { "sed",
"-e" "s/\\#ifdef __i386__ || __vax__/\\#if __i386__ || __vax__/g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 69 - Sun_Bogus_Ifdef_Sun4c fix
*/
tSCC zSun_Bogus_Ifdef_Sun4cName[] =
"Sun_Bogus_Ifdef_Sun4c";
/*
* File name selection pattern
*/
tSCC zSun_Bogus_Ifdef_Sun4cList[] =
"|" "hsfs/hsnode.h" "|";
/*
* content selection pattern
*/
tSCC zSun_Bogus_Ifdef_Sun4cSelect0[] =
"#ifdef __i386__ || __sun4c__";
#define SUN_BOGUS_IFDEF_SUN4C_TEST_CT 1
tTestDesc aSun_Bogus_Ifdef_Sun4cTests[] = {
{ TT_EGREP, zSun_Bogus_Ifdef_Sun4cSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Sun_Bogus_Ifdef_Sun4c
*/
const char* apzSun_Bogus_Ifdef_Sun4cPatch[] = { "sed",
"-e" "s/\\#ifdef __i386__ || __sun4c__/\\#if __i386__ || __sun4c__/g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 70 - Sun_Catmacro fix
*/
tSCC zSun_CatmacroName[] =
"Sun_Catmacro";
/*
* File name selection pattern
*/
tSCC zSun_CatmacroList[] =
"|" "pixrect/memvar.h" "|";
/*
* content selection pattern
*/
tSCC zSun_CatmacroSelect0[] =
"^#define[ \t]+CAT(a,b)";
#define SUN_CATMACRO_TEST_CT 1
tTestDesc aSun_CatmacroTests[] = {
{ TT_EGREP, zSun_CatmacroSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Sun_Catmacro
*/
const char* apzSun_CatmacroPatch[] = { "sed",
"-e" "/^#define[ \t]CAT(a,b)/ i\\\n"
"#ifdef __STDC__ \\\n"
"#define CAT(a,b) a##b\\\n"
"#else",
"-e" "/^#define[ \t]CAT(a,b)/ a\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 71 - Sun_Malloc fix
*/
tSCC zSun_MallocName[] =
"Sun_Malloc";
/*
* File name selection pattern
*/
tSCC zSun_MallocList[] =
"|" "malloc.h" "|";
#define SUN_MALLOC_TEST_CT 0
#define aSun_MallocTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Sun_Malloc
*/
const char* apzSun_MallocPatch[] = { "sed",
"-e" "s/typedef[ \t]char \\*\tmalloc_t/typedef void \\*\tmalloc_t/g",
"-e" "s/int[ \t][ \t]*free/void\tfree/g",
"-e" "s/char\\([ \t]*\\*[ \t]*malloc\\)/void\\1/g",
"-e" "s/char\\([ \t]*\\*[ \t]*realloc\\)/void\\1/g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 72 - Sun_Memcpy fix
*/
tSCC zSun_MemcpyName[] =
"Sun_Memcpy";
/*
* File name selection pattern
*/
tSCC zSun_MemcpyList[] =
"|" "memory.h" "|";
/*
* content selection pattern
*/
tSCC zSun_MemcpySelect0[] =
"/\\*\t@\\(#\\)(head/memory.h\t50.1\t |memory\\.h 1\\.[2-4] 8./../.. SMI; from S5R2 1\\.2\t)\\*/";
#define SUN_MEMCPY_TEST_CT 1
tTestDesc aSun_MemcpyTests[] = {
{ TT_EGREP, zSun_MemcpySelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Sun_Memcpy
*/
const char* apzSun_MemcpyPatch[] = { "sed",
"-e" "1i\\\n"
"/* This file was generated by fixincludes */\\\n"
"#ifndef __memory_h__\\\n"
"#define __memory_h__\\\n"
"\\\n"
"#ifdef __STDC__\\\n"
"extern void *memccpy();\\\n"
"extern void *memchr();\\\n"
"extern void *memcpy();\\\n"
"extern void *memset();\\\n"
"#else\\\n"
"extern char *memccpy();\\\n"
"extern char *memchr();\\\n"
"extern char *memcpy();\\\n"
"extern char *memset();\\\n"
"#endif /* __STDC__ */\\\n"
"\\\n"
"extern int memcmp();\\\n"
"\\\n"
"#endif /* __memory_h__ */",
"-e" "1,$d",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 73 - Sun_Rusers_Semi fix
*/
tSCC zSun_Rusers_SemiName[] =
"Sun_Rusers_Semi";
/*
* File name selection pattern
*/
tSCC zSun_Rusers_SemiList[] =
"|" "rpcsvc/rusers.h" "|";
/*
* content selection pattern
*/
tSCC zSun_Rusers_SemiSelect0[] =
"_cnt$";
#define SUN_RUSERS_SEMI_TEST_CT 1
tTestDesc aSun_Rusers_SemiTests[] = {
{ TT_EGREP, zSun_Rusers_SemiSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Sun_Rusers_Semi
*/
const char* apzSun_Rusers_SemiPatch[] = { "sed",
"-e" "/^struct/,/^};/s/_cnt$/_cnt;/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 74 - Sun_Signal fix
*/
tSCC zSun_SignalName[] =
"Sun_Signal";
/*
* File name selection pattern
*/
tSCC zSun_SignalList[] =
"|" "sys/signal.h"
"|" "signal.h" "|";
/*
* content selection pattern
*/
tSCC zSun_SignalSelect0[] =
"^void\t\\(\\*signal\\(\\)\\)\\(\\);";
#define SUN_SIGNAL_TEST_CT 1
tTestDesc aSun_SignalTests[] = {
{ TT_EGREP, zSun_SignalSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Sun_Signal
*/
const char* apzSun_SignalPatch[] = { "sed",
"-e" "/^void\t(\\*signal())();$/i\\\n"
"#ifdef __cplusplus\\\n"
"void\t(*signal(...))(...);\\\n"
"#else",
"-e" "/^void\t(\\*signal())();$/a\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 75 - Sun_Xdr_Proto fix
*/
tSCC zSun_Xdr_ProtoName[] =
"Sun_Xdr_Proto";
/*
* File name selection pattern
*/
tSCC zSun_Xdr_ProtoList[] =
"|" "rpc/xdr.h" "|";
#define SUN_XDR_PROTO_TEST_CT 0
#define aSun_Xdr_ProtoTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Sun_Xdr_Proto
*/
const char* apzSun_Xdr_ProtoPatch[] = { "sed",
"-e" "s/^\\(.*\\)\\*\\(x_.*\\)();\\(.*\\)/\\\n"
"#ifdef __cplusplus\\\n"
"\\1*\\2(...);\\3\\\n"
"#else\\\n"
"\\1*\\2();\\3\\\n"
"#endif/g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 76 - Sunos_Large_Macro fix
*/
tSCC zSunos_Large_MacroName[] =
"Sunos_Large_Macro";
/*
* File name selection pattern
*/
tSCC zSunos_Large_MacroList[] =
"|" "sundev/ipi_error.h" "|";
#define SUNOS_LARGE_MACRO_TEST_CT 0
#define aSunos_Large_MacroTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Sunos_Large_Macro
*/
const char* apzSunos_Large_MacroPatch[] = { "sh", "-c",
"echo \"Removing incorrect fix to SunOS <sundev/ipi_error.h>\" >&2\n"
"rm -f ${DESTDIR}/$file ${DESTDIR}/$file.\n"
"cat > /dev/null",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 77 - Sunos_Matherr_Decl fix
*/
tSCC zSunos_Matherr_DeclName[] =
"Sunos_Matherr_Decl";
/*
* File name selection pattern
*/
tSCC zSunos_Matherr_DeclList[] =
"|" "math.h" "|";
/*
* content test pattern. A shell will deal with it later.
*/
tSCC zSunos_Matherr_DeclTest0[] =
"\"`fgrep 'struct exception' $file | line`\" != 'struct exception {'";
#define SUNOS_MATHERR_DECL_TEST_CT 1
tTestDesc aSunos_Matherr_DeclTests[] = {
{ TT_TEST, zSunos_Matherr_DeclTest0, 0 /* unused */ }, };
/*
* Fix Command Arguments for Sunos_Matherr_Decl
*/
const char* apzSunos_Matherr_DeclPatch[] = { "sed",
"-e" "/matherr/i\\\n"
"struct exception;",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 78 - Sunos_Strlen fix
*/
tSCC zSunos_StrlenName[] =
"Sunos_Strlen";
/*
* File name selection pattern
*/
tSCC zSunos_StrlenList[] =
"|" "strings.h" "|";
#define SUNOS_STRLEN_TEST_CT 0
#define aSunos_StrlenTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Sunos_Strlen
*/
const char* apzSunos_StrlenPatch[] = { "sed",
"-e" "s/int[ \t]*strlen();/__SIZE_TYPE__ strlen();/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 79 - Systypes fix
*/
tSCC zSystypesName[] =
"Systypes";
/*
* File name selection pattern
*/
tSCC zSystypesList[] =
"|" "sys/types.h"
"|" "stdlib.h"
"|" "sys/stdtypes.h"
"|" "stddef.h"
"|" "memory.h"
"|" "unistd.h" "|";
/*
* content selection pattern
*/
tSCC zSystypesSelect0[] =
"typedef[ \t]+[a-z_][ \ta-z_]*[ \t](size|ptrdiff|wchar)_t";
#define SYSTYPES_TEST_CT 1
tTestDesc aSystypesTests[] = {
{ TT_EGREP, zSystypesSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Systypes
*/
const char* apzSystypesPatch[] = { "sed",
"-e" "/^[ \t]**[ \t]*typedef unsigned int size_t;/N",
"-e" "s/^\\([ \t]*\\*[ \t]*typedef unsigned int size_t;\\n[ \t]*\\*\\/\\)/\\1\\\n"
"#ifndef __SIZE_TYPE__\\\n"
"#define __SIZE_TYPE__ long unsigned int\\\n"
"#endif\\\n"
"typedef __SIZE_TYPE__ size_t;\\\n"
"/",
"-e" "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]size_t/i\\\n"
"#ifndef __SIZE_TYPE__\\\n"
"#define __SIZE_TYPE__ long unsigned int\\\n"
"#endif",
"-e" "s/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]size_t/typedef __SIZE_TYPE__ size_t/",
"-e" "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]ptrdiff_t/i\\\n"
"#ifndef __PTRDIFF_TYPE__\\\n"
"#define __PTRDIFF_TYPE__ long int\\\n"
"#endif",
"-e" "s/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]ptrdiff_t/typedef __PTRDIFF_TYPE__ ptrdiff_t/",
"-e" "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]wchar_t/i\\\n"
"#ifndef __WCHAR_TYPE__\\\n"
"#define __WCHAR_TYPE__ int\\\n"
"#endif\\\n"
"#ifndef __cplusplus",
"-e" "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]wchar_t/a\\\n"
"#endif",
"-e" "s/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]wchar_t/typedef __WCHAR_TYPE__ wchar_t/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 80 - Systypes_For_Aix fix
*/
tSCC zSystypes_For_AixName[] =
"Systypes_For_Aix";
/*
* File name selection pattern
*/
tSCC zSystypes_For_AixList[] =
"|" "sys/types.h" "|";
/*
* content selection pattern
*/
tSCC zSystypes_For_AixSelect0[] =
"typedef[ \t][ \t]*[A-Za-z_][ \tA-Za-z_]*[ \t]size_t";
#define SYSTYPES_FOR_AIX_TEST_CT 1
tTestDesc aSystypes_For_AixTests[] = {
{ TT_EGREP, zSystypes_For_AixSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Systypes_For_Aix
*/
const char* apzSystypes_For_AixPatch[] = { "sed",
"-e" "/typedef[ \t][ \t]*[A-Za-z_][ \tA-Za-z_]*[ \t]size_t/i\\\n"
"#ifndef _GCC_SIZE_T\\\n"
"#define _GCC_SIZE_T",
"-e" "/typedef[ \t][ \t]*[A-Za-z_][ \tA-Za-z_]*[ \t]size_t/a\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 81 - Sysv68_String fix
*/
tSCC zSysv68_StringName[] =
"Sysv68_String";
/*
* File name selection pattern
*/
tSCC zSysv68_StringList[] =
"|" "string.h" "|";
#define SYSV68_STRING_TEST_CT 0
#define aSysv68_StringTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Sysv68_String
*/
const char* apzSysv68_StringPatch[] = { "sed",
"-e" "s/extern[ \t]*int[ \t]*strlen();/extern unsigned int strlen();/",
"-e" "s/extern[ \t]*int[ \t]*ffs[ \t]*(long);/extern int ffs(int);/",
"-e" "s/strdup(char \\*s1);/strdup(const char *s1);/",
"-e" "/^extern char$/N",
"-e" "s/^extern char\\(\\n\t\\*memccpy(),\\)$/extern void\\1/",
"-e" "/^\tstrncmp(),$/N",
"-e" "s/^\\(\tstrncmp()\\),\\n\\(\tstrlen(),\\)$/\\1;\\\n"
"extern unsigned int\\\n"
"\\2/",
"-e" "/^extern int$/N",
"-e" "s/^extern int\\(\\n\tstrlen(),\\)/extern size_t\\1/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 82 - Sysz_Stdlib_For_Sun fix
*/
tSCC zSysz_Stdlib_For_SunName[] =
"Sysz_Stdlib_For_Sun";
/*
* File name selection pattern
*/
tSCC zSysz_Stdlib_For_SunList[] =
"|" "stdlib.h" "|";
#define SYSZ_STDLIB_FOR_SUN_TEST_CT 0
#define aSysz_Stdlib_For_SunTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Sysz_Stdlib_For_Sun
*/
const char* apzSysz_Stdlib_For_SunPatch[] = { "sed",
"-e" "s/int\tabort/void\tabort/g",
"-e" "s/int\tfree/void\tfree/g",
"-e" "s/char[ \t]*\\*[ \t]*calloc/void \\*\tcalloc/g",
"-e" "s/char[ \t]*\\*[ \t]*malloc/void \\*\tmalloc/g",
"-e" "s/char[ \t]*\\*[ \t]*realloc/void \\*\trealloc/g",
"-e" "s/int[ \t][ \t]*exit/void\texit/g",
"-e" "/typedef[ \ta-zA-Z_]*[ \t]size_t[ \t]*;/i\\\n"
"#ifndef _GCC_SIZE_T\\\n"
"#define _GCC_SIZE_T",
"-e" "/typedef[ \ta-zA-Z_]*[ \t]size_t[ \t]*;/a\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 83 - Sysz_Stdtypes_For_Sun fix
*/
tSCC zSysz_Stdtypes_For_SunName[] =
"Sysz_Stdtypes_For_Sun";
/*
* File name selection pattern
*/
tSCC zSysz_Stdtypes_For_SunList[] =
"|" "sys/stdtypes.h" "|";
#define SYSZ_STDTYPES_FOR_SUN_TEST_CT 0
#define aSysz_Stdtypes_For_SunTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Sysz_Stdtypes_For_Sun
*/
const char* apzSysz_Stdtypes_For_SunPatch[] = { "sed",
"-e" "/[\t ]size_t.*;/i\\\n"
"#ifndef _GCC_SIZE_T\\\n"
"#define _GCC_SIZE_T",
"-e" "/[\t ]size_t.*;/a\\\n"
"#endif",
"-e" "/[\t ]ptrdiff_t.*;/i\\\n"
"#ifndef _GCC_PTRDIFF_T\\\n"
"#define _GCC_PTRDIFF_T",
"-e" "/[\t ]ptrdiff_t.*;/a\\\n"
"#endif",
"-e" "/[\t ]wchar_t.*;/i\\\n"
"#ifndef _GCC_WCHAR_T\\\n"
"#define _GCC_WCHAR_T",
"-e" "/[\t ]wchar_t.*;/a\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 84 - Tinfo_Cplusplus fix
*/
tSCC zTinfo_CplusplusName[] =
"Tinfo_Cplusplus";
/*
* File name selection pattern
*/
tSCC zTinfo_CplusplusList[] =
"|" "tinfo.h" "|";
#define TINFO_CPLUSPLUS_TEST_CT 0
#define aTinfo_CplusplusTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Tinfo_Cplusplus
*/
const char* apzTinfo_CplusplusPatch[] = { "sed",
"-e" "s/[ \t]_cplusplus/ __cplusplus/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 85 - Ultrix_Ansi_Compat fix
*/
tSCC zUltrix_Ansi_CompatName[] =
"Ultrix_Ansi_Compat";
/*
* File name selection pattern
*/
tSCC zUltrix_Ansi_CompatList[] =
"|" "ansi_compat.h" "|";
/*
* content selection pattern
*/
tSCC zUltrix_Ansi_CompatSelect0[] =
"ULTRIX";
#define ULTRIX_ANSI_COMPAT_TEST_CT 1
tTestDesc aUltrix_Ansi_CompatTests[] = {
{ TT_EGREP, zUltrix_Ansi_CompatSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Ultrix_Ansi_Compat
*/
const char* apzUltrix_Ansi_CompatPatch[] = { "sed",
"-e" "1i\\\n"
"/* This file intentionally left blank. */",
"-e" "1,$d",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 86 - Ultrix_Atof_Param fix
*/
tSCC zUltrix_Atof_ParamName[] =
"Ultrix_Atof_Param";
/*
* File name selection pattern
*/
tSCC zUltrix_Atof_ParamList[] =
"|" "math.h" "|";
#define ULTRIX_ATOF_PARAM_TEST_CT 0
#define aUltrix_Atof_ParamTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Ultrix_Atof_Param
*/
const char* apzUltrix_Atof_ParamPatch[] = { "sed",
"-e" "s@atof(\\([ \t]*char[ \t]*\\*[^)]*\\))@atof(const \\1)@",
"-e" "s@inline int abs(int [a-z][a-z]*) {.*}@extern \"C\" int abs(int);@",
"-e" "s@inline double abs(double [a-z][a-z]*) {.*}@@",
"-e" "s@inline int sqr(int [a-z][a-z]*) {.*}@@",
"-e" "s@inline double sqr(double [a-z][a-z]*) {.*}@@",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 87 - Ultrix_Const fix
*/
tSCC zUltrix_ConstName[] =
"Ultrix_Const";
/*
* File name selection pattern
*/
tSCC zUltrix_ConstList[] =
"|" "stdio.h" "|";
#define ULTRIX_CONST_TEST_CT 0
#define aUltrix_ConstTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Ultrix_Const
*/
const char* apzUltrix_ConstPatch[] = { "sed",
"-e" "s@perror( char \\*__s );@perror( const char *__s );@",
"-e" "s@fputs( char \\*__s,@fputs( const char *__s,@",
"-e" "s@fopen( char \\*__filename, char \\*__type );@fopen( const char *__filename, const char *__type );@",
"-e" "s@fwrite( void \\*__ptr,@fwrite( const void *__ptr,@",
"-e" "s@fscanf( FILE \\*__stream, char \\*__format,@fscanf( FILE *__stream, const char *__format,@",
"-e" "s@scanf( char \\*__format,@scanf( const char *__format,@",
"-e" "s@sscanf( char \\*__s, char \\*__format,@sscanf( const char *__s, const char *__format,@",
"-e" "s@popen(char \\*, char \\*);@popen(const char *, const char *);@",
"-e" "s@tempnam(char\\*,char\\*);@tempnam(const char*,const char*);@",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 88 - Ultrix_Ifdef fix
*/
tSCC zUltrix_IfdefName[] =
"Ultrix_Ifdef";
/*
* File name selection pattern
*/
tSCC zUltrix_IfdefList[] =
"|" "sys/file.h" "|";
/*
* content selection pattern
*/
tSCC zUltrix_IfdefSelect0[] =
"#ifdef KERNEL";
#define ULTRIX_IFDEF_TEST_CT 1
tTestDesc aUltrix_IfdefTests[] = {
{ TT_EGREP, zUltrix_IfdefSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Ultrix_Ifdef
*/
const char* apzUltrix_IfdefPatch[] = { "sed",
"-e" "s/#ifdef KERNEL/#if defined(KERNEL)/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 89 - Ultrix_Nested_Cmnt fix
*/
tSCC zUltrix_Nested_CmntName[] =
"Ultrix_Nested_Cmnt";
/*
* File name selection pattern
*/
tSCC zUltrix_Nested_CmntList[] =
"|" "rpc/svc.h" "|";
#define ULTRIX_NESTED_CMNT_TEST_CT 0
#define aUltrix_Nested_CmntTests (tTestDesc*)NULL
/*
* Fix Command Arguments for Ultrix_Nested_Cmnt
*/
const char* apzUltrix_Nested_CmntPatch[] = { "sed",
"-e" "s@^\\( \\*\tint protocol; \\)/\\*@\\1*/ /*@",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 90 - Ultrix_Static fix
*/
tSCC zUltrix_StaticName[] =
"Ultrix_Static";
/*
* File name selection pattern
*/
tSCC zUltrix_StaticList[] =
"|" "machine/cpu.h" "|";
/*
* content selection pattern
*/
tSCC zUltrix_StaticSelect0[] =
"#include \"r[34]_cpu";
#define ULTRIX_STATIC_TEST_CT 1
tTestDesc aUltrix_StaticTests[] = {
{ TT_EGREP, zUltrix_StaticSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Ultrix_Static
*/
const char* apzUltrix_StaticPatch[] = { "sed",
"-e" "s/^static struct tlb_pid_state/struct tlb_pid_state/",
"-e" "s/^#include \"r3_cpu\\.h\"$/#include <machine\\/r3_cpu\\.h>/",
"-e" "s/^#include \"r4_cpu\\.h\"$/#include <machine\\/r4_cpu\\.h>/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 91 - Undefine_Null fix
*/
tSCC zUndefine_NullName[] =
"Undefine_Null";
/*
* File name selection pattern
*/
#define zUndefine_NullList (char*)NULL
/*
* content selection pattern
*/
tSCC zUndefine_NullSelect0[] =
"^#[ \t]*define[ \t]*[ \t]NULL[ \t]";
/*
* content bypass pattern
*/
tSCC zUndefine_NullBypass0[] =
"#[ \t]*(ifn|un)def[ \t]*[ \t]NULL($|[ \t])";
#define UNDEFINE_NULL_TEST_CT 2
tTestDesc aUndefine_NullTests[] = {
{ TT_NEGREP, zUndefine_NullBypass0, (regex_t*)NULL },
{ TT_EGREP, zUndefine_NullSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Undefine_Null
*/
const char* apzUndefine_NullPatch[] = { "sed",
"-e" "/^#[ \t]*define[ \t][ \t]*NULL[ \t]/i\\\n"
"#undef NULL",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 92 - Va_I960_Macro fix
*/
tSCC zVa_I960_MacroName[] =
"Va_I960_Macro";
/*
* File name selection pattern
*/
tSCC zVa_I960_MacroList[] =
"|" "arch/i960/archI960.h" "|";
/*
* content selection pattern
*/
tSCC zVa_I960_MacroSelect0[] =
"__(vsiz|vali|vpad|alignof__)";
#define VA_I960_MACRO_TEST_CT 1
tTestDesc aVa_I960_MacroTests[] = {
{ TT_EGREP, zVa_I960_MacroSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Va_I960_Macro
*/
const char* apzVa_I960_MacroPatch[] = { "sed",
"-e" "s/__vsiz/__vxvsiz/",
"-e" "s/__vali/__vxvali/",
"-e" "s/__vpad/__vxvpad/",
"-e" "s/__alignof__/__vxalignof__/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 93 - Void_Null fix
*/
tSCC zVoid_NullName[] =
"Void_Null";
/*
* File name selection pattern
*/
tSCC zVoid_NullList[] =
"|" "curses.h"
"|" "dbm.h"
"|" "locale.h"
"|" "stdio.h"
"|" "stdlib.h"
"|" "string.h"
"|" "time.h"
"|" "unistd.h"
"|" "sys/dir.h"
"|" "sys/param.h"
"|" "sys/types.h" "|";
/*
* content selection pattern
*/
tSCC zVoid_NullSelect0[] =
"#[ \t]*define[ \t][ \t]*NULL[ \t].*void";
#define VOID_NULL_TEST_CT 1
tTestDesc aVoid_NullTests[] = {
{ TT_EGREP, zVoid_NullSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Void_Null
*/
const char* apzVoid_NullPatch[] = { "sed",
"-e" "s/^#[ \t]*define[ \t]*NULL[ \t]*((void[ \t]*\\*)0)/#define NULL 0/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 94 - Vxworks_Gcc_Problem fix
*/
tSCC zVxworks_Gcc_ProblemName[] =
"Vxworks_Gcc_Problem";
/*
* File name selection pattern
*/
tSCC zVxworks_Gcc_ProblemList[] =
"|" "types/vxTypesBase.h" "|";
/*
* content selection pattern
*/
tSCC zVxworks_Gcc_ProblemSelect0[] =
"__GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__";
#define VXWORKS_GCC_PROBLEM_TEST_CT 1
tTestDesc aVxworks_Gcc_ProblemTests[] = {
{ TT_EGREP, zVxworks_Gcc_ProblemSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Vxworks_Gcc_Problem
*/
const char* apzVxworks_Gcc_ProblemPatch[] = { "sed",
"-e" "s/#ifdef __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__/#if 1/",
"-e" "/[ \t]size_t/i\\\n"
"#ifndef _GCC_SIZE_T\\\n"
"#define _GCC_SIZE_T",
"-e" "/[ \t]size_t/a\\\n"
"#endif",
"-e" "/[ \t]ptrdiff_t/i\\\n"
"#ifndef _GCC_PTRDIFF_T\\\n"
"#define _GCC_PTRDIFF_T",
"-e" "/[ \t]ptrdiff_t/a\\\n"
"#endif",
"-e" "/[ \t]wchar_t/i\\\n"
"#ifndef _GCC_WCHAR_T\\\n"
"#define _GCC_WCHAR_T",
"-e" "/[ \t]wchar_t/a\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 95 - Vxworks_Needs_Vxtypes fix
*/
tSCC zVxworks_Needs_VxtypesName[] =
"Vxworks_Needs_Vxtypes";
/*
* File name selection pattern
*/
tSCC zVxworks_Needs_VxtypesList[] =
"|" "time.h" "|";
/*
* content selection pattern
*/
tSCC zVxworks_Needs_VxtypesSelect0[] =
"uint_t[ \t][ \t]*_clocks_per_sec";
#define VXWORKS_NEEDS_VXTYPES_TEST_CT 1
tTestDesc aVxworks_Needs_VxtypesTests[] = {
{ TT_EGREP, zVxworks_Needs_VxtypesSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Vxworks_Needs_Vxtypes
*/
const char* apzVxworks_Needs_VxtypesPatch[] = { "sed",
"-e" "s/uint_t/unsigned int/",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 96 - Vxworks_Needs_Vxworks fix
*/
tSCC zVxworks_Needs_VxworksName[] =
"Vxworks_Needs_Vxworks";
/*
* File name selection pattern
*/
tSCC zVxworks_Needs_VxworksList[] =
"|" "sys/stat.h" "|";
/*
* content selection pattern
*/
tSCC zVxworks_Needs_VxworksSelect0[] =
"#[ \t]define[ \t][ \t]*__INCstath";
/*
* content test pattern. A shell will deal with it later.
*/
tSCC zVxworks_Needs_VxworksTest0[] =
"-r types/vxTypesOld.h";
tSCC zVxworks_Needs_VxworksTest1[] =
"-n \"`fgrep '#include' $file`\"";
tSCC zVxworks_Needs_VxworksTest2[] =
"-n \"`fgrep ULONG $file`\"";
#define VXWORKS_NEEDS_VXWORKS_TEST_CT 4
tTestDesc aVxworks_Needs_VxworksTests[] = {
{ TT_TEST, zVxworks_Needs_VxworksTest0, 0 /* unused */ },
{ TT_TEST, zVxworks_Needs_VxworksTest1, 0 /* unused */ },
{ TT_TEST, zVxworks_Needs_VxworksTest2, 0 /* unused */ },
{ TT_EGREP, zVxworks_Needs_VxworksSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Vxworks_Needs_Vxworks
*/
const char* apzVxworks_Needs_VxworksPatch[] = { "sed",
"-e" "/#[ \t]define[ \t][ \t]*__INCstath/a\\\n"
"#include <types/vxTypesOld.h>",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 97 - Vxworks_Time fix
*/
tSCC zVxworks_TimeName[] =
"Vxworks_Time";
/*
* File name selection pattern
*/
tSCC zVxworks_TimeList[] =
"|" "time.h" "|";
/*
* content selection pattern
*/
tSCC zVxworks_TimeSelect0[] =
"VOIDFUNCPTR";
/*
* content test pattern. A shell will deal with it later.
*/
tSCC zVxworks_TimeTest0[] =
"-r vxWorks.h";
#define VXWORKS_TIME_TEST_CT 2
tTestDesc aVxworks_TimeTests[] = {
{ TT_TEST, zVxworks_TimeTest0, 0 /* unused */ },
{ TT_EGREP, zVxworks_TimeSelect0, (regex_t*)NULL } };
/*
* Fix Command Arguments for Vxworks_Time
*/
const char* apzVxworks_TimePatch[] = { "sed",
"-e" "/VOIDFUNCPTR/i\\\n"
"#ifndef __gcc_VOIDFUNCPTR_defined\\\n"
"#ifdef __cplusplus\\\n"
"typedef void (*__gcc_VOIDFUNCPTR) (...);\\\n"
"#else\\\n"
"typedef void (*__gcc_VOIDFUNCPTR) ();\\\n"
"#endif\\\n"
"#define __gcc_VOIDFUNCPTR_defined\\\n"
"#endif",
"-e" "s/VOIDFUNCPTR/__gcc_VOIDFUNCPTR/g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 98 - X11_Class fix
*/
tSCC zX11_ClassName[] =
"X11_Class";
/*
* File name selection pattern
*/
tSCC zX11_ClassList[] =
"|" "X11/ShellP.h" "|";
/*
* content bypass pattern
*/
tSCC zX11_ClassBypass0[] =
"__cplusplus";
#define X11_CLASS_TEST_CT 1
tTestDesc aX11_ClassTests[] = {
{ TT_NEGREP, zX11_ClassBypass0, (regex_t*)NULL }, };
/*
* Fix Command Arguments for X11_Class
*/
const char* apzX11_ClassPatch[] = { "sed",
"-e" "/char [*]class;/i\\\n"
"#ifdef __cplusplus\\\n"
"\tchar *c_class;\\\n"
"#else",
"-e" "/char [*]class;/a\\\n"
"#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 99 - X11_Class_Usage fix
*/
tSCC zX11_Class_UsageName[] =
"X11_Class_Usage";
/*
* File name selection pattern
*/
tSCC zX11_Class_UsageList[] =
"|" "Xm/BaseClassI.h" "|";
/*
* content bypass pattern
*/
tSCC zX11_Class_UsageBypass0[] =
"__cplusplus";
#define X11_CLASS_USAGE_TEST_CT 1
tTestDesc aX11_Class_UsageTests[] = {
{ TT_NEGREP, zX11_Class_UsageBypass0, (regex_t*)NULL }, };
/*
* Fix Command Arguments for X11_Class_Usage
*/
const char* apzX11_Class_UsagePatch[] = { "sed",
"-e" "s/ class[)]/ c_class)/g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 100 - X11_New fix
*/
tSCC zX11_NewName[] =
"X11_New";
/*
* File name selection pattern
*/
tSCC zX11_NewList[] =
"|" "Xm/Traversal.h" "|";
/*
* content bypass pattern
*/
tSCC zX11_NewBypass0[] =
"__cplusplus";
#define X11_NEW_TEST_CT 1
tTestDesc aX11_NewTests[] = {
{ TT_NEGREP, zX11_NewBypass0, (regex_t*)NULL }, };
/*
* Fix Command Arguments for X11_New
*/
const char* apzX11_NewPatch[] = { "sed",
"-e" "/Widget\told, new;/i\\\n"
"#ifdef __cplusplus\\\n"
"\tWidget\told, c_new;\\\n"
"#else",
"-e" "/Widget\told, new;/a\\\n"
"#endif",
"-e" "s/Widget new,/Widget c_new,/g",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description 101 - X11_Sprintf fix
*/
tSCC zX11_SprintfName[] =
"X11_Sprintf";
/*
* File name selection pattern
*/
tSCC zX11_SprintfList[] =
"|" "X11*/Xmu.h" "|";
#define X11_SPRINTF_TEST_CT 0
#define aX11_SprintfTests (tTestDesc*)NULL
/*
* Fix Command Arguments for X11_Sprintf
*/
const char* apzX11_SprintfPatch[] = { "sed",
"-e" "s,^extern char \\*\tsprintf();$,#ifndef __STDC__\\\n"
"extern char *\tsprintf();\\\n"
"#endif /* !defined __STDC__ */,",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* List of all fixes
*/
#define REGEX_COUNT 69
#define FIX_COUNT 101
tFixDesc fixDescList[ 101 ] = {
{ zAix_SyswaitName, zAix_SyswaitList, (regex_t*)NULL,
AIX_SYSWAIT_TEST_CT, aAix_SyswaitTests,
apzAix_SyswaitPatch },
{ zAix_VolatileName, zAix_VolatileList, (regex_t*)NULL,
AIX_VOLATILE_TEST_CT, aAix_VolatileTests,
apzAix_VolatilePatch },
{ zAlpha_GetoptName, zAlpha_GetoptList, (regex_t*)NULL,
ALPHA_GETOPT_TEST_CT, aAlpha_GetoptTests,
apzAlpha_GetoptPatch },
{ zAlpha_ParensName, zAlpha_ParensList, (regex_t*)NULL,
ALPHA_PARENS_TEST_CT, aAlpha_ParensTests,
apzAlpha_ParensPatch },
{ zAlpha_SbrkName, zAlpha_SbrkList, (regex_t*)NULL,
ALPHA_SBRK_TEST_CT, aAlpha_SbrkTests,
apzAlpha_SbrkPatch },
{ zArm_Norcroft_HintName, zArm_Norcroft_HintList, (regex_t*)NULL,
ARM_NORCROFT_HINT_TEST_CT, aArm_Norcroft_HintTests,
apzArm_Norcroft_HintPatch },
{ zArm_WcharName, zArm_WcharList, (regex_t*)NULL,
ARM_WCHAR_TEST_CT, aArm_WcharTests,
apzArm_WcharPatch },
{ zAux_AsmName, zAux_AsmList, (regex_t*)NULL,
AUX_ASM_TEST_CT, aAux_AsmTests,
apzAux_AsmPatch },
{ zAvoid_BoolName, zAvoid_BoolList, (regex_t*)NULL,
AVOID_BOOL_TEST_CT, aAvoid_BoolTests,
apzAvoid_BoolPatch },
{ zBad_Malloc_DeclName, zBad_Malloc_DeclList, (regex_t*)NULL,
BAD_MALLOC_DECL_TEST_CT, aBad_Malloc_DeclTests,
apzBad_Malloc_DeclPatch },
{ zBad_Struct_TermName, zBad_Struct_TermList, (regex_t*)NULL,
BAD_STRUCT_TERM_TEST_CT, aBad_Struct_TermTests,
apzBad_Struct_TermPatch },
{ zBadquoteName, zBadquoteList, (regex_t*)NULL,
BADQUOTE_TEST_CT, aBadquoteTests,
apzBadquotePatch },
{ zBroken_Assert_StdioName, zBroken_Assert_StdioList, (regex_t*)NULL,
BROKEN_ASSERT_STDIO_TEST_CT, aBroken_Assert_StdioTests,
apzBroken_Assert_StdioPatch },
{ zBroken_Assert_StdlibName, zBroken_Assert_StdlibList, (regex_t*)NULL,
BROKEN_ASSERT_STDLIB_TEST_CT, aBroken_Assert_StdlibTests,
apzBroken_Assert_StdlibPatch },
{ zBsd43_Io_MacrosName, zBsd43_Io_MacrosList, (regex_t*)NULL,
BSD43_IO_MACROS_TEST_CT, aBsd43_Io_MacrosTests,
apzBsd43_Io_MacrosPatch },
{ zCxx_Cmnt_HpuxName, zCxx_Cmnt_HpuxList, (regex_t*)NULL,
CXX_CMNT_HPUX_TEST_CT, aCxx_Cmnt_HpuxTests,
apzCxx_Cmnt_HpuxPatch },
{ zCxx_Cmnt_IrixName, zCxx_Cmnt_IrixList, (regex_t*)NULL,
CXX_CMNT_IRIX_TEST_CT, aCxx_Cmnt_IrixTests,
apzCxx_Cmnt_IrixPatch },
{ zCxx_Cmnt_SunosName, zCxx_Cmnt_SunosList, (regex_t*)NULL,
CXX_CMNT_SUNOS_TEST_CT, aCxx_Cmnt_SunosTests,
apzCxx_Cmnt_SunosPatch },
{ zCxx_Cmnt_VxworksName, zCxx_Cmnt_VxworksList, (regex_t*)NULL,
CXX_CMNT_VXWORKS_TEST_CT, aCxx_Cmnt_VxworksTests,
apzCxx_Cmnt_VxworksPatch },
{ zEcd_CursorName, zEcd_CursorList, (regex_t*)NULL,
ECD_CURSOR_TEST_CT, aEcd_CursorTests,
apzEcd_CursorPatch },
{ zElse_LabelName, zElse_LabelList, (regex_t*)NULL,
ELSE_LABEL_TEST_CT, aElse_LabelTests,
apzElse_LabelPatch },
{ zEndif_LabelName, zEndif_LabelList, (regex_t*)NULL,
ENDIF_LABEL_TEST_CT, aEndif_LabelTests,
apzEndif_LabelPatch },
{ zHp_InlineName, zHp_InlineList, (regex_t*)NULL,
HP_INLINE_TEST_CT, aHp_InlineTests,
apzHp_InlinePatch },
{ zHp_SysfileName, zHp_SysfileList, (regex_t*)NULL,
HP_SYSFILE_TEST_CT, aHp_SysfileTests,
apzHp_SysfilePatch },
{ zHpux_Cxx_UnreadyName, zHpux_Cxx_UnreadyList, (regex_t*)NULL,
HPUX_CXX_UNREADY_TEST_CT, aHpux_Cxx_UnreadyTests,
apzHpux_Cxx_UnreadyPatch },
{ zHpux_MaxintName, zHpux_MaxintList, (regex_t*)NULL,
HPUX_MAXINT_TEST_CT, aHpux_MaxintTests,
apzHpux_MaxintPatch },
{ zHpux_SystimeName, zHpux_SystimeList, (regex_t*)NULL,
HPUX_SYSTIME_TEST_CT, aHpux_SystimeTests,
apzHpux_SystimePatch },
{ zInteractv_Add1Name, zInteractv_Add1List, (regex_t*)NULL,
INTERACTV_ADD1_TEST_CT, aInteractv_Add1Tests,
apzInteractv_Add1Patch },
{ zInteractv_Add2Name, zInteractv_Add2List, (regex_t*)NULL,
INTERACTV_ADD2_TEST_CT, aInteractv_Add2Tests,
apzInteractv_Add2Patch },
{ zInteractv_Add3Name, zInteractv_Add3List, (regex_t*)NULL,
INTERACTV_ADD3_TEST_CT, aInteractv_Add3Tests,
apzInteractv_Add3Patch },
{ zIo_Def_QuotesName, zIo_Def_QuotesList, (regex_t*)NULL,
IO_DEF_QUOTES_TEST_CT, aIo_Def_QuotesTests,
apzIo_Def_QuotesPatch },
{ zIoctl_Fix_CtrlName, zIoctl_Fix_CtrlList, (regex_t*)NULL,
IOCTL_FIX_CTRL_TEST_CT, aIoctl_Fix_CtrlTests,
apzIoctl_Fix_CtrlPatch },
{ zIp_Missing_SemiName, zIp_Missing_SemiList, (regex_t*)NULL,
IP_MISSING_SEMI_TEST_CT, aIp_Missing_SemiTests,
apzIp_Missing_SemiPatch },
{ zIrix_Bogus_Cxx_CmntName, zIrix_Bogus_Cxx_CmntList, (regex_t*)NULL,
IRIX_BOGUS_CXX_CMNT_TEST_CT, aIrix_Bogus_Cxx_CmntTests,
apzIrix_Bogus_Cxx_CmntPatch },
{ zIrix_Multiline_CmntName, zIrix_Multiline_CmntList, (regex_t*)NULL,
IRIX_MULTILINE_CMNT_TEST_CT, aIrix_Multiline_CmntTests,
apzIrix_Multiline_CmntPatch },
{ zIrix_SockaddrName, zIrix_SockaddrList, (regex_t*)NULL,
IRIX_SOCKADDR_TEST_CT, aIrix_SockaddrTests,
apzIrix_SockaddrPatch },
{ zIrix_Struct__FileName, zIrix_Struct__FileList, (regex_t*)NULL,
IRIX_STRUCT__FILE_TEST_CT, aIrix_Struct__FileTests,
apzIrix_Struct__FilePatch },
{ zIsc_FmodName, zIsc_FmodList, (regex_t*)NULL,
ISC_FMOD_TEST_CT, aIsc_FmodTests,
apzIsc_FmodPatch },
{ zIsc_Sys_LimitsName, zIsc_Sys_LimitsList, (regex_t*)NULL,
ISC_SYS_LIMITS_TEST_CT, aIsc_Sys_LimitsTests,
apzIsc_Sys_LimitsPatch },
{ zKandr_ConcatName, zKandr_ConcatList, (regex_t*)NULL,
KANDR_CONCAT_TEST_CT, aKandr_ConcatTests,
apzKandr_ConcatPatch },
{ zLimits_IfndefsName, zLimits_IfndefsList, (regex_t*)NULL,
LIMITS_IFNDEFS_TEST_CT, aLimits_IfndefsTests,
apzLimits_IfndefsPatch },
{ zLynx_Void_IntName, zLynx_Void_IntList, (regex_t*)NULL,
LYNX_VOID_INT_TEST_CT, aLynx_Void_IntTests,
apzLynx_Void_IntPatch },
{ zLynxos_Fcntl_ProtoName, zLynxos_Fcntl_ProtoList, (regex_t*)NULL,
LYNXOS_FCNTL_PROTO_TEST_CT, aLynxos_Fcntl_ProtoTests,
apzLynxos_Fcntl_ProtoPatch },
{ zM88k_Bad_Hypot_OptName, zM88k_Bad_Hypot_OptList, (regex_t*)NULL,
M88K_BAD_HYPOT_OPT_TEST_CT, aM88k_Bad_Hypot_OptTests,
apzM88k_Bad_Hypot_OptPatch },
{ zM88k_Bad_S_IfName, zM88k_Bad_S_IfList, (regex_t*)NULL,
M88K_BAD_S_IF_TEST_CT, aM88k_Bad_S_IfTests,
apzM88k_Bad_S_IfPatch },
{ zM88k_Multi_InclName, zM88k_Multi_InclList, (regex_t*)NULL,
M88K_MULTI_INCL_TEST_CT, aM88k_Multi_InclTests,
apzM88k_Multi_InclPatch },
{ zMachine_NameName, zMachine_NameList, (regex_t*)NULL,
MACHINE_NAME_TEST_CT, aMachine_NameTests,
apzMachine_NamePatch },
{ zMath_ExceptionName, zMath_ExceptionList, (regex_t*)NULL,
MATH_EXCEPTION_TEST_CT, aMath_ExceptionTests,
apzMath_ExceptionPatch },
{ zMath_Gcc_IfndefsName, zMath_Gcc_IfndefsList, (regex_t*)NULL,
MATH_GCC_IFNDEFS_TEST_CT, aMath_Gcc_IfndefsTests,
apzMath_Gcc_IfndefsPatch },
{ zMotorola_Stupid_OptName, zMotorola_Stupid_OptList, (regex_t*)NULL,
MOTOROLA_STUPID_OPT_TEST_CT, aMotorola_Stupid_OptTests,
apzMotorola_Stupid_OptPatch },
{ zNested_CommentName, zNested_CommentList, (regex_t*)NULL,
NESTED_COMMENT_TEST_CT, aNested_CommentTests,
apzNested_CommentPatch },
{ zNews_Os_RecursionName, zNews_Os_RecursionList, (regex_t*)NULL,
NEWS_OS_RECURSION_TEST_CT, aNews_Os_RecursionTests,
apzNews_Os_RecursionPatch },
{ zNext_Math_PrefixName, zNext_Math_PrefixList, (regex_t*)NULL,
NEXT_MATH_PREFIX_TEST_CT, aNext_Math_PrefixTests,
apzNext_Math_PrefixPatch },
{ zNext_TemplateName, zNext_TemplateList, (regex_t*)NULL,
NEXT_TEMPLATE_TEST_CT, aNext_TemplateTests,
apzNext_TemplatePatch },
{ zNext_VolitileName, zNext_VolitileList, (regex_t*)NULL,
NEXT_VOLITILE_TEST_CT, aNext_VolitileTests,
apzNext_VolitilePatch },
{ zNext_Wait_UnionName, zNext_Wait_UnionList, (regex_t*)NULL,
NEXT_WAIT_UNION_TEST_CT, aNext_Wait_UnionTests,
apzNext_Wait_UnionPatch },
{ zNo_Double_SlashName, zNo_Double_SlashList, (regex_t*)NULL,
NO_DOUBLE_SLASH_TEST_CT, aNo_Double_SlashTests,
apzNo_Double_SlashPatch },
{ zNodeent_SyntaxName, zNodeent_SyntaxList, (regex_t*)NULL,
NODEENT_SYNTAX_TEST_CT, aNodeent_SyntaxTests,
apzNodeent_SyntaxPatch },
{ zOsf_Namespace_AName, zOsf_Namespace_AList, (regex_t*)NULL,
OSF_NAMESPACE_A_TEST_CT, aOsf_Namespace_ATests,
apzOsf_Namespace_APatch },
{ zOsf_Namespace_BName, zOsf_Namespace_BList, (regex_t*)NULL,
OSF_NAMESPACE_B_TEST_CT, aOsf_Namespace_BTests,
apzOsf_Namespace_BPatch },
{ zPthread_Page_SizeName, zPthread_Page_SizeList, (regex_t*)NULL,
PTHREAD_PAGE_SIZE_TEST_CT, aPthread_Page_SizeTests,
apzPthread_Page_SizePatch },
{ zRs6000_DoubleName, zRs6000_DoubleList, (regex_t*)NULL,
RS6000_DOUBLE_TEST_CT, aRs6000_DoubleTests,
apzRs6000_DoublePatch },
{ zRs6000_FchmodName, zRs6000_FchmodList, (regex_t*)NULL,
RS6000_FCHMOD_TEST_CT, aRs6000_FchmodTests,
apzRs6000_FchmodPatch },
{ zRs6000_ParamName, zRs6000_ParamList, (regex_t*)NULL,
RS6000_PARAM_TEST_CT, aRs6000_ParamTests,
apzRs6000_ParamPatch },
{ zSony_IncludeName, zSony_IncludeList, (regex_t*)NULL,
SONY_INCLUDE_TEST_CT, aSony_IncludeTests,
apzSony_IncludePatch },
{ zStatsswtchName, zStatsswtchList, (regex_t*)NULL,
STATSSWTCH_TEST_CT, aStatsswtchTests,
apzStatsswtchPatch },
{ zStdio_Va_ListName, zStdio_Va_ListList, (regex_t*)NULL,
STDIO_VA_LIST_TEST_CT, aStdio_Va_ListTests,
apzStdio_Va_ListPatch },
{ zSun_Bogus_IfdefName, zSun_Bogus_IfdefList, (regex_t*)NULL,
SUN_BOGUS_IFDEF_TEST_CT, aSun_Bogus_IfdefTests,
apzSun_Bogus_IfdefPatch },
{ zSun_Bogus_Ifdef_Sun4cName, zSun_Bogus_Ifdef_Sun4cList, (regex_t*)NULL,
SUN_BOGUS_IFDEF_SUN4C_TEST_CT, aSun_Bogus_Ifdef_Sun4cTests,
apzSun_Bogus_Ifdef_Sun4cPatch },
{ zSun_CatmacroName, zSun_CatmacroList, (regex_t*)NULL,
SUN_CATMACRO_TEST_CT, aSun_CatmacroTests,
apzSun_CatmacroPatch },
{ zSun_MallocName, zSun_MallocList, (regex_t*)NULL,
SUN_MALLOC_TEST_CT, aSun_MallocTests,
apzSun_MallocPatch },
{ zSun_MemcpyName, zSun_MemcpyList, (regex_t*)NULL,
SUN_MEMCPY_TEST_CT, aSun_MemcpyTests,
apzSun_MemcpyPatch },
{ zSun_Rusers_SemiName, zSun_Rusers_SemiList, (regex_t*)NULL,
SUN_RUSERS_SEMI_TEST_CT, aSun_Rusers_SemiTests,
apzSun_Rusers_SemiPatch },
{ zSun_SignalName, zSun_SignalList, (regex_t*)NULL,
SUN_SIGNAL_TEST_CT, aSun_SignalTests,
apzSun_SignalPatch },
{ zSun_Xdr_ProtoName, zSun_Xdr_ProtoList, (regex_t*)NULL,
SUN_XDR_PROTO_TEST_CT, aSun_Xdr_ProtoTests,
apzSun_Xdr_ProtoPatch },
{ zSunos_Large_MacroName, zSunos_Large_MacroList, (regex_t*)NULL,
SUNOS_LARGE_MACRO_TEST_CT, aSunos_Large_MacroTests,
apzSunos_Large_MacroPatch },
{ zSunos_Matherr_DeclName, zSunos_Matherr_DeclList, (regex_t*)NULL,
SUNOS_MATHERR_DECL_TEST_CT, aSunos_Matherr_DeclTests,
apzSunos_Matherr_DeclPatch },
{ zSunos_StrlenName, zSunos_StrlenList, (regex_t*)NULL,
SUNOS_STRLEN_TEST_CT, aSunos_StrlenTests,
apzSunos_StrlenPatch },
{ zSystypesName, zSystypesList, (regex_t*)NULL,
SYSTYPES_TEST_CT, aSystypesTests,
apzSystypesPatch },
{ zSystypes_For_AixName, zSystypes_For_AixList, (regex_t*)NULL,
SYSTYPES_FOR_AIX_TEST_CT, aSystypes_For_AixTests,
apzSystypes_For_AixPatch },
{ zSysv68_StringName, zSysv68_StringList, (regex_t*)NULL,
SYSV68_STRING_TEST_CT, aSysv68_StringTests,
apzSysv68_StringPatch },
{ zSysz_Stdlib_For_SunName, zSysz_Stdlib_For_SunList, (regex_t*)NULL,
SYSZ_STDLIB_FOR_SUN_TEST_CT, aSysz_Stdlib_For_SunTests,
apzSysz_Stdlib_For_SunPatch },
{ zSysz_Stdtypes_For_SunName, zSysz_Stdtypes_For_SunList, (regex_t*)NULL,
SYSZ_STDTYPES_FOR_SUN_TEST_CT, aSysz_Stdtypes_For_SunTests,
apzSysz_Stdtypes_For_SunPatch },
{ zTinfo_CplusplusName, zTinfo_CplusplusList, (regex_t*)NULL,
TINFO_CPLUSPLUS_TEST_CT, aTinfo_CplusplusTests,
apzTinfo_CplusplusPatch },
{ zUltrix_Ansi_CompatName, zUltrix_Ansi_CompatList, (regex_t*)NULL,
ULTRIX_ANSI_COMPAT_TEST_CT, aUltrix_Ansi_CompatTests,
apzUltrix_Ansi_CompatPatch },
{ zUltrix_Atof_ParamName, zUltrix_Atof_ParamList, (regex_t*)NULL,
ULTRIX_ATOF_PARAM_TEST_CT, aUltrix_Atof_ParamTests,
apzUltrix_Atof_ParamPatch },
{ zUltrix_ConstName, zUltrix_ConstList, (regex_t*)NULL,
ULTRIX_CONST_TEST_CT, aUltrix_ConstTests,
apzUltrix_ConstPatch },
{ zUltrix_IfdefName, zUltrix_IfdefList, (regex_t*)NULL,
ULTRIX_IFDEF_TEST_CT, aUltrix_IfdefTests,
apzUltrix_IfdefPatch },
{ zUltrix_Nested_CmntName, zUltrix_Nested_CmntList, (regex_t*)NULL,
ULTRIX_NESTED_CMNT_TEST_CT, aUltrix_Nested_CmntTests,
apzUltrix_Nested_CmntPatch },
{ zUltrix_StaticName, zUltrix_StaticList, (regex_t*)NULL,
ULTRIX_STATIC_TEST_CT, aUltrix_StaticTests,
apzUltrix_StaticPatch },
{ zUndefine_NullName, zUndefine_NullList, (regex_t*)NULL,
UNDEFINE_NULL_TEST_CT, aUndefine_NullTests,
apzUndefine_NullPatch },
{ zVa_I960_MacroName, zVa_I960_MacroList, (regex_t*)NULL,
VA_I960_MACRO_TEST_CT, aVa_I960_MacroTests,
apzVa_I960_MacroPatch },
{ zVoid_NullName, zVoid_NullList, (regex_t*)NULL,
VOID_NULL_TEST_CT, aVoid_NullTests,
apzVoid_NullPatch },
{ zVxworks_Gcc_ProblemName, zVxworks_Gcc_ProblemList, (regex_t*)NULL,
VXWORKS_GCC_PROBLEM_TEST_CT, aVxworks_Gcc_ProblemTests,
apzVxworks_Gcc_ProblemPatch },
{ zVxworks_Needs_VxtypesName, zVxworks_Needs_VxtypesList, (regex_t*)NULL,
VXWORKS_NEEDS_VXTYPES_TEST_CT, aVxworks_Needs_VxtypesTests,
apzVxworks_Needs_VxtypesPatch },
{ zVxworks_Needs_VxworksName, zVxworks_Needs_VxworksList, (regex_t*)NULL,
VXWORKS_NEEDS_VXWORKS_TEST_CT, aVxworks_Needs_VxworksTests,
apzVxworks_Needs_VxworksPatch },
{ zVxworks_TimeName, zVxworks_TimeList, (regex_t*)NULL,
VXWORKS_TIME_TEST_CT, aVxworks_TimeTests,
apzVxworks_TimePatch },
{ zX11_ClassName, zX11_ClassList, (regex_t*)NULL,
X11_CLASS_TEST_CT, aX11_ClassTests,
apzX11_ClassPatch },
{ zX11_Class_UsageName, zX11_Class_UsageList, (regex_t*)NULL,
X11_CLASS_USAGE_TEST_CT, aX11_Class_UsageTests,
apzX11_Class_UsagePatch },
{ zX11_NewName, zX11_NewList, (regex_t*)NULL,
X11_NEW_TEST_CT, aX11_NewTests,
apzX11_NewPatch },
{ zX11_SprintfName, zX11_SprintfList, (regex_t*)NULL,
X11_SPRINTF_TEST_CT, aX11_SprintfTests,
apzX11_SprintfPatch }
};
[= autogen include
=]
[=
# $Id: hackshell.tpl,v 1.1 1998/03/20 16:19:41 korbb Exp $
#
# This file contanes the shell template replacement for the
# fixincl program. It is the repetitive guts of the fixincludes logic.
#
=]
if $LINKS; then
files=`find . -name '*.h' \( -type f -o -type l \) -print`
else
files=`find . -name '*.h' -type f -print`
fi
echo Checking header files
for file in $files; do
if ( test ! -r $file -o \
-n "`fgrep 'This file is part of the GNU C Library' $file`" )
then continue ; fi
fixlist=""
[=
#
# FOR every fix description,
# DO: emit the shell text to apply the fix to the current file
#
# =][=
_FOR fix "\n\n" =]
#
# Fix [=_eval _index 1 + #%3d _printf=]: [=hackname _Cap=]
#[=
_IF files _exist=]
case "$file" in [=_FOR files " | \\\n\t"=]./[=files=][=/files=] )[=
_ENDIF=][=
_IF mach _exist=]
case "$target_canonical" in [=
_FOR mach " | \\\n\t" =][=
mach =][=
/mach =] )[=
_IF mach_unmatched _exist =] : ;;
* )[=
_ENDIF =][=
_ENDIF=][=
# There are three conditional tests: select, bypass and test.
They may appear as often as desired. They must all pass for
the fix to be applied. "select" and "bypass" are egrep expressions
that must each appear (or not appear) in the target file.
"test" is an arbitrary test program expression that must yield
true or false. It is enclosed in parenthesis to avoid
precedence problems. The output looks like this:
if ( test -n "`egrep 'find-expr' $file`" -a
-z "`egrep 'not-find' $file`" -a
'(' <some-test-expression> ')'
) > /dev/null 2>&1 ; then
# =][=
_IF select _exist =]
if ( test [=
_FOR select " -a \\\n "
=]-n [=select _shrstr "#`egrep %s $file`"
_printf _shstr =][=
/select=][=
_IF bypass _exist =][=
_FOR bypass=] -a \
-z [=bypass _shrstr "#`egrep %s $file`"
_printf _shstr =][=
/bypass=][=
_ENDIF=][=
_IF test _exist=][=
_FOR test=] -a \
'(' [=test=] ')'[=
/test=][=
_ENDIF=]
) > /dev/null 2>&1 ; then[=
_ELIF test _exist =]
if ( test [=
_FOR test " -a \\\n "
=]'(' [=test=] ')'[=
/test=][=
_IF bypass _exist=][=
_FOR bypass=] -a \
-z [=bypass _shrstr "#`egrep %s $file`"
_printf _shstr=][=
/bypass=][=
_ENDIF=]
) > /dev/null 2>&1 ; then[=
_ELIF bypass _exist =]
if ( test [=_FOR bypass " -a \\\n "
=]-z [=bypass _shrstr "#`egrep %s $file`"
_printf _shstr=][=/bypass=]
) > /dev/null 2>&1 ; then[=
_ENDIF=]
fixlist="${fixlist}
[=hackname=]"
if [ ! -r ${DESTDIR}/$file ]
then infile=$file
else infile=${DESTDIR}/$file ; fi [=
_IF sed _exist=][=
_IF shell _exist =][=
_ERROR hackname _get
"fixincludes Error: %s fix has multiple fixups" _printf=][=
_ENDIF=]
sed [=
_FOR sed =]-e [=sed _shrstr=] \
[=
/sed=] < $infile > ${DESTDIR}/$file.[=
_ELIF shell _exist =]
( [=shell=] ) < $infile > ${DESTDIR}/$file.
# Shell scripts have the potential of removing the output
# We interpret that to mean the file is not to be altered
#
if test ! -f ${DESTDIR}/$file.
then continue ; fi [=
_ELSE=][=
_ERROR hackname _get "ERROR: %s has no fixup" _printf=][=
_ENDIF=]
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file[=
# Close off any opened "if" or "case" statements in reverse order
# =][=
_IF select _exist test _exist | bypass _exist | =]
fi # end of selection 'if'[=
_ENDIF =][=
_IF mach _exist=]
;; # case end for machine type test
esac[=
_ENDIF =][=
_IF files _exist=]
;; # case end for file name test
esac[=
_ENDIF =][=
/fix =][=
#
# DONE with every fix for the current file
#
#=]
# IF the output has been removed OR it is unchanged,
# THEN ensure the output is gone
# ELSE look for local directory include syntax
#
if ( test ! -f ${DESTDIR}/$file || \
cmp $file ${DESTDIR}/$file ) > /dev/null 2>&1
then
rm -f ${DESTDIR}/$file
else
echo "Fixed $file:${fixlist}"
# Find any include directives that use "file".
#
for include in `
egrep '^[ ]*#[ ]*include[ ]*"[^/]' ${DESTDIR}/$file |
sed -e 's/^[ ]*#[ ]*include[ ]*"\([^"]*\)".*$/\1/'`
do
dir=`echo $file | sed -e s'|/[^/]*$||'`
required="$required ${SRCDIR} $dir/$include ${DESTDIR}/$dir/$include"
done
fi
done # for file in $files
/* -*- Mode: C -*- $Id: inclhack.def,v 1.1 1998/03/20 16:19:41 korbb Exp $ */
autogen definitions inclhack;
/*
* Define all the fixes we know about for repairing damaged headers
*/
/*
* sys/wait.h on AIX 3.2.5 puts the declaration of wait3 before the definition
* of struct rusage, so the prototype (added by fixproto) causes havoc.
*/
fix = {
hackname = aix_syswait;
files = sys/wait.h;
select = "bos325,";
sed = "/^extern pid_t wait3();$/i\\\n"
"struct rusage;\n";
};
/*
* sys/signal.h on some versions of AIX uses volatile in the typedef of
* sig_atomic_t, which causes gcc to generate a warning about duplicate
* volatile when a sig_atomic_t variable is declared volatile, as
* required by ANSI C.
*/
fix = {
hackname = aix_volatile;
files = sys/signal.h;
select = "typedef volatile int sig_atomic_t";
sed = "s/typedef volatile int sig_atomic_t"
"/typedef int sig_atomic_t/";
};
/*
* Fix getopt declarations in stdio.h and stdlib.h on Alpha OSF/1 and AIX.
*/
fix = {
hackname = alpha_getopt;
files = "stdio.h";
files = "stdlib.h";
select = 'getopt\(int, char \*\[';
sed = 's/getopt(int, char \*\[\],[ ]*char \*)/'
'getopt(int, char *const[], const char *)/';
};
/*
* Determine if we're on Interactive Unix 2.2 or later, in which case we
* need to fix some additional files. This is the same test for ISC that
* Autoconf uses. On Interactive 2.2, certain traditional Unix
* definitions (notably getc and putc in stdio.h) are omitted if __STDC__
* is defined, not just if _POSIX_SOURCE is defined. This makes it
* impossible to compile any nontrivial program except with -posix.
*/
fix = {
hackname = alpha_parens;
files = sym.h;
select = '#ifndef\(__mips64\)';
sed = "s/#ifndef(__mips64)/#ifndef __mips64/";
};
/*
* Fix return value of sbrk in unistd.h on Alpha OSF/1 V2.0
*/
fix = {
hackname = alpha_sbrk;
files = unistd.h;
select = "char[ \t]*\\*[\t ]*sbrk[ \t]*\\(";
sed = "s/char\\([ \t]*\\*[\t ]*sbrk[ \t]*(\\)/void\\1/";
};
/*
* Fix this ARM/RISCiX file where ___type is a Compiler
* hint that is specific to the Norcroft compiler.
*/
fix = {
hackname = arm_norcroft_hint;
files = "X11/Intrinsic.h";
sed = "s/___type p_type/p_type/";
};
/*
* Fix this ARM/RISCiX file to avoid interfering
* with the use of __wchar_t in cc1plus.
*/
fix = {
hackname = arm_wchar;
files = stdlib.h;
select = "#[ \t]*define[ \t]*__wchar_t";
sed = "s/\\(#[ \t]*ifndef[ \t]*\\)__wchar_t/\\1_GCC_WCHAR_T/";
sed = "s/\\(#[ \t]*define[ \t]*\\)__wchar_t/\\1_GCC_WCHAR_T/";
};
/*
* This file in A/UX 3.0.x/3.1.x contains an __asm directive for c89;
* gcc doesn't understand it.
*/
fix = {
hackname = aux_asm;
files = sys/param.h;
select = "#ifndef NOINLINE";
sed = "s|#ifndef NOINLINE"
"|#if !defined(NOINLINE) \\&\\& !defined(__GNUC__)|";
};
/*
* For C++, avoid any typedef or macro definition of bool,
* and use the built in type instead.
*/
fix = {
hackname = avoid_bool;
files = curses.h;
sed = "/^#[ \t]*define[ \t][ \t]*bool[ \t][ \t]*char[ \t]*$/i\\\n"
"#ifndef __cplusplus\n";
sed = "/^#[ \t]*define[ \t][ \t]*bool[ \t][ \t]*char[ \t]*$/a\\\n"
"#endif\n";
sed = "/^typedef[ \t][ \t]*char[ \t][ \t]*bool[ \t]*;/i\\\n"
"#ifndef __cplusplus\n";
sed = "/^typedef[ \t][ \t]*char[ \t][ \t]*bool[ \t]*;/a\\\n"
"#endif\n";
};
/*
* rpc/types.h on OSF1/2.0 is not C++ ready, even though NO_IMPLICIT_EXTERN_C
* is defined for the alpha. The problem is the declaration of malloc.
*/
fix = {
hackname = bad_malloc_decl;
files = rpc/types.h;
bypass = '"C"';
sed = "1i\\\n"
"#ifdef __cplusplus\\\n"
"extern \"C\" {\\\n"
"#endif\\\n\n";
sed = "$a\\\n"
"#ifdef __cplusplus\\\n"
"}\\\n"
"#endif\n";
};
/*
* Fix `typedef struct term;' on hppa1.1-hp-hpux9.
*/
fix = {
hackname = bad_struct_term;
files = curses.h;
select = "^[ \t]*typedef[ \t]+struct[ \t]+term[ \t]*;";
sed = "s/^[ \t]*typedef[ \t][ \t]*"
"\\(struct[ \t][ \t]*term[ \t]*;[ \t]*\\)$/\\1/";
};
/*
* Fix one other error in this file:
* a mismatched quote not inside a C comment.
*/
fix = {
hackname = badquote;
files = sundev/vuid_event.h;
/*
* The following uglitude is to allow an apostrophe inside
* of a single quote quoted string in a shell command line.
*/
sed = "s/doesn't/does not/";
};
/*
* check for broken assert.h that needs stdio.h
*/
fix = {
hackname = broken_assert_stdio;
files = assert.h;
select = stderr;
bypass = "include.*stdio.h";
sed = "1i\\\n"
"#include <stdio.h>\n";
};
/*
* check for broken assert.h that needs stdlib.h
*/
fix = {
hackname = broken_assert_stdlib;
files = assert.h;
select = 'exit *\(|abort *\(';
bypass = "include.*stdlib.h";
sed = "1i\\\n"
"#ifdef __cplusplus\\\n"
"#include <stdlib.h>\\\n"
"#endif\n";
};
/*
* Note that BSD43_* are used on recent MIPS systems.
*/
fix = {
hackname = bsd43_io_macros;
select = "BSD43__IO";
/*
* Put single quotes aroung the character that appears after '('
* and before ',', UNLESS it is a 'c' or 'g' or 'x'.
*/
sed = "/[ \t]BSD43__IO[A-Z]*[ \t]*(/" 's/(\(.\),/(\'\1\',/';
sed = "/#[ \t]*define[ \t]*[ \t]BSD43__IO/" 's/\'\([cgx]\)\'/\1/g';
};
/*
* And also with the HP-UX 10 sys/pci.h file
*/
fix = {
hackname = cxx_cmnt_hpux;
files = sys/pci.h;
select = "System Private Structures";
sed = "s|//.*$||g";
};
/*
* Turning // comments into normal comments trashes this IRIX 4.0.1
* header file, which embeds // comments inside multi-line
* comments. If this looks like the IRIX header file, we refix it by
* just throwing away the // comments.
*/
fix = {
hackname = cxx_cmnt_irix;
files = fam.h;
select = indigo.esd;
sed = "s|//.*$||g";
};
/*
* Same problem with a file from SunOS 4.1.3 : a header file containing
* the string "//" embedded in "/ * * /"
*/
fix = {
hackname = cxx_cmnt_sunos;
files = sbusdev/audiovar.h;
files = sys/audiovar.h;
sed = "s|//.*$||g";
};
/*
* There is a similar problem with the VxWorks drv/netif/if_med.h file.
*/
fix = {
hackname = cxx_cmnt_vxworks;
files = drv/netif/if_med.h;
select = "Wind River";
sed = "s|//.*$||g";
};
/*
* Fix these Sun OS files to avoid an invalid identifier in an #ifdef.
*/
fix = {
hackname = ecd_cursor;
files = "sunwindow/win_lock.h";
files = "sunwindow/win_cursor.h";
sed = "s/ecd.cursor/ecd_cursor/";
};
/*
* Fix else directives that contain non-commentary text
*
* The fixinc_eol stuff is to work around a bug in the sed
*/
fix = {
hackname = else_label;
select = "^[ \t]*#[ \t]*else[ \t]+[!-.0-~]";
sed = ":loop\n"
'/\\\\$/' "N\n"
's/\\\\$/\\\\+++fixinc_eol+++/' "\n"
'/\\\\$/' "b loop\n"
's/\\\\+++fixinc_eol+++/\\\\/g' "\n"
"s%^\\([ \t]*#[ \t]*else\\)[ \t]*/[^*].*%\\1%\n"
"s%^\\([ \t]*#[ \t]*else\\)[ \t]*[^/ \t].*%\\1%";
};
/*
* Fix endif directives that contain non-commentary text
*/
fix = {
hackname = endif_label;
/*
* Select files that contain '#endif' directives with
* some sort of following junk. (Between the ascii '.'
* and '0' lies the character '/'. This will *NOT*
* match '#endif / * foo * /', but it also wont match
* '#endif / done' either.
*/
select = "^[ \t]*#[ \t]*endif[ \t]+[!-.0-~]";
/*
* First, join the continued input lines.
* IF the resulting line is an endif preprocessing directive,
* then trim off the following patterns:
* 1. sequences that start with '/' and is *NOT* followed by '*'
* 2. Sequences that start with '*' and is *NOT* followed by '/'
* 3. sequences that do not start with any of '/', '*', '\t' or ' '.
*
* The fixinc_eol stuff is to work around a bug in the sed
*/
sed = ":loop\n"
'/\\\\$/' "N\n"
's/\\\\$/\\\\+++fixinc_eol+++/' "\n"
'/\\\\$/' "b loop\n"
's/\\\\+++fixinc_eol+++/\\\\/g' "\n"
"s%^\\([ \t]*#[ \t]*endif\\)[ \t]*/[^*].*%\\1%\n"
"s%^\\([ \t]*#[ \t]*endif\\)[ \t]*\\*[^/].*%\\1%\n"
"s%^\\([ \t]*#[ \t]*endif\\)[ \t]*[^/* \t].*%\\1%";
};
/*
* Fix HP's use of ../machine/inline.h to refer to
* /usr/include/machine/inline.h
*/
fix = {
hackname = hp_inline;
files = sys/spinlock.h;
select = 'include.*"\.\./machine/';
sed = "s,\"../machine/inline.h\",<machine/inline.h>,";
sed = "s,\"../machine/psl.h\",<machine/psl.h>,";
};
/*
* Check for (...) in C++ code in HP/UX sys/file.h.
*/
fix = {
hackname = hp_sysfile;
files = sys/file.h;
select = "HPUX_SOURCE";
sed = 's/(\.\.\.)/(struct file * ...)/';
};
/*
* assert.h and sys/mman.h on HP/UX are not C++ ready,
* even though NO_IMPLICIT_EXTERN_C is defined on HP/UX.
*/
fix = {
hackname = hpux_cxx_unready;
files = assert.h;
files = sys/mman.h;
bypass = '"C"|__BEGIN_DECLS';
sed = "1i\\\n"
"#ifdef __cplusplus\\\n"
"extern \"C\" {\\\n"
"#endif\\\n\n";
sed = "$a\\\n"
"#ifdef __cplusplus\\\n"
"}\\\n"
"#endif\n";
};
/*
* HPUX 10.x sys/param.h defines MAXINT which clashes with values.h
*/
fix = {
hackname = hpux_maxint;
files = sys/param.h;
sed = "/^#[ \t]*define[ \t]*MAXINT[ \t]/i\\\n"
"#ifndef MAXINT\n";
sed = "/^#[ \t]*define[ \t]*MAXINT[ \t]/a\\\n"
"#endif\n";
};
/*
* Fix hpux10.20 <sys/time.h> to avoid invalid forward decl
*/
fix = {
hackname = hpux_systime;
files = sys/time.h;
select = "^extern struct sigevent;";
sed = "s/^extern struct sigevent;/struct sigevent;/";
};
/*
* Fix various _IO* defines, but do *not* quote the characters cgxtf.
*/
fix = {
hackname = interactv_add1;
test = "-d /etc/conf/kconfig.d";
test = '-n "`grep _POSIX_VERSION /usr/include/sys/unistd.h`"';
files = "stdio.h";
files = "math.h";
files = "ctype.h";
files = "sys/limits.h";
files = "sys/fcntl.h";
files = "sys/dirent.h";
sed = "s/!defined(__STDC__) && !defined(_POSIX_SOURCE)/"
"!defined(_POSIX_SOURCE)/";
};
fix = {
hackname = interactv_add2;
test = "-d /etc/conf/kconfig.d";
test = '-n "`grep _POSIX_VERSION /usr/include/sys/unistd.h`"';
files = math.h;
sed = "s/fmod(double)/fmod(double, double)/";
};
fix = {
hackname = interactv_add3;
test = "-d /etc/conf/kconfig.d";
test = '-n "`grep _POSIX_VERSION /usr/include/sys/unistd.h`"';
files = sys/limits.h;
sed = "/CHILD_MAX/s,/\\* Max, Max,";
sed = "/OPEN_MAX/s,/\\* Max, Max,";
};
/*
* Remove erroneous parentheses in sym.h on Alpha OSF/1.
*/
fix = {
hackname = io_def_quotes;
select = "[ \t]_IO[A-Z]*[ \t]*\\([A-Za-z]";
sed = "s/\\([ \t]_IO[A-Z]*[ \t]*(\\)\\([A-Za-z]\\),/\\1'\\2',/";
sed = "/#[ \t]*define[ \t]*[ \t]_IO/"
"s/'\\([cgxtf]\\)'/\\1/g";
sed = "/#[ \t]*define[ \t]*[ \t]DESIOC/" 's/\'\([cdgx]\)\'/\1/g';
};
/*
* Fix CTRL macros
*/
fix = {
hackname = ioctl_fix_ctrl;
select = "CTRL[ \t]";
sed = "/[^A-Z0-9_]CTRL[ \t]*(/"
"s/\\([^']\\))/'\\1')/";
sed = "/[^A-Z0-9]_CTRL[ \t]*(/"
"s/\\([^']\\))/'\\1')/";
sed = "/#[ \t]*define[ \t]*[ \t]CTRL/"
"s/'\\([cgx]\\)'/\\1/g";
sed = "/#[ \t]*define[ \t]*[ \t]_CTRL/"
"s/'\\([cgx]\\)'/\\1/g";
sed = "/#[ \t]*define[ \t]*[ \t]BSD43_CTRL/"
"s/'\\([cgx]\\)'/\\1/g";
};
/*
* Check for missing ';' in struct
*/
fix = {
hackname = ip_missing_semi;
files = netinet/ip.h;
sed = "/^struct/,/^};/s/}$/};/";
};
/*
* Multiline comment after typedef on IRIX 4.0.1.
*/
fix = {
hackname = irix_bogus_cxx_cmnt;
files = "elf_abi.h";
files = "elf.h";
/*
* This really looks like it is replacing "/ * * /" with "//"
* Shouldn't the replacement really be " ## "?
*/
sed = 's@"/\*"\*/@"//"@';
};
/*
* IRIX 4.0.5 <rpc/auth.h> uses struct sockaddr
* in prototype without previous definition.
*/
fix = {
hackname = irix_multiline_cmnt;
files = sys/types.h;
sed = "s@type of the result@type of the result */@";
sed = "s@of the sizeof@/* of the sizeof@";
};
/*
* Some IRIX header files contain the string "//"
*/
fix = {
hackname = irix_sockaddr;
files = rpc/auth.h;
select = "authdes_create.*struct sockaddr";
sed = "/authdes_create.*struct sockaddr/i\\\n"
"struct sockaddr;\n";
};
/*
* IRIX 4.0.5 <rpc/xdr.h> uses struct __file_s
* in prototype without previous definition.
*/
fix = {
hackname = irix_struct__file;
files = rpc/xdr.h;
sed = "/xdrstdio_create.*struct __file_s/i\\\n"
"struct __file_s;\n";
};
/*
* Fixing ISC fmod declaration
*/
fix = {
hackname = isc_fmod;
files = math.h;
select = 'fmod\(double\)';
sed = "s/fmod(double)/fmod(double, double)/";
};
/*
* Fixing nested comments in ISC <sys/limits.h>
*/
fix = {
hackname = isc_sys_limits;
files = sys/limits.h;
select = CHILD_MAX;
sed = "/CHILD_MAX/s,/\\* Max, Max,";
sed = "/OPEN_MAX/s,/\\* Max, Max,";
};
/*
* These files in Sun OS 4.x and ARM/RISCiX and BSD4.3
* use / * * / to concatenate tokens.
*/
fix = {
hackname = kandr_concat;
files = "sparc/asm_linkage.h";
files = "sun3/asm_linkage.h";
files = "sun3x/asm_linkage.h";
files = "sun4/asm_linkage.h";
files = "sun4c/asm_linkage.h";
files = "sun4m/asm_linkage.h";
files = "sun4c/debug/asm_linkage.h";
files = "sun4m/debug/asm_linkage.h";
files = "arm/as_support.h";
files = "arm/mc_type.h";
files = "arm/xcb.h";
files = "dev/chardefmac.h";
files = "dev/ps_irq.h";
files = "dev/screen.h";
files = "dev/scsi.h";
files = "sys/tty.h";
files = "Xm.acorn/XmP.h";
files = bsd43/bsd43_.h;
select = '/\*\*/';
sed = 's|/\*\*/| ## |g';
};
/*
* In limits.h, put #ifndefs around things that are supposed to be defined
* in float.h to avoid redefinition errors if float.h is included first.
* On HP/UX this patch does not work, because on HP/UX limits.h uses
* multi line comments and the inserted #endif winds up inside the
* comment. Fortunately, HP/UX already uses #ifndefs in limits.h; if
* we find a #ifndef FLT_MIN we assume that all the required #ifndefs
* are there, and we do not add them ourselves.
*/
fix = {
hackname = limits_ifndefs;
files = "limits.h";
bypass = "ifndef[ \t]+FLT_MIN";
sed = "/[ \t]FLT_MIN[ \t]/i\\\n#ifndef FLT_MIN\n";
sed = "/[ \t]FLT_MIN[ \t]/a\\\n#endif\n";
sed = "/[ \t]FLT_MAX[ \t]/i\\\n#ifndef FLT_MAX\n";
sed = "/[ \t]FLT_MAX[ \t]/a\\\n#endif\n";
sed = "/[ \t]FLT_DIG[ \t]/i\\\n#ifndef FLT_DIG\n";
sed = "/[ \t]FLT_DIG[ \t]/a\\\n#endif\n";
sed = "/[ \t]DBL_MIN[ \t]/i\\\n#ifndef DBL_MIN\n";
sed = "/[ \t]DBL_MIN[ \t]/a\\\n#endif\n";
sed = "/[ \t]DBL_MAX[ \t]/i\\\n#ifndef DBL_MAX\n";
sed = "/[ \t]DBL_MAX[ \t]/a\\\n#endif\n";
sed = "/[ \t]DBL_DIG[ \t]/i\\\n#ifndef DBL_DIG\n";
sed = "/[ \t]DBL_DIG[ \t]/a\\\n#endif\n";
};
/*
* Delete the '#define void int' line from curses.h on Lynx
*/
fix = {
hackname = lynx_void_int;
files = curses.h;
select = "#[ \t]*define[ \t]+void[ \t]+int";
sed = "/#[ \t]*define[ \t][ \t]*void[ \t]int/d";
};
/*
* Fix fcntl prototype in fcntl.h on LynxOS.
*/
fix = {
hackname = lynxos_fcntl_proto;
files = fcntl.h;
sed = 's/\(fcntl.*(int, int, \)int)/\1...)/';
};
/*
* Fix incorrect S_IF* definitions on m88k-sysv3.
*/
fix = {
hackname = m88k_bad_hypot_opt;
mach = "m88k-motorola-sysv3*";
files = "math.h";
sed = "s/extern double floor(), ceil(), fmod(), fabs();/"
"extern double floor(), ceil(), fmod(), fabs _PARAMS((double));/";
sed = "/^extern double hypot();$/a\\\n"
"\\/* Workaround a stupid Motorola optimization if one\\\n"
" of x or y is 0.0 and the other is negative! *\\/\\\n"
"#ifdef __STDC__\\\n"
"static __inline__ double fake_hypot (double x, double y)\\\n"
"#else\\\n"
"static __inline__ double fake_hypot (x, y)\\\n"
"\tdouble x, y;\\\n"
"#endif\\\n"
"{\\\n"
"\treturn fabs (hypot (x, y));\\\n"
"}\\\n"
"#define hypot\tfake_hypot\n";
};
/*
* Fix non-ansi machine name defines
* This is split into two parts: the shell version as a single
* patch, and the program version with each patch separate.
* Each is substantially faster for the particular environment.
* You have a dual maintenance problem here. */
fix = {
hackname = m88k_bad_s_if;
mach = "m88k-*-sysv3*";
files = sys/stat.h;
select = "#define[ \t]+S_IS[A-Z]*(m)[ \t]";
sed = "s/^\\(#define[ \t]*S_IS[A-Z]*(m)\\)[ \t]*"
"(m[ \t]*&[ \t]*\\(S_IF[A-Z][A-Z][A-Z][A-Z]*\\)[ \t]*)/"
"\\1 (((m)\\&S_IFMT)==\\2)/";
sed = "s/^\\(#define[ \t]*S_IS[A-Z]*(m)\\)[ \t]*"
"(m[ \t]*&[ \t]*\\(0[0-9]*\\)[ \t]*)/"
"\\1 (((m)\\&S_IFMT)==\\2)/";
};
/*
* Put cpp wrappers around these include files to avoid redeclaration
* errors during multiple inclusion on m88k-tektronix-sysv3.
*/
fix = {
hackname = m88k_multi_incl;
mach = "m88k-tektronix-sysv3*";
files = "time.h";
bypass = "#ifndef";
shell =
"echo Fixing $file, to protect against multiple inclusion. >&2
cpp_wrapper=`echo $file | sed -e 's,\\.,_,g' -e 's,/,_,g'`
sed -e \"1i\\\n"
"#ifndef __GCC_GOT_${cpp_wrapper}_\\\n"
"#define __GCC_GOT_${cpp_wrapper}_\\\n\" \\\n"
"\t-e \"$a\\\n"
"#endif /* ! __GCC_GOT_${cpp_wrapper}_ */\n\"";
};
/*
* libm.a on m88k-motorola-sysv3 contains a stupid optimization for
* function hypot(), which returns the second argument without even
* looking at its value if the other is 0.0 Another drawback is that
* fix-header doesn't fix fabs' prototype, and I have no idea why.
*/
fix = {
hackname = machine_name;
/*
* Select '#if.*' and '#elif" with possible non-ansi symbols
* The only non-ansi symbols we know about start with one of:
* MRS_bhimnprstuv
* If any are added to the substitution list, then add it to
* the selection list as well. Hopefully we can avoid names
* starting with "d" and "l", because this pattern would then
* match "defined" and "lint" as well. I suppose we could add
* a "bypass = lint" if we had to though.
*
* The fixinc_eol stuff is to work around a bug in the sed
*/
select = "^#[ \t]*(if|elif).*"
"[^a-zA-Z0-9_](_*[MSRrhim]|[Mbimnpstuv])[a-zA-Z0-9_]";
exesel = "^#[ \t]*(if|elif).*[^a-zA-Z0-9_]"
"("
"M32"
"|_*("
"MIPSE[LB]"
"|SYSTYPE_[A-Z0-9]"
"|[Rr][34]000"
"|host_mips"
"|i386"
"|mips"
")($|[^a-zA-Z0-9_])"
"|bsd4"
"|is68k"
"|m[68]8k"
"|mc680"
"|news"
"|ns32000"
"|pdp11"
"|pyr"
"|sel"
"|sony_news"
"|sparc"
"|sun"
"|tahoe"
"|tower"
"|u370"
"|u3b"
"|unix"
"|vax"
")";
sed = ":loop\n"
'/\\\\$/' "N\n"
's/\\\\$/\\\\+++fixinc_eol+++/' "\n"
'/\\\\$/' "b loop\n"
's/\\\\+++fixinc_eol+++/\\\\/g' "\n"
"/#[\t ]*[el]*if/ {\n"
"\ts/[a-zA-Z0-9_][a-zA-Z0-9_]*/ & /g\n"
"\ts/ M32 / __M32__ /g\n"
"\ts/ _*MIPSE\\([LB]\\) / __MIPSE\\1__ /g\n"
"\ts/ _*SYSTYPE_\\([A-Z0-9]*\\) / __SYSTYPE_\\1__ /g\n"
"\ts/ _*\\([Rr][34]\\)000 / __\\1000__ /g\n"
"\ts/ _*host_mips / __host_mips__ /g\n"
"\ts/ _*i386 / __i386__ /g\n"
"\ts/ _*mips / __mips__ /g\n"
"\ts/ bsd4\\([0-9]\\) / __bsd4\\1__ /g\n"
"\ts/ is68k / __is68k__ /g\n"
"\ts/ m68k / __m68k__ /g\n"
"\ts/ m88k / __m88k__ /g\n"
"\ts/ mc680\\([0-9]\\)0 / __mc680\\10__ /g\n"
"\ts/ news\\([0-9]*\\) / __news\\1__ /g\n"
"\ts/ ns32000 / __ns32000__ /g\n"
"\ts/ pdp11 / __pdp11__ /g\n"
"\ts/ pyr / __pyr__ /g\n"
"\ts/ sel / __sel__ /g\n"
"\ts/ sony_news / __sony_news__ /g\n"
"\ts/ sparc / __sparc__ /g\n"
"\ts/ sun\\([a-z0-9]*\\) / __sun\\1__ /g\n"
"\ts/ tahoe / __tahoe__ /g\n"
"\ts/ tower\\([_0-9]*\\) / __tower\\1__ /g\n"
"\ts/ u370 / __u370__ /g\n"
"\ts/ u3b\\([0-9]*\\) / __u3b\\1__ /g\n"
"\ts/ unix / __unix__ /g\n"
"\ts/ vax / __vax__ /g\n"
"\ts/ \\([a-zA-Z0-9_][a-zA-Z0-9_]*\\) /\\1/g\n\t}";
};
/*
* Some math.h files define struct exception, which conflicts with
* the class exception defined in the C++ file std/stdexcept.h. We
* redefine it to __math_exception. This is not a great fix, but I
* haven't been able to think of anything better.
*/
fix = {
hackname = math_exception;
files = math.h;
select = "struct exception";
sed = "/struct exception/i\\\n"
"#ifdef __cplusplus\\\n"
"#define exception __math_exception\\\n"
"#endif\n";
sed = "/struct exception/a\\\n"
"#ifdef __cplusplus\\\n"
"#undef exception\\\n"
"#endif\n";
sed = "/matherr/i\\\n"
"#ifdef __cplusplus\\\n"
"#define exception __math_exception\\\n"
"#endif\n";
sed = "/matherr/a\\\n"
"#ifdef __cplusplus\\\n"
"#undef exception\\\n"
"#endif\n";
};
/*
* In math.h, put #ifndefs around things that might be defined
* in a gcc specific math-*.h file.
*/
fix = {
hackname = math_gcc_ifndefs;
files = math.h;
shell = " dbl_max_def="
"\"`egrep 'define[ \t]+DBL_MAX[ \t]+.*' ${SRCDIR}/float.h "
"2>/dev/null`\"\n\n"
"\tif ( test -n \"${dbl_max_def}\" \\\n"
"\t\t-a -n \"`egrep '#define[ \t]*HUGE_VAL[ \t]+DBL_MAX' $file`\" \\\n"
"\t\t-a -z \"`egrep '#define[ \t]+DBL_MAX[ \t]+' $file`\"\n"
"\t ) > /dev/null 2>&1\n"
"\tthen sed -e '/define[ \t]HUGE_VAL[ \t]/i\\\n"
"#ifndef HUGE_VAL\n' \\\n"
"\t-e '/define[ \t]HUGE_VAL[ \t]/a\\\n#endif\n'\\\n"
"\t-e \"/define[ \t]HUGE_VAL[ \t]DBL_MAX/s/DBL_MAX/$dbl_max_def/\"\n"
"\telse sed -e '/define[ \t]HUGE_VAL[ \t]/i\\\n"
"#ifndef HUGE_VAL\n' \\\n"
"\t-e '/define[ \t]HUGE_VAL[ \t]/a\\\n#endif\n'\n"
"\tfi";
};
/*
* libm.a on m88k-motorola-sysv3 contains a stupid optimization for
* function hypot(), which returns the second argument without even
* looking at its value
*/
fix = {
hackname = motorola_stupid_opt;
mach = "m88k-motorola-sysv3*";
files = math.h;
select = "^extern double hypot();$";
sed =
'/^extern double hypot();$/a' "\\\n"
'\/* Workaround a stupid Motorola optimization if one' "\\\n"
' of x or y is 0.0 and the other is negative! *\/' "\\\n"
'#ifdef __STDC__' "\\\n"
'static __inline__ double fake_hypot (double x, double y)' "\\\n"
'#else' "\\\n"
'static __inline__ double fake_hypot (x, y)' "\\\n"
"\tdouble x, y;\\\n"
'#endif' "\\\n"
'{' "\\\n"
"\treturn fabs (hypot (x, y));\\\n"
'}' "\\\n"
'#define hypot fake_hypot' "\n";
};
/*
* nested comment
*/
fix = {
hackname = nested_comment;
files = rpc/rpc.h;
sed = 's@^\(/\*.*rpc/auth_des.h>.*\)/\*@\1*/ /*@';
};
/*
* fix bogus recursive stdlib.h in NEWS-OS 4.0C
*/
fix = {
hackname = news_os_recursion;
files = stdlib.h;
select = "#include <stdlib.h>";
sed = "/^#include <stdlib.h>/i\\\n"
"#ifdef BOGUS_RECURSION\n";
sed = "/^#include <stdlib.h>/a\\\n"
"#endif\n";
};
/*
* NeXT 3.2 adds const prefix to some math functions.
* These conflict with the built-in functions.
*/
fix = {
hackname = next_math_prefix;
files = ansi/math.h;
select = "^extern.*double.*__const__.*";
sed = "/^extern.*double.*__const__.*sqrt(/s/__const__//";
sed = "/^extern.*double.*__const__.*fabs(/s/__const__//";
sed = "/^extern.*double.*__const__.*cos(/s/__const__//";
sed = "/^extern.*double.*__const__.*hypot(/s/__const__//";
sed = "/^extern.*double.*__const__.*sin(/s/__const__//";
};
/*
* NeXT 3.2 uses the word "template" as a parameter for some
* functions. GCC reports an invalid use of a reserved key word
* with the built-in functions. NeXT 3.2 includes the keyword
* volatile in the prototype for abort(). This conflicts with
* the built-in definition.
*/
fix = {
hackname = next_template;
files = bsd/libc.h;
select = template;
sed = '/\(.*template\)/s/template//';
sed = "/extern.*volatile.*void.*abort/s/volatile//";
};
/*
* NeXT 3.2 includes the keyword volatile in the abort() and exit()
* function prototypes. That conflicts with the built-in functions.
*/
fix = {
hackname = next_volitile;
files = ansi/stdlib.h;
select = volatile;
sed = "/extern.*volatile.*void.*exit/s/volatile//";
sed = "/extern.*volatile.*void.*abort/s/volatile//";
};
/*
* NeXT 2.0 defines 'int wait(union wait*)', which conflicts with Posix.1.
* Note that version 3 of the NeXT system has wait.h in a different directory,
* so that this code won't do anything. But wait.h in version 3 has a
* conditional, so it doesn't need this fix. So everything is okay.
*/
fix = {
hackname = next_wait_union;
files = sys/wait.h;
select = 'wait\(union wait';
sed = "s@wait(union wait@wait(void@";
};
/*
* Remove the double-slash comments
* They *must* be removed so it will not create nested comments!!
*/
fix = {
hackname = no_double_slash;
select = '//[^*]';
sed = '/\/\/[^*]/' "s|//\\(.*\\)$|/* \\1 */|";
};
/*
* a missing semi-colon at the end of the nodeent structure definition.
*/
fix = {
hackname = nodeent_syntax;
files = netdnet/dnetdb.h;
sed = "s/char.*na_addr *$/char *na_addr;/";
};
/*
* sys/lc_core.h on some versions of OSF1/4.x pollutes the namespace by
* defining regex.h related types. This causes libg++ build and usage
* failures. Fixing this correctly requires checking and modifying 3 files.
*/
fix = {
hackname = osf_namespace_a;
files = reg_types.h;
files = sys/lc_core.h;
test = "-r reg_types.h"
"-a -r sys/lc_core.h"
"-a -n \"`grep '} regex_t;' reg_types.h`\""
"-a -z \"`grep __regex_t regex.h`\"";
sed = "s/regex_t/__regex_t/g";
sed = "s/regoff_t/__regoff_t/g";
sed = "s/regmatch_t/__regmatch_t/g";
};
fix = {
hackname = osf_namespace_b;
files = regex.h;
test = "-r reg_types.h"
"-a -r sys/lc_core.h"
"-a -n \"`grep '} regex_t;' reg_types.h`\""
"-a -z \"`grep __regex_t regex.h`\"";
sed = "/#include <reg_types.h>/a\\\n"
"typedef __regex_t\tregex_t;\\\n"
"typedef __regoff_t\tregoff_t;\\\n"
"typedef __regmatch_t\tregmatch_t;\n";
};
/*
* Fix __page_size* declarations in pthread.h AIX 4.1.[34].
* The original ones fail if uninitialized externs are not common.
* This is the default for all ANSI standard C++ compilers.
*/
fix = {
hackname = pthread_page_size;
files = pthread.h;
select = "^int __page_size";
sed = "s/^int __page_size/extern int __page_size/";
};
/*
* Fix return type of fread and fwrite on sysV68
*/
#ifdef LATER
fix = {
hackname = read_ret_type;
files = stdio.h;
sed = "s/^\\(extern int\tfclose(), fflush()\\), "
"\\(fread(), fwrite()\\)\\(.*\\)$"
"/extern unsigned int\t\\2;\\\n\\1\\3/";
};
#endif
/*
* function class(double x) conflicts with C++ keyword on rs/6000
*/
fix = {
hackname = rs6000_double;
files = math.h;
select = '[^a-zA-Z_]class\(';
sed = "/class[(]/i\\\n#ifndef __cplusplus\n";
sed = "/class[(]/a\\\n#endif\n";
};
/*
* Wrong fchmod prototype on RS/6000.
*/
fix = {
hackname = rs6000_fchmod;
files = sys/stat.h;
select = 'fchmod\(char';
sed = 's/fchmod(char \*/fchmod(int/';
};
/*
* parameters conflict with C++ new on rs/6000
*/
fix = {
hackname = rs6000_param;
files = "stdio.h";
files = "unistd.h";
sed = 's@rename(const char \*old, const char \*new)@'
'rename(const char *_old, const char *_new)@';
};
/*
* Sony NEWSOS 5.0 does not support the complete ANSI C standard.
*/
#ifdef SONY
fix = {
hackname = sony_ctype;
files = ctype.h;
test = "-x /bin/sony";
test = "! -z \"`if /bin/sony ; then echo true ; fi`\"";
sed = "s/__ctype/_ctype/g";
};
#endif
/*
* Incorrect #include in Sony News-OS 3.2.
*/
fix = {
hackname = sony_include;
files = machine/machparam.h;
select = '"\.\./machine/endian.h"';
sed = 's@"../machine/endian.h"@<machine/endian.h>@';
};
/*
* Sony NEWSOS 5.0 does not support the complete ANSI C standard.
*/
#ifdef SONY
fix = {
hackname = sony_stdio;
files = stdio.h;
test = "-x /bin/sony";
test = "! -z \"`if /bin/sony ; then echo true ; fi`\"";
sed = "s/__filbuf/_filbuf/g\n"
"s/__flsbuf/_flsbuf/g\n"
"s/__iob/_iob/g";
};
#endif
/*
* Add a `static' declaration of `getrnge' into <regexp.h>.
*
* Don't do this if there is already a `static void getrnge' declaration
* present, since this would cause a redeclaration error. Solaris 2.x has
* such a declaration.
*/
#ifdef SVR4
fix = {
hackname = static_getrnge;
files = regexp.h;
bypass = "static void getrnge";
sed = "/^static int[ \t]*size;/c\\\n"
"static int size ;\\\n\\\n"
"static int getrnge ();";
};
#endif
/*
* a missing semi-colon at the end of the statsswtch structure definition.
*/
fix = {
hackname = statsswtch;
files = rpcsvc/rstat.h;
select = "boottime$";
sed = "s/boottime$/boottime;/";
};
/*
* Don't use or define the name va_list in stdio.h.
* This is for ANSI and also to interoperate properly with gcc's varargs.h.
* Arrange for stdio.h to use stdarg.h to define __gnuc_va_list
*/
fix = {
hackname = stdio_va_list;
files = stdio.h;
/*
* Use __gnuc_va_list in arg types in place of va_list.
* On 386BSD use __gnuc_va_list instead of _VA_LIST_. We're hoping the
* trailing parentheses and semicolon save all other systems from this.
* Define __va_list__ (something harmless and unused) instead of va_list.
* Don't claim to have defined va_list.
*/
shell =
"if ( egrep \"__need___va_list\" $file ) > /dev/null 2>&1 ; then
:
else
echo \"#define __need___va_list\"
echo \"#include <stdarg.h>\"
fi
sed -e 's@ va_list @ __gnuc_va_list @' \\
-e 's@ va_list)@ __gnuc_va_list)@' \\
-e 's@ _BSD_VA_LIST_));@ __gnuc_va_list));@' \\
-e 's@ _VA_LIST_));@ __gnuc_va_list));@' \\
-e 's@ va_list@ __va_list__@' \\
-e 's@\\*va_list@*__va_list__@' \\
-e 's@ __va_list)@ __gnuc_va_list)@' \\
-e 's@GNUC_VA_LIST@GNUC_Va_LIST@' \\
-e 's@_NEED___VA_LIST@_NEED___Va_LIST@' \\
-e 's@VA_LIST@DUMMY_VA_LIST@' \\
-e 's@_Va_LIST@_VA_LIST@'";
};
/*
* Check for strict ansi compliance
*/
#ifdef STRICT_ANSI
fix = {
hackname = strict_ansi;
select = "__STDC__[ \t]*[=!]=[ \t]*[01]";
sed = "s/__STDC__[ \t]*==[ \t]*0/!defined (__STRICT_ANSI__)/g";
sed = "s/__STDC__[ \t]*!=[ \t]*0/defined (__STRICT_ANSI__)/g";
sed = "s/__STDC__[ \t]*==[ \t]*1/defined (__STRICT_ANSI__)/g";
sed = "s/__STDC__[ \t]*!=[ \t]*1/!defined (__STRICT_ANSI__)/g";
};
#endif
/*
* Fix bogus #ifdef on SunOS 4.1.
*/
fix = {
hackname = sun_bogus_ifdef;
files = "hsfs/hsfs_spec.h";
files = "hsfs/iso_spec.h";
select = '#ifdef __i386__ || __vax__';
sed = "s/\\#ifdef __i386__ || __vax__/\\#if __i386__ || __vax__/g";
};
/*
* Fix bogus #ifdef on SunOS 4.1.
*/
fix = {
hackname = sun_bogus_ifdef_sun4c;
files = "hsfs/hsnode.h";
select = '#ifdef __i386__ || __sun4c__';
sed = "s/\\#ifdef __i386__ || __sun4c__/\\#if __i386__ || __sun4c__/g";
};
/*
* Fix the CAT macro in SunOS memvar.h.
*/
fix = {
hackname = sun_catmacro;
files = pixrect/memvar.h;
select = "^#define[ \t]+CAT(a,b)";
sed = "/^#define[ \t]CAT(a,b)/ i\\\n"
"#ifdef __STDC__ \\\n"
"#define CAT(a,b) a##b\\\n"
"#else\n";
sed = "/^#define[ \t]CAT(a,b)/ a\\\n"
"#endif\n";
};
/*
* Fix return type of free and {c,m,re}alloc in <malloc.h> on SunOS 4.1.
* Also fix return type of {m,re}alloc in <malloc.h> on sysV68
*/
fix = {
hackname = sun_malloc;
files = malloc.h;
sed = "s/typedef[ \t]char \\*\tmalloc_t/typedef void \\*\tmalloc_t/g";
sed = "s/int[ \t][ \t]*free/void\tfree/g";
sed = "s/char\\([ \t]*\\*[ \t]*malloc\\)/void\\1/g";
sed = "s/char\\([ \t]*\\*[ \t]*realloc\\)/void\\1/g";
};
/*
* Fix non-ANSI memcpy declaration that conflicts with gcc's builtin
* declaration on Sun OS 4.x. We must only fix this on Sun OS 4.x, because
* many other systems have similar text but correct versions of the file.
* To ensure only Sun's is fixed, we grep for a likely unique string.
* Fix also on sysV68 R3V7.1 (head/memory.h\t50.1\t )
*/
fix = {
hackname = sun_memcpy;
files = memory.h;
select = "/\\*\t@\\(#\\)"
"(head/memory.h\t50.1\t "
"|memory\\.h 1\\.[2-4] 8./../.. SMI; from S5R2 1\\.2\t)\\*/";
sed = "1i\\\n/* This file was generated by fixincludes */\\\n"
"#ifndef __memory_h__\\\n"
"#define __memory_h__\\\n\\\n"
"#ifdef __STDC__\\\n"
"extern void *memccpy();\\\n"
"extern void *memchr();\\\n"
"extern void *memcpy();\\\n"
"extern void *memset();\\\n"
"#else\\\n"
"extern char *memccpy();\\\n"
"extern char *memchr();\\\n"
"extern char *memcpy();\\\n"
"extern char *memset();\\\n"
"#endif /* __STDC__ */\\\n\\\n"
"extern int memcmp();\\\n\\\n"
"#endif /* __memory_h__ */\n";
sed = "1,$d";
};
/*
* Check for yet more missing ';' in struct (in SunOS 4.0.x)
*/
fix = {
hackname = sun_rusers_semi;
files = rpcsvc/rusers.h;
select = "_cnt$";
sed = "/^struct/,/^};/s/_cnt$/_cnt;/";
};
/*
* signal.h on SunOS defines signal using (),
* which causes trouble when compiling with g++ -pedantic.
*/
fix = {
hackname = sun_signal;
files = sys/signal.h;
files = signal.h;
select = "^void\t" '\(\*signal\(\)\)\(\);';
sed = "/^void\t" '(\*signal())();$/i' "\\\n"
"#ifdef __cplusplus" "\\\n"
"void\t(*signal(...))(...);" "\\\n"
"#else" "\n";
sed = "/^void\t" '(\*signal())();$/a' "\\\n"
'#endif' "\n";
};
/*
* rpc/xdr.h on SunOS needs prototypes for
* its XDR->xdr_ops function pointers.
*/
fix = {
hackname = sun_xdr_proto;
files = rpc/xdr.h;
sed = 's/^\(.*\)\*\(x_.*\)();\(.*\)' "/\\\n"
"#ifdef __cplusplus\\\n"
'\1*\2(...);\3' "\\\n"
"#else\\\n"
'\1*\2();\3' "\\\n"
"#endif/g";
};
/*
* This file on SunOS 4 has a very large macro. When the sed loop
* tries pull it in, it overflows the pattern space size of the SunOS
* sed (GNU sed does not have this problem). Since the file does not
* require fixing, we remove it from the fixed directory.
*/
fix = {
hackname = sunos_large_macro;
files = sundev/ipi_error.h;
shell =
"echo \"Removing incorrect fix to SunOS <sundev/ipi_error.h>\" >&2\n"
"rm -f ${DESTDIR}/$file ${DESTDIR}/$file.\ncat > /dev/null";
};
/*
* math.h on SunOS 4 puts the declaration of matherr before the definition
* of struct exception, so the prototype (added by fixproto) causes havoc.
*/
fix = {
hackname = sunos_matherr_decl;
files = math.h;
/*
* Find the first occurrance of 'struct exception'.
* If it is the definition, then the file is okay.
* If it is a usage, then the order is wrong and we
* must insert a forward reference.
*/
test = "\"`fgrep 'struct exception' $file | line`\""
" != 'struct exception {'";
sed = "/matherr/i\\\nstruct exception;\n";
};
/*
* Correct the return type for strlen in strings.h in SunOS 4.
*/
fix = {
hackname = sunos_strlen;
files = strings.h;
sed = "s/int[ \t]*strlen();/__SIZE_TYPE__ strlen();/";
};
/*
* Solaris math.h and floatingpoint.h define __P without protection,
* which conflicts with the fixproto definition. The fixproto
* definition and the Solaris definition are used the same way.
*/
#ifdef SVR4
fix = {
hackname = svr4__p;
files = math.h;
files = floatingpoint.h;
select = "^#define[ \t]*__P";
sed = "/^#define[ \t]*__P/i\\\n#ifndef __P\n";
sed = "/^#define[ \t]*__P/a\\\n#endif\n";
};
#endif
/*
* Disable apparent native compiler optimization cruft in SVR4.2 <string.h>
* that is visible to any ANSI compiler using this include. Simply
* delete the lines that #define some string functions to internal forms.
*/
#ifdef SVR4
fix = {
hackname = svr4_disable_opt;
files = string.h;
select = '#define.*__std_hdr_';
sed = '/#define.*__std_hdr_/d';
};
#endif
/*
* Conditionalize some of <sys/endian.h> on __GNUC__ and __GNUG__.
*/
#ifdef SVR4
fix = {
hackname = svr4_endian;
files = sys/endian.h;
bypass = '__GNUC__';
sed = "/#\tifdef\t__STDC__/i\\\n"
"# if !defined (__GNUC__) && !defined (__GNUG__)\n";
sed = "/#\t\tinclude\t<sys\\/byteorder.h>/s/\t\t/ /";
sed = "/# include\t<sys\\/byteorder.h>/i\\\n"
"# endif /* !defined (__GNUC__) && !defined (__GNUG__) */\n";
};
#endif
/*
* Remove useless extern keyword from struct forward declarations
* in <sys/stream.h> and <sys/strsubr.h>
*/
#ifdef SVR4
fix = {
hackname = svr4_extern_struct;
files = sys/stream.h;
files = sys/strsubr.h;
select = 'extern struct [a-z_]*;';
sed = 's/extern struct \([a-z][a-z_]*\)/struct \1/';
};
#endif
/*
* Fix declarations of `ftw' and `nftw' in <ftw.h>. On some/most SVR4
* systems the file <ftw.h> contains extern declarations of these
* functions followed by explicitly `static' definitions of these
* functions... and that's not allowed according to ANSI C. (Note
* however that on Solaris, this header file glitch has been pre-fixed by
* Sun. In the Solaris version of <ftw.h> there are no static
* definitions of any function so we don't need to do any of this stuff
* when on Solaris.
*/
#ifdef SVR4
#ifndef SOLARIS
fix = {
hackname = svr4_ftw;
files = ftw.h;
select = '^extern int ftw\(const';
sed = '/^extern int ftw(const/i' "\\\n"
"#if !defined(_STYPES)\\\n"
"static\\\n"
"#else\\\n"
"extern\\\n"
"#endif";
sed = 's/extern \(int ftw(const.*\)$/\1/';
sed = "/^extern int nftw/i\\\n"
"#if defined(_STYPES)\\\n"
"static\\\n"
"#else\\\n"
"extern\\\n"
"#endif";
sed = 's/extern \(int nftw.*\)$/\1/';
sed = "/^extern int ftw(),/c\\\n"
"#if !defined(_STYPES)\\\n"
"static\\\n"
"#else\\\n"
"extern\\\n"
"#endif\\\n"
" int ftw();\\\n"
"#if defined(_STYPES)\\\n"
"static\\\n"
"#else\\\n"
"extern\\\n"
"#endif\\\n"
" int nftw();";
};
#endif
#endif
/*
* Fix broken decl of getcwd present on some svr4 systems.
*/
#ifdef SVR4
fix = {
hackname = svr4_getcwd;
files = stdlib.h;
files = unistd.h;
select = 'getcwd\(char \*, int\)';
sed = 's/getcwd(char \*, int)/getcwd(char *, size_t)/';
};
#endif
/*
* set ifdef _KERNEL
*/
#ifdef SVR4
fix = {
hackname = svr4_kernel;
files = fs/rfs/rf_cache.h;
files = sys/erec.h;
files = sys/err.h;
files = sys/char.h;
files = sys/getpages.h;
files = sys/map.h;
files = sys/cmn_err.h;
files = sys/kdebugger.h;
bypass = '_KERNEL';
sed = "1i\\\n#ifdef _KERNEL";
sed = "$a\\\n#endif /* _KERNEL */";
};
#endif
/*
* Delete any #defines of `__i386' which may be present in <ieeefp.h>. They
* tend to conflict with the compiler's own definition of this symbol. (We
* will use the compiler's definition.)
* Likewise __sparc, for Solaris, and __i860, and a few others
* (guessing it is necessary for all of them).
*/
#ifdef SVR4
fix = {
hackname = svr4_mach_defines;
files = ieeefp.h;
select = "#define[ \t]*__(i386|i860|mips|sparc|m88k|m68k)[ \t]";
sed = "/#define[ \t]*__\\(i386|i860|mips|sparc|m88k|m68k\\)[ \t]/d";
};
#endif
/*
* Fix declarations of `makedev', `major', and `minor' in <sys/mkdev.h>.
*/
#ifdef SVR4
fix = {
hackname = svr4_mkdev;
files = sys/mkdev.h;
sed = "/^dev_t makedev(const/c\\\n"
"static dev_t makedev(const major_t, const minor_t);";
sed = "/^dev_t makedev()/c\\\n"
"static dev_t makedev();";
sed = "/^major_t major(const/c\\\n"
"static major_t major(const dev_t);";
sed = "/^major_t major()/c\\\n"
"static major_t major();";
sed = "/^minor_t minor(const/c\\\n"
"static minor_t minor(const dev_t);";
sed = "/^minor_t minor()/c\\\n"
"static minor_t minor();";
};
#endif
/*
* Fix reference to NC_NPI_RAW in <sys/netcspace.h>.
* Also fix types of array initializers.
*/
#ifdef SVR4
fix = {
hackname = svr4_netcspace;
files = sys/netcspace.h;
select = 'NC_NPI_RAW';
sed = 's/NC_NPI_RAW/NC_TPI_RAW/g';
sed = 's/NC_/(unsigned long) NC_/';
};
#endif
/*
* Fix reference to NMSZ in <sys/adv.h>.
*/
#ifdef SVR4
fix = {
hackname = svr4_nmsz;
files = sys/adv.h;
select = '\[NMSZ\]';
sed = 's/\[NMSZ\]/\[RFS_NMSZ\]/g';
};
#endif
/*
* Completely replace <sys/varargs.h> with a file that includes gcc's
* stdarg.h or varargs.h files as appropriate.
*/
#ifdef SVR4
fix = {
hackname = svr4_no_varargs;
files = sys/varargs.h;
shell = "cat > /dev/null\n"
"cat << _EOF_\n"
"/* This file was generated by fixincludes. */\n"
"#ifndef _SYS_VARARGS_H\n"
"#define _SYS_VARARGS_H\n\n"
"#ifdef __STDC__\n"
"#include <stdarg.h>\n"
"#else\n"
"#include <varargs.h>\n"
"#endif\n\n"
"#endif /* _SYS_VARARGS_H */\n"
"_EOF_";
};
#endif
/*
* Fix broken decl of profil present on some svr4 systems.
*/
#ifdef SVR4
fix = {
hackname = svr4_profil;
files = stdlib.h;
files = unistd.h;
sed = 's/profil(unsigned short \*, unsigned int, '
'unsigned int, unsigned int)'
'/profil(unsigned short *, size_t, int, unsigned)/';
};
#endif
/*
* Convert functions to prototype form, and fix arg names in <sys/stat.h>.
*/
#ifdef SVR4
fix = {
hackname = svr4_proto_form;
files = sys/stat.h;
select = 'const extern';
sed = "/^stat([ \t]*[^c]/ {\nN\nN\n"
"s/(.*)\\n/( /\n"
"s/;\\n/, /\n"
"s/;$/)/\n" "}";
sed = "/^lstat([ \t]*[^c]/ {\nN\nN\n"
"s/(.*)\\n/( /\n"
"s/;\\n/, /\n"
"s/;$/)/\n" "}";
sed = "/^fstat([ \t]*[^i]/ {\nN\nN\n"
"s/(.*)\\n/( /\n"
"s/;\\n/, /\n"
"s/;$/)/\n" "}";
sed = "/^mknod([ \t]*[^c]/{\nN\nN\nN\n"
"s/(.*)\\n/( /\n"
"s/;\\n/, /g\n"
"s/;$/)/\n" "}";
sed = "1,$s/\\([^A-Za-z]\\)path\\([^A-Za-z]\\)/\\1__path\\2/g";
sed = "1,$s/\\([^A-Za-z]\\)buf\\([^A-Za-z]\\)/\\1__buf\\2/g";
sed = "1,$s/\\([^A-Za-z]\\)fd\\([^A-Za-z]\\)/\\1__fd\\2/g";
sed = "1,$s/ret\\([^u]\\)/__ret\\1/g";
sed = "1,$s/\\([^_]\\)mode\\([^_]\\)/\\1__mode\\2/g";
sed = "1,$s/\\([^_r]\\)dev\\([^_]\\)/\\1__dev\\2/g";
};
#endif
/*
* Add a prototyped declaration of mmap to <sys/mman.h>.
*/
#ifdef SVR4
fix = {
hackname = svr4_proto_mmap;
files = sys/mman.h;
select = '^extern caddr_t mmap();$';
sed = '/^extern caddr_t mmap();$/c' "\\\n"
"#ifdef __STDC__\\\n"
"extern caddr_t mmap (caddr_t, size_t, int, int, int, off_t);\\\n"
"#else /* !defined(__STDC__) */\\\n"
"extern caddr_t mmap ();\\\n"
"#endif /* !defined(__STDC__) */\\\n";
};
#endif
/*
* Add a #define of _SIGACTION_ into <sys/signal.h>.
*/
#ifdef SVR4
fix = {
hackname = svr4_sigaction;
files = sys/signal.h;
sed = "/^struct sigaction {/i\\\n"
"#define _SIGACTION_";
sed = 's/(void *(\*)())/(void (*)(int))/';
};
#endif
/*
* Put storage class at start of decl, to avoid warning.
*/
#ifdef SVR4
fix = {
hackname = svr4_storage_class;
files = rpc/types.h;
select = 'const extern';
sed = 's/const extern/extern const/g';
};
#endif
/*
* Fix return value of mem{ccpy,chr,cpy,set} and str{len,spn,cspn}
* in string.h on sysV68
* Correct the return type for strlen in string.h on Lynx.
* Correct the argument type for ffs in string.h on Alpha OSF/1 V2.0.
* Add missing const for strdup on OSF/1 V3.0.
* On sysV88 layout is slightly different.
*/
fix = {
hackname = systypes;
files = "sys/types.h";
files = "stdlib.h";
files = "sys/stdtypes.h";
files = "stddef.h";
files = "memory.h";
files = "unistd.h";
select = "typedef[ \t]+[a-z_][ \ta-z_]*[ \t]"
"(size|ptrdiff|wchar)_t";
sed = "/^[ \t]*\*[ \t]*typedef unsigned int size_t;/N";
sed = "s/^\\([ \t]*\\*[ \t]*typedef unsigned int size_t;\\n"
"[ \t]*\\*\\/\\)/\\1\\\n"
"#ifndef __SIZE_TYPE__\\\n"
"#define __SIZE_TYPE__ long unsigned int\\\n"
"#endif\\\n"
"typedef __SIZE_TYPE__ size_t;\\\n/";
sed = "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]size_t/i\\\n"
"#ifndef __SIZE_TYPE__\\\n"
"#define __SIZE_TYPE__ long unsigned int\\\n"
"#endif\n";
sed = "s/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]size_t/"
"typedef __SIZE_TYPE__ size_t/";
sed = "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]ptrdiff_t/i\\\n"
"#ifndef __PTRDIFF_TYPE__\\\n"
"#define __PTRDIFF_TYPE__ long int\\\n"
"#endif\n";
sed = "s/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]ptrdiff_t/"
"typedef __PTRDIFF_TYPE__ ptrdiff_t/";
sed = "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]wchar_t/i\\\n"
"#ifndef __WCHAR_TYPE__\\\n"
"#define __WCHAR_TYPE__ int\\\n"
"#endif\\\n"
"#ifndef __cplusplus\n";
sed = "/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]wchar_t/a\\\n"
"#endif\n";
sed = "s/typedef[ \t][ \t]*[a-z_][ \ta-z_]*[ \t]wchar_t/"
"typedef __WCHAR_TYPE__ wchar_t/";
};
/*
* Fix return type of exit and abort in <stdlib.h> on SunOS 4.1.
* Also wrap protection around size_t for m88k-sysv3 systems.
* We use a funny name to ensure it follows 'systypes' fix.
*/
fix = {
hackname = systypes_for_aix;
files = sys/types.h;
select = "typedef[ \t][ \t]*[A-Za-z_][ \tA-Za-z_]*[ \t]size_t";
sed = "/typedef[ \t][ \t]*[A-Za-z_][ \tA-Za-z_]*[ \t]size_t/i\\\n"
"#ifndef _GCC_SIZE_T\\\n"
"#define _GCC_SIZE_T\n";
sed = "/typedef[ \t][ \t]*[A-Za-z_][ \tA-Za-z_]*[ \t]size_t/a\\\n"
"#endif\n";
};
/*
* if the #if says _cplusplus, not the double underscore __cplusplus
* that it should be
*/
fix = {
hackname = sysv68_string;
files = string.h;
sed = "s/extern[ \t]*int[ \t]*strlen();/extern unsigned int strlen();/";
sed = "s/extern[ \t]*int[ \t]*ffs[ \t]*(long);/extern int ffs(int);/";
sed = "s/strdup(char \\*s1);/strdup(const char *s1);/";
sed = "/^extern char$/N";
sed = "s/^extern char\\(\\n\t\\*memccpy(),\\)$/extern void\\1/";
sed = "/^\tstrncmp(),$/N";
sed = "s/^\\(\tstrncmp()\\),\\n\\(\tstrlen(),\\)$/\\1;\\\n"
"extern unsigned int\\\n\\2/";
sed = "/^extern int$/N";
sed = 's/^extern int\(\n strlen(),\)/extern size_t\1/';
};
/*
* Replace definitions of size_t, ptrdiff_t and wchar_t
* Install the proper definition of the three standard types
* in header files that they come from.
*/
fix = {
hackname = sysz_stdlib_for_sun;
mach = "*-sun-*";
mach = "m88k-*-sysv3*";
files = stdlib.h;
sed = "s/int\tabort/void\tabort/g";
sed = "s/int\tfree/void\tfree/g";
sed = "s/char[ \t]*\\*[ \t]*calloc/void \\*\tcalloc/g";
sed = "s/char[ \t]*\\*[ \t]*malloc/void \\*\tmalloc/g";
sed = "s/char[ \t]*\\*[ \t]*realloc/void \\*\trealloc/g";
sed = "s/int[ \t][ \t]*exit/void\texit/g";
sed = "/typedef[ \ta-zA-Z_]*[ \t]size_t[ \t]*;/i\\\n"
"#ifndef _GCC_SIZE_T\\\n"
"#define _GCC_SIZE_T\n";
sed = "/typedef[ \ta-zA-Z_]*[ \t]size_t[ \t]*;/a\\\n"
"#endif\n";
};
/*
* Fix this Sun file to avoid interfering with stddef.h.
* We use a funny name to ensure it follows 'systypes' fix.
*/
fix = {
hackname = sysz_stdtypes_for_sun;
files = sys/stdtypes.h;
sed = "/[\t ]size_t.*;/i\\\n"
"#ifndef _GCC_SIZE_T\\\n"
"#define _GCC_SIZE_T\n";
sed = "/[\t ]size_t.*;/a\\\n"
"#endif\n";
sed = "/[\t ]ptrdiff_t.*;/i\\\n"
"#ifndef _GCC_PTRDIFF_T\\\n"
"#define _GCC_PTRDIFF_T\n";
sed = "/[\t ]ptrdiff_t.*;/a\\\n"
"#endif\n";
sed = "/[\t ]wchar_t.*;/i\\\n"
"#ifndef _GCC_WCHAR_T\\\n"
"#define _GCC_WCHAR_T\n";
sed = "/[\t ]wchar_t.*;/a\\\n"
"#endif\n";
};
/*
* Fix this file to avoid interfering with stddef.h,
* but don't mistakenly match ssize_t present in AIX for the ps/2,
* or typedefs which use (but do not set) size_t.
*/
fix = {
hackname = tinfo_cplusplus;
files = tinfo.h;
sed = "s/[ \t]_cplusplus/ __cplusplus/";
};
/*
* Cancel out ansi_compat.h on Ultrix. Replace it with empty file.
*/
fix = {
hackname = ultrix_ansi_compat;
files = ansi_compat.h;
select = ULTRIX;
sed = "1i\\\n/* This file intentionally left blank. */\n";
sed = "1,$d";
};
/*
* parameter to atof not const on DECstation Ultrix V4.0 and NEWS-OS 4.2R.
* also get rid of bogus inline definitions in HP-UX 8.0
*/
fix = {
hackname = ultrix_atof_param;
files = math.h;
sed = "s@atof(\\([ \t]*char[ \t]*\\*[^)]*\\))@atof(const \\1)@";
sed = "s@inline int abs(int [a-z][a-z]*) {.*}@extern \"C\" int abs(int);@";
sed = "s@inline double abs(double [a-z][a-z]*) {.*}@@";
sed = "s@inline int sqr(int [a-z][a-z]*) {.*}@@";
sed = "s@inline double sqr(double [a-z][a-z]*) {.*}@@";
};
/*
* parameters not const on DECstation Ultrix V4.0 and OSF/1.
*/
fix = {
hackname = ultrix_const;
files = stdio.h;
sed = 's@perror( char \*__s );@perror( const char *__s );@';
sed = 's@fputs( char \*__s,@fputs( const char *__s,@';
sed = 's@fopen( char \*__filename, char \*__type );@'
'fopen( const char *__filename, const char *__type );@';
sed = 's@fwrite( void \*__ptr,@fwrite( const void *__ptr,@';
sed = 's@fscanf( FILE \*__stream, char \*__format,@'
'fscanf( FILE *__stream, const char *__format,@';
sed = 's@scanf( char \*__format,@scanf( const char *__format,@';
sed = 's@sscanf( char \*__s, char \*__format,@'
'sscanf( const char *__s, const char *__format,@';
sed = 's@popen(char \*, char \*);@popen(const char *, const char *);@';
sed = 's@tempnam(char\*,char\*);@tempnam(const char*,const char*);@';
};
/*
* Check for bad #ifdef line (in Ultrix 4.1)
*/
fix = {
hackname = ultrix_ifdef;
select = "#ifdef KERNEL";
files = sys/file.h;
sed = "s/#ifdef KERNEL/#if defined(KERNEL)/";
};
/*
* Avoid nested comments on Ultrix 4.3.
*/
fix = {
hackname = ultrix_nested_cmnt;
files = rpc/svc.h;
sed = "s@^\\( \\*\tint protocol; \\)/\\*@\\1*/ /*@";
};
/*
* Check for superfluous `static' (in Ultrix 4.2)
* On Ultrix 4.3, includes of other files (r3_cpu.h,r4_cpu.h) is broken.
*/
fix = {
hackname = ultrix_static;
files = machine/cpu.h;
select = '#include "r[34]_cpu';
sed = "s/^static struct tlb_pid_state/struct tlb_pid_state/";
sed = 's/^#include "r3_cpu\.h"$/#include <machine\/r3_cpu\.h>/';
sed = 's/^#include "r4_cpu\.h"$/#include <machine\/r4_cpu\.h>/';
};
/*
* Fix multiple defines for NULL
*/
fix = {
hackname = undefine_null;
select = "^#[ \t]*define[ \t]*[ \t]NULL[ \t]";
bypass = "#[ \t]*(ifn|un)def[ \t]*[ \t]NULL($|[ \t])";
sed = "/^#[ \t]*define[ \t][ \t]*NULL[ \t]/i\\\n"
"#undef NULL\n";
};
/*
* Fix definitions of macros used by va-i960.h in VxWorks header file.
*/
fix = {
hackname = va_i960_macro;
files = arch/i960/archI960.h;
select = "__(vsiz|vali|vpad|alignof__)";
sed = "s/__vsiz/__vxvsiz/";
sed = "s/__vali/__vxvali/";
sed = "s/__vpad/__vxvpad/";
sed = "s/__alignof__/__vxalignof__/";
};
/*
* AIX headers define NULL to be cast to a void pointer,
* which is illegal in ANSI C++.
*/
fix = {
hackname = void_null;
files = curses.h;
files = dbm.h;
files = locale.h;
files = stdio.h;
files = stdlib.h;
files = string.h;
files = time.h;
files = unistd.h;
files = sys/dir.h;
files = sys/param.h;
files = sys/types.h;
select = "#[ \t]*define[ \t][ \t]*NULL[ \t].*void";
sed = "s/^#[ \t]*define[ \t]*NULL[ \t]*((void[ \t]*\\*)0)"
"/#define NULL 0/";
};
/*
* Make VxWorks header which is almost gcc ready fully gcc ready.
*/
fix = {
hackname = vxworks_gcc_problem;
files = types/vxTypesBase.h;
select = "__GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__";
sed = "s/#ifdef __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__/"
"#if 1/";
sed = "/[ \t]size_t/i\\\n"
"#ifndef _GCC_SIZE_T\\\n"
"#define _GCC_SIZE_T\n";
sed = "/[ \t]size_t/a\\\n"
"#endif\n";
sed = "/[ \t]ptrdiff_t/i\\\n"
"#ifndef _GCC_PTRDIFF_T\\\n"
"#define _GCC_PTRDIFF_T\n";
sed = "/[ \t]ptrdiff_t/a\\\n"
"#endif\n";
sed = "/[ \t]wchar_t/i\\\n"
"#ifndef _GCC_WCHAR_T\\\n"
"#define _GCC_WCHAR_T\n";
sed = "/[ \t]wchar_t/a\\\n"
"#endif\n";
};
/*
* Fix VxWorks <time.h> to not require including <vxTypes.h>.
*/
fix = {
hackname = vxworks_needs_vxtypes;
files = time.h;
select = "uint_t[ \t][ \t]*_clocks_per_sec";
sed = "s/uint_t/unsigned int/";
};
/*
* Fix VxWorks <sys/stat.h> to not require including <vxWorks.h>.
*/
fix = {
hackname = vxworks_needs_vxworks;
files = sys/stat.h;
test = "-r types/vxTypesOld.h";
test = "-n \"`fgrep '#include' $file`\"";
test = "-n \"`fgrep ULONG $file`\"";
select = "#[ \t]define[ \t][ \t]*__INCstath";
sed = "/#[ \t]define[ \t][ \t]*__INCstath/a\\\n"
"#include <types/vxTypesOld.h>\n";
};
/*
* Another bad dependency in VxWorks 5.2 <time.h>.
*/
fix = {
hackname = vxworks_time;
files = time.h;
select = "VOIDFUNCPTR";
test = "-r vxWorks.h";
sed = "/VOIDFUNCPTR/i\\\n"
"#ifndef __gcc_VOIDFUNCPTR_defined\\\n"
"#ifdef __cplusplus\\\n"
"typedef void (*__gcc_VOIDFUNCPTR) (...);\\\n"
"#else\\\n"
"typedef void (*__gcc_VOIDFUNCPTR) ();\\\n"
"#endif\\\n"
"#define __gcc_VOIDFUNCPTR_defined\\\n"
"#endif\n";
sed = "s/VOIDFUNCPTR/__gcc_VOIDFUNCPTR/g";
};
/*
* There are several name conflicts with C++ reserved words in X11 header
* files. These are fixed in some versions, so don't do the fixes if
* we find __cplusplus in the file. These were found on the RS/6000.
*/
fix = {
hackname = x11_class;
files = X11/ShellP.h;
bypass = __cplusplus;
sed = "/char [*]class;/i\\\n"
"#ifdef __cplusplus\\\n"
"\tchar *c_class;\\\n"
"#else\n";
sed = "/char [*]class;/a\\\n"
"#endif\n";
};
/*
* class in Xm/BaseClassI.h
*/
fix = {
hackname = x11_class_usage;
files = Xm/BaseClassI.h;
bypass = "__cplusplus";
sed = "s/ class[)]/ c_class)/g";
};
/*
* new in Xm/Traversal.h
*/
fix = {
hackname = x11_new;
files = Xm/Traversal.h;
bypass = __cplusplus;
sed = "/Widget\told, new;/i\\\n"
"#ifdef __cplusplus\\\n"
"\tWidget\told, c_new;\\\n"
"#else\n";
sed = "/Widget\told, new;/a\\\n"
"#endif\n";
sed = "s/Widget new,/Widget c_new,/g";
};
/*
* Incorrect sprintf declaration in X11/Xmu.h
*/
fix = {
hackname = x11_sprintf;
files = X11*/Xmu.h;
sed = "s,^extern char \\*\tsprintf();$,#ifndef __STDC__\\\n"
"extern char *\tsprintf();\\\n"
"#endif /* !defined __STDC__ */,";
};
/*EOF*/
#!/bin/sh -p
#
# DO NOT EDIT THIS FILE (inclhack.sh)
#
# It has been autogen-ed Thursday March 19, 1998 at 08:26:10 AM PST
# From the definitions inclhack.def
# and the template file inclhack.tpl
#
# Install modified versions of certain ANSI-incompatible system header
# files which are fixed to work correctly with ANSI C and placed in a
# directory that GNU C will search.
#
# This script contains 101 fixup scripts.
#
# See README-fixinc for more information.
#
# inclhack is free software.
#
# You may redistribute it and/or modify it under the terms of the
# GNU General Public License, as published by the Free Software
# Foundation; either version 2, or (at your option) any later version.
#
# inclhack is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with inclhack. See the file "COPYING". If not,
# write to: The Free Software Foundation, Inc.,
# 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#
# # # # # # # # # # # # # # # # # # # # #
#
# Directory containing the original header files.
# (This was named INCLUDES, but that conflicts with a name in Makefile.in.)
#
INPUT=${2-${INPUT-/usr/include}}
( \cd ${INPUT} > /dev/null 2>&1 ) || {
echo 'fixincludes: input dir `'$INPUT"' is an invalid directory"
exit 1
}
# # # # # # # # # # # # # # # # # # # # #
#
# Directory in which to store the results.
# Fail if no arg to specify a directory for the output.
if [ "x$1" = "x" ]
then echo fixincludes: no output directory specified
exit 1
fi
LIB=${1}
# Make sure it exists.
if [ ! -d $LIB ]; then
mkdir $LIB || {
echo fixincludes: output dir '`'$LIB"' cannot be created"
exit 1
}
else
( \cd $LIB && touch DONE && rm DONE ) || {
echo fixincludes: output dir '`'$LIB"' is an invalid directory"
exit 1
}
fi
# Define what target system we're fixing.
#
if test -r ./Makefile; then
target_canonical="`sed -n -e 's,^target[ ]*=[ ]*\(.*\)$,\1,p' < Makefile`"
fi
# If not from the Makefile, then try config.guess
#
if test -z "${target_canonical}" ; then
if test -x ./config.guess ; then
target_canonical="`config.guess`" ; fi
test -z "${target_canonical}" && target_canonical=unknown
fi
# # # # # # # # # # # # # # # # # # # # #
#
# Define PWDCMD as a command to use to get the working dir
# in the form that we want.
PWDCMD=pwd
case "`$PWDCMD`" in
//*)
# On an Apollo, discard everything before `/usr'.
PWDCMD="eval pwd | sed -e 's,.*/usr/,/usr/,'"
;;
esac
# Original directory.
ORIGDIR=`${PWDCMD}`
# Make LIB absolute only if needed to avoid problems with the amd.
case $LIB in
/*)
;;
*)
cd $LIB; LIB=`${PWDCMD}`
;;
esac
echo Building fixed headers in ${LIB}
# Determine whether this system has symbolic links.
if ln -s X $LIB/ShouldNotExist 2>/dev/null; then
rm -f $LIB/ShouldNotExist
LINKS=true
elif ln -s X /tmp/ShouldNotExist 2>/dev/null; then
rm -f /tmp/ShouldNotExist
LINKS=true
else
LINKS=false
fi
# # # # # # # # # # # # # # # # # # # # #
#
echo Finding directories and links to directories
cd ${INPUT}
# Find all directories and all symlinks that point to directories.
# Put the list in $files.
# Each time we find a symlink, add it to newdirs
# so that we do another find within the dir the link points to.
# Note that $files may have duplicates in it;
# later parts of this file are supposed to ignore them.
dirs="."
levels=2
while [ -n "$dirs" ] && [ $levels -gt 0 ]
do
levels=`expr $levels - 1`
newdirs=
for d in $dirs
do
echo " Searching $INPUT/$d"
# Find all directories under $d, relative to $d, excluding $d itself.
# (The /. is needed after $d in case $d is a symlink.)
files="$files `find $d/. -type d -print | \
sed -e '/\/\.$/d' -e 's@/./@/@g'`"
# Find all links to directories.
# Using `-exec test -d' in find fails on some systems,
# and trying to run test via sh fails on others,
# so this is the simplest alternative left.
# First find all the links, then test each one.
theselinks=
$LINKS && \
theselinks=`find $d/. -type l -print | sed -e 's@/./@/@g'`
for d1 in $theselinks --dummy--
do
# If the link points to a directory,
# add that dir to $newdirs
if [ -d $d1 ]
then
files="$files $d1"
if [ "`ls -ld $d1 | sed -n 's/.*-> //p'`" != "." ]
then
newdirs="$newdirs $d1"
fi
fi
done
done
dirs="$newdirs"
done
# # # # # # # # # # # # # # # # # # # # #
#
dirs=
echo "All directories (including links to directories):"
echo $files
for file in $files; do
rm -rf $LIB/$file
if [ ! -d $LIB/$file ]
then mkdir $LIB/$file
fi
done
mkdir $LIB/root
# # # # # # # # # # # # # # # # # # # # #
#
# treetops gets an alternating list
# of old directories to copy
# and the new directories to copy to.
treetops="${INPUT} ${LIB}"
if $LINKS; then
echo 'Making symbolic directory links'
for file in $files; do
dest=`ls -ld $file | sed -n 's/.*-> //p'`
if [ "$dest" ]; then
cwd=`${PWDCMD}`
# In case $dest is relative, get to $file's dir first.
cd ${INPUT}
cd `echo ./$file | sed -n 's&[^/]*$&&p'`
# Check that the target directory exists.
# Redirections changed to avoid bug in sh on Ultrix.
(cd $dest) > /dev/null 2>&1
if [ $? = 0 ]; then
cd $dest
# X gets the dir that the link actually leads to.
x=`${PWDCMD}`
# Canonicalize ${INPUT} now to minimize the time an
# automounter has to change the result of ${PWDCMD}.
cinput=`cd ${INPUT}; ${PWDCMD}`
# If a link points to ., make a similar link to .
if [ $x = ${cinput} ]; then
echo $file '->' . ': Making link'
rm -fr ${LIB}/$file > /dev/null 2>&1
ln -s . ${LIB}/$file > /dev/null 2>&1
# If link leads back into ${INPUT},
# make a similar link here.
elif expr $x : "${cinput}/.*" > /dev/null; then
# Y gets the actual target dir name, relative to ${INPUT}.
y=`echo $x | sed -n "s&${cinput}/&&p"`
# DOTS is the relative path from ${LIB}/$file's dir back to ${LIB}.
dots=`echo "$file" |
sed -e 's@^./@@' -e 's@/./@/@g' -e 's@[^/][^/]*@..@g' -e 's@..$@@'`
echo $file '->' $dots$y ': Making link'
rm -fr ${LIB}/$file > /dev/null 2>&1
ln -s $dots$y ${LIB}/$file > /dev/null 2>&1
else
# If the link is to a dir $target outside ${INPUT},
# repoint the link at ${INPUT}/root$target
# and process $target into ${INPUT}/root$target
# treat this directory as if it actually contained the files.
echo $file '->' root$x ': Making link'
if [ -d $LIB/root$x ]
then true
else
dirname=root$x/
dirmade=.
cd $LIB
while [ x$dirname != x ]; do
component=`echo $dirname | sed -e 's|/.*$||'`
mkdir $component >/dev/null 2>&1
cd $component
dirmade=$dirmade/$component
dirname=`echo $dirname | sed -e 's|[^/]*/||'`
done
fi
# Duplicate directory structure created in ${LIB}/$file in new
# root area.
for file2 in $files; do
case $file2 in
$file/*)
dupdir=${LIB}/root$x/`echo $file2 | sed -n "s|^${file}/||p"`
echo "Duplicating ${file}'s ${dupdir}"
if [ -d ${dupdir} ]
then true
else
mkdir ${dupdir}
fi
;;
*)
;;
esac
done
# Get the path from ${LIB} to $file, accounting for symlinks.
parent=`echo "$file" | sed -e 's@/[^/]*$@@'`
libabs=`cd ${LIB}; ${PWDCMD}`
file2=`cd ${LIB}; cd $parent; ${PWDCMD} | sed -e "s@^${libabs}@@"`
# DOTS is the relative path from ${LIB}/$file's dir back to ${LIB}.
dots=`echo "$file2" | sed -e 's@/[^/]*@../@g'`
rm -fr ${LIB}/$file > /dev/null 2>&1
ln -s ${dots}root$x ${LIB}/$file > /dev/null 2>&1
treetops="$treetops $x ${LIB}/root$x"
fi
fi
cd $cwd
fi
done
fi
# # # # # # # # # # # # # # # # # # # # #
#
required=
set x $treetops
shift
while [ $# != 0 ]; do
# $1 is an old directory to copy, and $2 is the new directory to copy to.
#
SRCDIR=`cd ${INPUT} ; cd $1 ; ${PWDCMD}`
export SRCDIR
shift
DESTDIR=`cd $1;${PWDCMD}`
export DESTDIR
shift
# The same dir can appear more than once in treetops.
# There's no need to scan it more than once.
#
if [ -f ${DESTDIR}/DONE ]
then continue ; fi
touch ${DESTDIR}/DONE
echo Fixing directory ${SRCDIR} into ${DESTDIR}
# Check .h files which are symlinks as well as those which are files.
# A link to a header file will not be processed by anything but this.
#
cd ${SRCDIR}
if $LINKS; then
files=`find . -name '*.h' \( -type f -o -type l \) -print`
else
files=`find . -name '*.h' -type f -print`
fi
echo Checking header files
for file in $files; do
if ( test ! -r $file -o \
-n "`fgrep 'This file is part of the GNU C Library' $file`" )
then continue ; fi
fixlist=""
# Aix_Syswait fix
#
case "$file" in ./sys/wait.h )
if ( test -n "`egrep 'bos325,' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
aix_syswait"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/^extern pid_t wait3();$/i\
struct rusage;
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Aix_Volatile fix
#
case "$file" in ./sys/signal.h )
if ( test -n "`egrep 'typedef volatile int sig_atomic_t' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
aix_volatile"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/typedef volatile int sig_atomic_t/typedef int sig_atomic_t/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Alpha_Getopt fix
#
case "$file" in ./stdio.h | \
./stdlib.h )
if ( test -n "`egrep 'getopt\\(int, char \\*\\[' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
alpha_getopt"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/getopt(int, char \*\[\],[ ]*char \*)/getopt(int, char *const[], const char *)/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Alpha_Parens fix
#
case "$file" in ./sym.h )
if ( test -n "`egrep '#ifndef\\(__mips64\\)' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
alpha_parens"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/#ifndef(__mips64)/#ifndef __mips64/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Alpha_Sbrk fix
#
case "$file" in ./unistd.h )
if ( test -n "`egrep 'char[ ]*\\*[ ]*sbrk[ ]*\\(' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
alpha_sbrk"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/char\([ ]*\*[ ]*sbrk[ ]*(\)/void\1/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Arm_Norcroft_Hint fix
#
case "$file" in ./X11/Intrinsic.h )
fixlist="${fixlist}
arm_norcroft_hint"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/___type p_type/p_type/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Arm_Wchar fix
#
case "$file" in ./stdlib.h )
if ( test -n "`egrep '#[ ]*define[ ]*__wchar_t' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
arm_wchar"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/\(#[ ]*ifndef[ ]*\)__wchar_t/\1_GCC_WCHAR_T/' \
-e 's/\(#[ ]*define[ ]*\)__wchar_t/\1_GCC_WCHAR_T/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Aux_Asm fix
#
case "$file" in ./sys/param.h )
if ( test -n "`egrep '#ifndef NOINLINE' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
aux_asm"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's|#ifndef NOINLINE|#if !defined(NOINLINE) \&\& !defined(__GNUC__)|' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Avoid_Bool fix
#
case "$file" in ./curses.h )
fixlist="${fixlist}
avoid_bool"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/^#[ ]*define[ ][ ]*bool[ ][ ]*char[ ]*$/i\
#ifndef __cplusplus
' \
-e '/^#[ ]*define[ ][ ]*bool[ ][ ]*char[ ]*$/a\
#endif
' \
-e '/^typedef[ ][ ]*char[ ][ ]*bool[ ]*;/i\
#ifndef __cplusplus
' \
-e '/^typedef[ ][ ]*char[ ][ ]*bool[ ]*;/a\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Bad_Malloc_Decl fix
#
case "$file" in ./rpc/types.h )
if ( test -z "`egrep '\"C\"' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
bad_malloc_decl"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '1i\
#ifdef __cplusplus\
extern "C" {\
#endif\
' \
-e '$a\
#ifdef __cplusplus\
}\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Bad_Struct_Term fix
#
case "$file" in ./curses.h )
if ( test -n "`egrep '^[ ]*typedef[ ]+struct[ ]+term[ ]*;' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
bad_struct_term"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/^[ ]*typedef[ ][ ]*\(struct[ ][ ]*term[ ]*;[ ]*\)$/\1/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Badquote fix
#
case "$file" in ./sundev/vuid_event.h )
fixlist="${fixlist}
badquote"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/doesn'\''t/does not/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Broken_Assert_Stdio fix
#
case "$file" in ./assert.h )
if ( test -n "`egrep 'stderr' $file`" -a \
-z "`egrep 'include.*stdio.h' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
broken_assert_stdio"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '1i\
#include <stdio.h>
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Broken_Assert_Stdlib fix
#
case "$file" in ./assert.h )
if ( test -n "`egrep 'exit *\\(|abort *\\(' $file`" -a \
-z "`egrep 'include.*stdlib.h' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
broken_assert_stdlib"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '1i\
#ifdef __cplusplus\
#include <stdlib.h>\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Bsd43_Io_Macros fix
#
if ( test -n "`egrep 'BSD43__IO' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
bsd43_io_macros"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/[ ]BSD43__IO[A-Z]*[ ]*(/s/(\(.\),/('\''\1'\'',/' \
-e '/#[ ]*define[ ]*[ ]BSD43__IO/s/'\''\([cgx]\)'\''/\1/g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi
# Cxx_Cmnt_Hpux fix
#
case "$file" in ./sys/pci.h )
if ( test -n "`egrep 'System Private Structures' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
cxx_cmnt_hpux"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's|//.*$||g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Cxx_Cmnt_Irix fix
#
case "$file" in ./fam.h )
if ( test -n "`egrep 'indigo.esd' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
cxx_cmnt_irix"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's|//.*$||g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Cxx_Cmnt_Sunos fix
#
case "$file" in ./sbusdev/audiovar.h | \
./sys/audiovar.h )
fixlist="${fixlist}
cxx_cmnt_sunos"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's|//.*$||g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Cxx_Cmnt_Vxworks fix
#
case "$file" in ./drv/netif/if_med.h )
if ( test -n "`egrep 'Wind River' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
cxx_cmnt_vxworks"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's|//.*$||g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Ecd_Cursor fix
#
case "$file" in ./sunwindow/win_lock.h | \
./sunwindow/win_cursor.h )
fixlist="${fixlist}
ecd_cursor"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/ecd.cursor/ecd_cursor/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Else_Label fix
#
if ( test -n "`egrep '^[ ]*#[ ]*else[ ]+[!-.0-~]' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
else_label"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e ':loop
/\\$/N
s/\\$/\\+++fixinc_eol+++/
/\\$/b loop
s/\\+++fixinc_eol+++/\\/g
s%^\([ ]*#[ ]*else\)[ ]*/[^*].*%\1%
s%^\([ ]*#[ ]*else\)[ ]*[^/ ].*%\1%' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi
# Endif_Label fix
#
if ( test -n "`egrep '^[ ]*#[ ]*endif[ ]+[!-.0-~]' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
endif_label"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e ':loop
/\\$/N
s/\\$/\\+++fixinc_eol+++/
/\\$/b loop
s/\\+++fixinc_eol+++/\\/g
s%^\([ ]*#[ ]*endif\)[ ]*/[^*].*%\1%
s%^\([ ]*#[ ]*endif\)[ ]*\*[^/].*%\1%
s%^\([ ]*#[ ]*endif\)[ ]*[^/* ].*%\1%' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi
# Hp_Inline fix
#
case "$file" in ./sys/spinlock.h )
if ( test -n "`egrep 'include.*\"\\.\\./machine/' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
hp_inline"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's,"../machine/inline.h",<machine/inline.h>,' \
-e 's,"../machine/psl.h",<machine/psl.h>,' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Hp_Sysfile fix
#
case "$file" in ./sys/file.h )
if ( test -n "`egrep 'HPUX_SOURCE' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
hp_sysfile"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/(\.\.\.)/(struct file * ...)/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Hpux_Cxx_Unready fix
#
case "$file" in ./assert.h | \
./sys/mman.h )
if ( test -z "`egrep '\"C\"|__BEGIN_DECLS' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
hpux_cxx_unready"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '1i\
#ifdef __cplusplus\
extern "C" {\
#endif\
' \
-e '$a\
#ifdef __cplusplus\
}\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Hpux_Maxint fix
#
case "$file" in ./sys/param.h )
fixlist="${fixlist}
hpux_maxint"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/^#[ ]*define[ ]*MAXINT[ ]/i\
#ifndef MAXINT
' \
-e '/^#[ ]*define[ ]*MAXINT[ ]/a\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Hpux_Systime fix
#
case "$file" in ./sys/time.h )
if ( test -n "`egrep '^extern struct sigevent;' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
hpux_systime"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/^extern struct sigevent;/struct sigevent;/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Interactv_Add1 fix
#
case "$file" in ./stdio.h | \
./math.h | \
./ctype.h | \
./sys/limits.h | \
./sys/fcntl.h | \
./sys/dirent.h )
if ( test '(' -d /etc/conf/kconfig.d ')' -a \
'(' -n "`grep _POSIX_VERSION /usr/include/sys/unistd.h`" ')'
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
interactv_add1"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/!defined(__STDC__) && !defined(_POSIX_SOURCE)/!defined(_POSIX_SOURCE)/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Interactv_Add2 fix
#
case "$file" in ./math.h )
if ( test '(' -d /etc/conf/kconfig.d ')' -a \
'(' -n "`grep _POSIX_VERSION /usr/include/sys/unistd.h`" ')'
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
interactv_add2"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/fmod(double)/fmod(double, double)/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Interactv_Add3 fix
#
case "$file" in ./sys/limits.h )
if ( test '(' -d /etc/conf/kconfig.d ')' -a \
'(' -n "`grep _POSIX_VERSION /usr/include/sys/unistd.h`" ')'
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
interactv_add3"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/CHILD_MAX/s,/\* Max, Max,' \
-e '/OPEN_MAX/s,/\* Max, Max,' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Io_Def_Quotes fix
#
if ( test -n "`egrep '[ ]_IO[A-Z]*[ ]*\\([A-Za-z]' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
io_def_quotes"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/\([ ]_IO[A-Z]*[ ]*(\)\([A-Za-z]\),/\1'\''\2'\'',/' \
-e '/#[ ]*define[ ]*[ ]_IO/s/'\''\([cgxtf]\)'\''/\1/g' \
-e '/#[ ]*define[ ]*[ ]DESIOC/s/'\''\([cdgx]\)'\''/\1/g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi
# Ioctl_Fix_Ctrl fix
#
if ( test -n "`egrep 'CTRL[ ]' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
ioctl_fix_ctrl"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/[^A-Z0-9_]CTRL[ ]*(/s/\([^'\'']\))/'\''\1'\'')/' \
-e '/[^A-Z0-9]_CTRL[ ]*(/s/\([^'\'']\))/'\''\1'\'')/' \
-e '/#[ ]*define[ ]*[ ]CTRL/s/'\''\([cgx]\)'\''/\1/g' \
-e '/#[ ]*define[ ]*[ ]_CTRL/s/'\''\([cgx]\)'\''/\1/g' \
-e '/#[ ]*define[ ]*[ ]BSD43_CTRL/s/'\''\([cgx]\)'\''/\1/g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi
# Ip_Missing_Semi fix
#
case "$file" in ./netinet/ip.h )
fixlist="${fixlist}
ip_missing_semi"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/^struct/,/^};/s/}$/};/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Irix_Bogus_Cxx_Cmnt fix
#
case "$file" in ./elf_abi.h | \
./elf.h )
fixlist="${fixlist}
irix_bogus_cxx_cmnt"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's@"/\*"\*/@"//"@' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Irix_Multiline_Cmnt fix
#
case "$file" in ./sys/types.h )
fixlist="${fixlist}
irix_multiline_cmnt"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's@type of the result@type of the result */@' \
-e 's@of the sizeof@/* of the sizeof@' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Irix_Sockaddr fix
#
case "$file" in ./rpc/auth.h )
if ( test -n "`egrep 'authdes_create.*struct sockaddr' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
irix_sockaddr"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/authdes_create.*struct sockaddr/i\
struct sockaddr;
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Irix_Struct__File fix
#
case "$file" in ./rpc/xdr.h )
fixlist="${fixlist}
irix_struct__file"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/xdrstdio_create.*struct __file_s/i\
struct __file_s;
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Isc_Fmod fix
#
case "$file" in ./math.h )
if ( test -n "`egrep 'fmod\\(double\\)' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
isc_fmod"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/fmod(double)/fmod(double, double)/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Isc_Sys_Limits fix
#
case "$file" in ./sys/limits.h )
if ( test -n "`egrep 'CHILD_MAX' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
isc_sys_limits"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/CHILD_MAX/s,/\* Max, Max,' \
-e '/OPEN_MAX/s,/\* Max, Max,' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Kandr_Concat fix
#
case "$file" in ./sparc/asm_linkage.h | \
./sun3/asm_linkage.h | \
./sun3x/asm_linkage.h | \
./sun4/asm_linkage.h | \
./sun4c/asm_linkage.h | \
./sun4m/asm_linkage.h | \
./sun4c/debug/asm_linkage.h | \
./sun4m/debug/asm_linkage.h | \
./arm/as_support.h | \
./arm/mc_type.h | \
./arm/xcb.h | \
./dev/chardefmac.h | \
./dev/ps_irq.h | \
./dev/screen.h | \
./dev/scsi.h | \
./sys/tty.h | \
./Xm.acorn/XmP.h | \
./bsd43/bsd43_.h )
if ( test -n "`egrep '/\\*\\*/' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
kandr_concat"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's|/\*\*/| ## |g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Limits_Ifndefs fix
#
case "$file" in ./limits.h )
if ( test -z "`egrep 'ifndef[ ]+FLT_MIN' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
limits_ifndefs"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/[ ]FLT_MIN[ ]/i\
#ifndef FLT_MIN
' \
-e '/[ ]FLT_MIN[ ]/a\
#endif
' \
-e '/[ ]FLT_MAX[ ]/i\
#ifndef FLT_MAX
' \
-e '/[ ]FLT_MAX[ ]/a\
#endif
' \
-e '/[ ]FLT_DIG[ ]/i\
#ifndef FLT_DIG
' \
-e '/[ ]FLT_DIG[ ]/a\
#endif
' \
-e '/[ ]DBL_MIN[ ]/i\
#ifndef DBL_MIN
' \
-e '/[ ]DBL_MIN[ ]/a\
#endif
' \
-e '/[ ]DBL_MAX[ ]/i\
#ifndef DBL_MAX
' \
-e '/[ ]DBL_MAX[ ]/a\
#endif
' \
-e '/[ ]DBL_DIG[ ]/i\
#ifndef DBL_DIG
' \
-e '/[ ]DBL_DIG[ ]/a\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Lynx_Void_Int fix
#
case "$file" in ./curses.h )
if ( test -n "`egrep '#[ ]*define[ ]+void[ ]+int' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
lynx_void_int"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/#[ ]*define[ ][ ]*void[ ]int/d' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Lynxos_Fcntl_Proto fix
#
case "$file" in ./fcntl.h )
fixlist="${fixlist}
lynxos_fcntl_proto"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/\(fcntl.*(int, int, \)int)/\1...)/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# M88k_Bad_Hypot_Opt fix
#
case "$file" in ./math.h )
fixlist="${fixlist}
m88k_bad_hypot_opt"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/extern double floor(), ceil(), fmod(), fabs();/extern double floor(), ceil(), fmod(), fabs _PARAMS((double));/' \
-e '/^extern double hypot();$/a\
\/* Workaround a stupid Motorola optimization if one\
of x or y is 0.0 and the other is negative! *\/\
#ifdef __STDC__\
static __inline__ double fake_hypot (double x, double y)\
#else\
static __inline__ double fake_hypot (x, y)\
double x, y;\
#endif\
{\
return fabs (hypot (x, y));\
}\
#define hypot fake_hypot
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# M88k_Bad_S_If fix
#
case "$file" in ./sys/stat.h )
if ( test -n "`egrep '#define[ ]+S_IS[A-Z]*(m)[ ]' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
m88k_bad_s_if"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/^\(#define[ ]*S_IS[A-Z]*(m)\)[ ]*(m[ ]*&[ ]*\(S_IF[A-Z][A-Z][A-Z][A-Z]*\)[ ]*)/\1 (((m)\&S_IFMT)==\2)/' \
-e 's/^\(#define[ ]*S_IS[A-Z]*(m)\)[ ]*(m[ ]*&[ ]*\(0[0-9]*\)[ ]*)/\1 (((m)\&S_IFMT)==\2)/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# M88k_Multi_Incl fix
#
case "$file" in ./time.h )
if ( test -z "`egrep '#ifndef' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
m88k_multi_incl"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
( echo Fixing $file, to protect against multiple inclusion. >&2
cpp_wrapper=`echo $file | sed -e 's,\.,_,g' -e 's,/,_,g'`
sed -e "1i\
#ifndef __GCC_GOT_${cpp_wrapper}_\
#define __GCC_GOT_${cpp_wrapper}_\
" \
-e "$a\
#endif /* ! __GCC_GOT_${cpp_wrapper}_ */
" ) <&4 > ${DESTDIR}/$file.
exec 4<&-
# Shell scripts have the potential of removing the output
#
if test ! -f ${DESTDIR}/$file.
then continue ; fi
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Machine_Name fix
#
if ( test -n "`egrep '^#[ ]*(if|elif).*[^a-zA-Z0-9_](_*[MSRrhim]|[Mbimnpstuv])[a-zA-Z0-9_]' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
machine_name"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e ':loop
/\\$/N
s/\\$/\\+++fixinc_eol+++/
/\\$/b loop
s/\\+++fixinc_eol+++/\\/g
/#[ ]*[el]*if/ {
s/[a-zA-Z0-9_][a-zA-Z0-9_]*/ & /g
s/ M32 / __M32__ /g
s/ _*MIPSE\([LB]\) / __MIPSE\1__ /g
s/ _*SYSTYPE_\([A-Z0-9]*\) / __SYSTYPE_\1__ /g
s/ _*\([Rr][34]\)000 / __\1000__ /g
s/ _*host_mips / __host_mips__ /g
s/ _*i386 / __i386__ /g
s/ _*mips / __mips__ /g
s/ bsd4\([0-9]\) / __bsd4\1__ /g
s/ is68k / __is68k__ /g
s/ m68k / __m68k__ /g
s/ m88k / __m88k__ /g
s/ mc680\([0-9]\)0 / __mc680\10__ /g
s/ news\([0-9]*\) / __news\1__ /g
s/ ns32000 / __ns32000__ /g
s/ pdp11 / __pdp11__ /g
s/ pyr / __pyr__ /g
s/ sel / __sel__ /g
s/ sony_news / __sony_news__ /g
s/ sparc / __sparc__ /g
s/ sun\([a-z0-9]*\) / __sun\1__ /g
s/ tahoe / __tahoe__ /g
s/ tower\([_0-9]*\) / __tower\1__ /g
s/ u370 / __u370__ /g
s/ u3b\([0-9]*\) / __u3b\1__ /g
s/ unix / __unix__ /g
s/ vax / __vax__ /g
s/ \([a-zA-Z0-9_][a-zA-Z0-9_]*\) /\1/g
}' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi
# Math_Exception fix
#
case "$file" in ./math.h )
if ( test -n "`egrep 'struct exception' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
math_exception"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/struct exception/i\
#ifdef __cplusplus\
#define exception __math_exception\
#endif
' \
-e '/struct exception/a\
#ifdef __cplusplus\
#undef exception\
#endif
' \
-e '/matherr/i\
#ifdef __cplusplus\
#define exception __math_exception\
#endif
' \
-e '/matherr/a\
#ifdef __cplusplus\
#undef exception\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Math_Gcc_Ifndefs fix
#
case "$file" in ./math.h )
fixlist="${fixlist}
math_gcc_ifndefs"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
( dbl_max_def="`egrep 'define[ ]+DBL_MAX[ ]+.*' ${SRCDIR}/float.h 2>/dev/null`"
if ( test -n "${dbl_max_def}" \
-a -n "`egrep '#define[ ]*HUGE_VAL[ ]+DBL_MAX' $file`" \
-a -z "`egrep '#define[ ]+DBL_MAX[ ]+' $file`"
) > /dev/null 2>&1
then sed -e '/define[ ]HUGE_VAL[ ]/i\
#ifndef HUGE_VAL
' \
-e '/define[ ]HUGE_VAL[ ]/a\
#endif
'\
-e "/define[ ]HUGE_VAL[ ]DBL_MAX/s/DBL_MAX/$dbl_max_def/"
else sed -e '/define[ ]HUGE_VAL[ ]/i\
#ifndef HUGE_VAL
' \
-e '/define[ ]HUGE_VAL[ ]/a\
#endif
'
fi ) <&4 > ${DESTDIR}/$file.
exec 4<&-
# Shell scripts have the potential of removing the output
#
if test ! -f ${DESTDIR}/$file.
then continue ; fi
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Motorola_Stupid_Opt fix
#
case "$file" in ./math.h )
if ( test -n "`egrep '^extern double hypot();$' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
motorola_stupid_opt"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/^extern double hypot();$/a\
\/* Workaround a stupid Motorola optimization if one\
of x or y is 0.0 and the other is negative! *\/\
#ifdef __STDC__\
static __inline__ double fake_hypot (double x, double y)\
#else\
static __inline__ double fake_hypot (x, y)\
double x, y;\
#endif\
{\
return fabs (hypot (x, y));\
}\
#define hypot fake_hypot
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Nested_Comment fix
#
case "$file" in ./rpc/rpc.h )
fixlist="${fixlist}
nested_comment"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's@^\(/\*.*rpc/auth_des.h>.*\)/\*@\1*/ /*@' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# News_Os_Recursion fix
#
case "$file" in ./stdlib.h )
if ( test -n "`egrep '#include <stdlib.h>' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
news_os_recursion"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/^#include <stdlib.h>/i\
#ifdef BOGUS_RECURSION
' \
-e '/^#include <stdlib.h>/a\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Next_Math_Prefix fix
#
case "$file" in ./ansi/math.h )
if ( test -n "`egrep '^extern.*double.*__const__.*' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
next_math_prefix"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/^extern.*double.*__const__.*sqrt(/s/__const__//' \
-e '/^extern.*double.*__const__.*fabs(/s/__const__//' \
-e '/^extern.*double.*__const__.*cos(/s/__const__//' \
-e '/^extern.*double.*__const__.*hypot(/s/__const__//' \
-e '/^extern.*double.*__const__.*sin(/s/__const__//' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Next_Template fix
#
case "$file" in ./bsd/libc.h )
if ( test -n "`egrep 'template' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
next_template"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/\(.*template\)/s/template//' \
-e '/extern.*volatile.*void.*abort/s/volatile//' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Next_Volitile fix
#
case "$file" in ./ansi/stdlib.h )
if ( test -n "`egrep 'volatile' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
next_volitile"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/extern.*volatile.*void.*exit/s/volatile//' \
-e '/extern.*volatile.*void.*abort/s/volatile//' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Next_Wait_Union fix
#
case "$file" in ./sys/wait.h )
if ( test -n "`egrep 'wait\\(union wait' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
next_wait_union"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's@wait(union wait@wait(void@' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# No_Double_Slash fix
#
if ( test -n "`egrep '//[^*]' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
no_double_slash"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/\/\/[^*]/s|//\(.*\)$|/* \1 */|' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi
# Nodeent_Syntax fix
#
case "$file" in ./netdnet/dnetdb.h )
fixlist="${fixlist}
nodeent_syntax"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/char.*na_addr *$/char *na_addr;/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Osf_Namespace_A fix
#
case "$file" in ./reg_types.h | \
./sys/lc_core.h )
if ( test '(' -r reg_types.h-a -r sys/lc_core.h-a -n "`grep '} regex_t;' reg_types.h`"-a -z "`grep __regex_t regex.h`" ')'
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
osf_namespace_a"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/regex_t/__regex_t/g' \
-e 's/regoff_t/__regoff_t/g' \
-e 's/regmatch_t/__regmatch_t/g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Osf_Namespace_B fix
#
case "$file" in ./regex.h )
if ( test '(' -r reg_types.h-a -r sys/lc_core.h-a -n "`grep '} regex_t;' reg_types.h`"-a -z "`grep __regex_t regex.h`" ')'
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
osf_namespace_b"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/#include <reg_types.h>/a\
typedef __regex_t regex_t;\
typedef __regoff_t regoff_t;\
typedef __regmatch_t regmatch_t;
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Pthread_Page_Size fix
#
case "$file" in ./pthread.h )
if ( test -n "`egrep '^int __page_size' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
pthread_page_size"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/^int __page_size/extern int __page_size/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Rs6000_Double fix
#
case "$file" in ./math.h )
if ( test -n "`egrep '[^a-zA-Z_]class\\(' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
rs6000_double"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/class[(]/i\
#ifndef __cplusplus
' \
-e '/class[(]/a\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Rs6000_Fchmod fix
#
case "$file" in ./sys/stat.h )
if ( test -n "`egrep 'fchmod\\(char' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
rs6000_fchmod"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/fchmod(char \*/fchmod(int/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Rs6000_Param fix
#
case "$file" in ./stdio.h | \
./unistd.h )
fixlist="${fixlist}
rs6000_param"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's@rename(const char \*old, const char \*new)@rename(const char *_old, const char *_new)@' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Sony_Include fix
#
case "$file" in ./machine/machparam.h )
if ( test -n "`egrep '\"\\.\\./machine/endian.h\"' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
sony_include"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's@"../machine/endian.h"@<machine/endian.h>@' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Statsswtch fix
#
case "$file" in ./rpcsvc/rstat.h )
if ( test -n "`egrep 'boottime$' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
statsswtch"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/boottime$/boottime;/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Stdio_Va_List fix
#
case "$file" in ./stdio.h )
fixlist="${fixlist}
stdio_va_list"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
( if ( egrep "__need___va_list" $file ) > /dev/null 2>&1 ; then
:
else
echo "#define __need___va_list"
echo "#include <stdarg.h>"
fi
sed -e 's@ va_list @ __gnuc_va_list @' \
-e 's@ va_list)@ __gnuc_va_list)@' \
-e 's@ _BSD_VA_LIST_));@ __gnuc_va_list));@' \
-e 's@ _VA_LIST_));@ __gnuc_va_list));@' \
-e 's@ va_list@ __va_list__@' \
-e 's@\*va_list@*__va_list__@' \
-e 's@ __va_list)@ __gnuc_va_list)@' \
-e 's@GNUC_VA_LIST@GNUC_Va_LIST@' \
-e 's@_NEED___VA_LIST@_NEED___Va_LIST@' \
-e 's@VA_LIST@DUMMY_VA_LIST@' \
-e 's@_Va_LIST@_VA_LIST@' ) <&4 > ${DESTDIR}/$file.
exec 4<&-
# Shell scripts have the potential of removing the output
#
if test ! -f ${DESTDIR}/$file.
then continue ; fi
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Sun_Bogus_Ifdef fix
#
case "$file" in ./hsfs/hsfs_spec.h | \
./hsfs/iso_spec.h )
if ( test -n "`egrep '#ifdef __i386__ || __vax__' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
sun_bogus_ifdef"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/\#ifdef __i386__ || __vax__/\#if __i386__ || __vax__/g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Sun_Bogus_Ifdef_Sun4c fix
#
case "$file" in ./hsfs/hsnode.h )
if ( test -n "`egrep '#ifdef __i386__ || __sun4c__' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
sun_bogus_ifdef_sun4c"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/\#ifdef __i386__ || __sun4c__/\#if __i386__ || __sun4c__/g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Sun_Catmacro fix
#
case "$file" in ./pixrect/memvar.h )
if ( test -n "`egrep '^#define[ ]+CAT(a,b)' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
sun_catmacro"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/^#define[ ]CAT(a,b)/ i\
#ifdef __STDC__ \
#define CAT(a,b) a##b\
#else
' \
-e '/^#define[ ]CAT(a,b)/ a\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Sun_Malloc fix
#
case "$file" in ./malloc.h )
fixlist="${fixlist}
sun_malloc"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/typedef[ ]char \* malloc_t/typedef void \* malloc_t/g' \
-e 's/int[ ][ ]*free/void free/g' \
-e 's/char\([ ]*\*[ ]*malloc\)/void\1/g' \
-e 's/char\([ ]*\*[ ]*realloc\)/void\1/g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Sun_Memcpy fix
#
case "$file" in ./memory.h )
if ( test -n "`egrep '/\\* @\\(#\\)(head/memory.h 50.1 |memory\\.h 1\\.[2-4] 8./../.. SMI; from S5R2 1\\.2 )\\*/' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
sun_memcpy"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '1i\
/* This file was generated by fixincludes */\
#ifndef __memory_h__\
#define __memory_h__\
\
#ifdef __STDC__\
extern void *memccpy();\
extern void *memchr();\
extern void *memcpy();\
extern void *memset();\
#else\
extern char *memccpy();\
extern char *memchr();\
extern char *memcpy();\
extern char *memset();\
#endif /* __STDC__ */\
\
extern int memcmp();\
\
#endif /* __memory_h__ */
' \
-e '1,$d' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Sun_Rusers_Semi fix
#
case "$file" in ./rpcsvc/rusers.h )
if ( test -n "`egrep '_cnt$' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
sun_rusers_semi"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/^struct/,/^};/s/_cnt$/_cnt;/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Sun_Signal fix
#
case "$file" in ./sys/signal.h | \
./signal.h )
if ( test -n "`egrep '^void \\(\\*signal\\(\\)\\)\\(\\);' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
sun_signal"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/^void (\*signal())();$/i\
#ifdef __cplusplus\
void (*signal(...))(...);\
#else
' \
-e '/^void (\*signal())();$/a\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Sun_Xdr_Proto fix
#
case "$file" in ./rpc/xdr.h )
fixlist="${fixlist}
sun_xdr_proto"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/^\(.*\)\*\(x_.*\)();\(.*\)/\
#ifdef __cplusplus\
\1*\2(...);\3\
#else\
\1*\2();\3\
#endif/g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Sunos_Large_Macro fix
#
case "$file" in ./sundev/ipi_error.h )
fixlist="${fixlist}
sunos_large_macro"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
( echo "Removing incorrect fix to SunOS <sundev/ipi_error.h>" >&2
rm -f ${DESTDIR}/$file ${DESTDIR}/$file.
cat > /dev/null ) <&4 > ${DESTDIR}/$file.
exec 4<&-
# Shell scripts have the potential of removing the output
#
if test ! -f ${DESTDIR}/$file.
then continue ; fi
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Sunos_Matherr_Decl fix
#
case "$file" in ./math.h )
if ( test '(' "`fgrep 'struct exception' $file | line`" != 'struct exception {' ')'
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
sunos_matherr_decl"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/matherr/i\
struct exception;
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Sunos_Strlen fix
#
case "$file" in ./strings.h )
fixlist="${fixlist}
sunos_strlen"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/int[ ]*strlen();/__SIZE_TYPE__ strlen();/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Systypes fix
#
case "$file" in ./sys/types.h | \
./stdlib.h | \
./sys/stdtypes.h | \
./stddef.h | \
./memory.h | \
./unistd.h )
if ( test -n "`egrep 'typedef[ ]+[a-z_][ a-z_]*[ ](size|ptrdiff|wchar)_t' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
systypes"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/^[ ]**[ ]*typedef unsigned int size_t;/N' \
-e 's/^\([ ]*\*[ ]*typedef unsigned int size_t;\n[ ]*\*\/\)/\1\
#ifndef __SIZE_TYPE__\
#define __SIZE_TYPE__ long unsigned int\
#endif\
typedef __SIZE_TYPE__ size_t;\
/' \
-e '/typedef[ ][ ]*[a-z_][ a-z_]*[ ]size_t/i\
#ifndef __SIZE_TYPE__\
#define __SIZE_TYPE__ long unsigned int\
#endif
' \
-e 's/typedef[ ][ ]*[a-z_][ a-z_]*[ ]size_t/typedef __SIZE_TYPE__ size_t/' \
-e '/typedef[ ][ ]*[a-z_][ a-z_]*[ ]ptrdiff_t/i\
#ifndef __PTRDIFF_TYPE__\
#define __PTRDIFF_TYPE__ long int\
#endif
' \
-e 's/typedef[ ][ ]*[a-z_][ a-z_]*[ ]ptrdiff_t/typedef __PTRDIFF_TYPE__ ptrdiff_t/' \
-e '/typedef[ ][ ]*[a-z_][ a-z_]*[ ]wchar_t/i\
#ifndef __WCHAR_TYPE__\
#define __WCHAR_TYPE__ int\
#endif\
#ifndef __cplusplus
' \
-e '/typedef[ ][ ]*[a-z_][ a-z_]*[ ]wchar_t/a\
#endif
' \
-e 's/typedef[ ][ ]*[a-z_][ a-z_]*[ ]wchar_t/typedef __WCHAR_TYPE__ wchar_t/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Systypes_For_Aix fix
#
case "$file" in ./sys/types.h )
if ( test -n "`egrep 'typedef[ ][ ]*[A-Za-z_][ A-Za-z_]*[ ]size_t' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
systypes_for_aix"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/typedef[ ][ ]*[A-Za-z_][ A-Za-z_]*[ ]size_t/i\
#ifndef _GCC_SIZE_T\
#define _GCC_SIZE_T
' \
-e '/typedef[ ][ ]*[A-Za-z_][ A-Za-z_]*[ ]size_t/a\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Sysv68_String fix
#
case "$file" in ./string.h )
fixlist="${fixlist}
sysv68_string"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/extern[ ]*int[ ]*strlen();/extern unsigned int strlen();/' \
-e 's/extern[ ]*int[ ]*ffs[ ]*(long);/extern int ffs(int);/' \
-e 's/strdup(char \*s1);/strdup(const char *s1);/' \
-e '/^extern char$/N' \
-e 's/^extern char\(\n \*memccpy(),\)$/extern void\1/' \
-e '/^ strncmp(),$/N' \
-e 's/^\( strncmp()\),\n\( strlen(),\)$/\1;\
extern unsigned int\
\2/' \
-e '/^extern int$/N' \
-e 's/^extern int\(\n strlen(),\)/extern size_t\1/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Sysz_Stdlib_For_Sun fix
#
case "$file" in ./stdlib.h )
fixlist="${fixlist}
sysz_stdlib_for_sun"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/int abort/void abort/g' \
-e 's/int free/void free/g' \
-e 's/char[ ]*\*[ ]*calloc/void \* calloc/g' \
-e 's/char[ ]*\*[ ]*malloc/void \* malloc/g' \
-e 's/char[ ]*\*[ ]*realloc/void \* realloc/g' \
-e 's/int[ ][ ]*exit/void exit/g' \
-e '/typedef[ a-zA-Z_]*[ ]size_t[ ]*;/i\
#ifndef _GCC_SIZE_T\
#define _GCC_SIZE_T
' \
-e '/typedef[ a-zA-Z_]*[ ]size_t[ ]*;/a\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Sysz_Stdtypes_For_Sun fix
#
case "$file" in ./sys/stdtypes.h )
fixlist="${fixlist}
sysz_stdtypes_for_sun"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/[ ]size_t.*;/i\
#ifndef _GCC_SIZE_T\
#define _GCC_SIZE_T
' \
-e '/[ ]size_t.*;/a\
#endif
' \
-e '/[ ]ptrdiff_t.*;/i\
#ifndef _GCC_PTRDIFF_T\
#define _GCC_PTRDIFF_T
' \
-e '/[ ]ptrdiff_t.*;/a\
#endif
' \
-e '/[ ]wchar_t.*;/i\
#ifndef _GCC_WCHAR_T\
#define _GCC_WCHAR_T
' \
-e '/[ ]wchar_t.*;/a\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Tinfo_Cplusplus fix
#
case "$file" in ./tinfo.h )
fixlist="${fixlist}
tinfo_cplusplus"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/[ ]_cplusplus/ __cplusplus/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Ultrix_Ansi_Compat fix
#
case "$file" in ./ansi_compat.h )
if ( test -n "`egrep 'ULTRIX' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
ultrix_ansi_compat"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '1i\
/* This file intentionally left blank. */
' \
-e '1,$d' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Ultrix_Atof_Param fix
#
case "$file" in ./math.h )
fixlist="${fixlist}
ultrix_atof_param"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's@atof(\([ ]*char[ ]*\*[^)]*\))@atof(const \1)@' \
-e 's@inline int abs(int [a-z][a-z]*) {.*}@extern "C" int abs(int);@' \
-e 's@inline double abs(double [a-z][a-z]*) {.*}@@' \
-e 's@inline int sqr(int [a-z][a-z]*) {.*}@@' \
-e 's@inline double sqr(double [a-z][a-z]*) {.*}@@' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Ultrix_Const fix
#
case "$file" in ./stdio.h )
fixlist="${fixlist}
ultrix_const"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's@perror( char \*__s );@perror( const char *__s );@' \
-e 's@fputs( char \*__s,@fputs( const char *__s,@' \
-e 's@fopen( char \*__filename, char \*__type );@fopen( const char *__filename, const char *__type );@' \
-e 's@fwrite( void \*__ptr,@fwrite( const void *__ptr,@' \
-e 's@fscanf( FILE \*__stream, char \*__format,@fscanf( FILE *__stream, const char *__format,@' \
-e 's@scanf( char \*__format,@scanf( const char *__format,@' \
-e 's@sscanf( char \*__s, char \*__format,@sscanf( const char *__s, const char *__format,@' \
-e 's@popen(char \*, char \*);@popen(const char *, const char *);@' \
-e 's@tempnam(char\*,char\*);@tempnam(const char*,const char*);@' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Ultrix_Ifdef fix
#
case "$file" in ./sys/file.h )
if ( test -n "`egrep '#ifdef KERNEL' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
ultrix_ifdef"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/#ifdef KERNEL/#if defined(KERNEL)/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Ultrix_Nested_Cmnt fix
#
case "$file" in ./rpc/svc.h )
fixlist="${fixlist}
ultrix_nested_cmnt"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's@^\( \* int protocol; \)/\*@\1*/ /*@' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# Ultrix_Static fix
#
case "$file" in ./machine/cpu.h )
if ( test -n "`egrep '#include \"r[34]_cpu' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
ultrix_static"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/^static struct tlb_pid_state/struct tlb_pid_state/' \
-e 's/^#include "r3_cpu\.h"$/#include <machine\/r3_cpu\.h>/' \
-e 's/^#include "r4_cpu\.h"$/#include <machine\/r4_cpu\.h>/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Undefine_Null fix
#
if ( test -n "`egrep '^#[ ]*define[ ]*[ ]NULL[ ]' $file`" -a \
-z "`egrep '#[ ]*(ifn|un)def[ ]*[ ]NULL($|[ ])' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
undefine_null"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/^#[ ]*define[ ][ ]*NULL[ ]/i\
#undef NULL
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi
# Va_I960_Macro fix
#
case "$file" in ./arch/i960/archI960.h )
if ( test -n "`egrep '__(vsiz|vali|vpad|alignof__)' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
va_i960_macro"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/__vsiz/__vxvsiz/' \
-e 's/__vali/__vxvali/' \
-e 's/__vpad/__vxvpad/' \
-e 's/__alignof__/__vxalignof__/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Void_Null fix
#
case "$file" in ./curses.h | \
./dbm.h | \
./locale.h | \
./stdio.h | \
./stdlib.h | \
./string.h | \
./time.h | \
./unistd.h | \
./sys/dir.h | \
./sys/param.h | \
./sys/types.h )
if ( test -n "`egrep '#[ ]*define[ ][ ]*NULL[ ].*void' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
void_null"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/^#[ ]*define[ ]*NULL[ ]*((void[ ]*\*)0)/#define NULL 0/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Vxworks_Gcc_Problem fix
#
case "$file" in ./types/vxTypesBase.h )
if ( test -n "`egrep '__GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
vxworks_gcc_problem"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/#ifdef __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__/#if 1/' \
-e '/[ ]size_t/i\
#ifndef _GCC_SIZE_T\
#define _GCC_SIZE_T
' \
-e '/[ ]size_t/a\
#endif
' \
-e '/[ ]ptrdiff_t/i\
#ifndef _GCC_PTRDIFF_T\
#define _GCC_PTRDIFF_T
' \
-e '/[ ]ptrdiff_t/a\
#endif
' \
-e '/[ ]wchar_t/i\
#ifndef _GCC_WCHAR_T\
#define _GCC_WCHAR_T
' \
-e '/[ ]wchar_t/a\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Vxworks_Needs_Vxtypes fix
#
case "$file" in ./time.h )
if ( test -n "`egrep 'uint_t[ ][ ]*_clocks_per_sec' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
vxworks_needs_vxtypes"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/uint_t/unsigned int/' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Vxworks_Needs_Vxworks fix
#
case "$file" in ./sys/stat.h )
if ( test -n "`egrep '#[ ]define[ ][ ]*__INCstath' $file`" -a \
'(' -r types/vxTypesOld.h ')' -a \
'(' -n "`fgrep '#include' $file`" ')' -a \
'(' -n "`fgrep ULONG $file`" ')'
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
vxworks_needs_vxworks"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/#[ ]define[ ][ ]*__INCstath/a\
#include <types/vxTypesOld.h>
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# Vxworks_Time fix
#
case "$file" in ./time.h )
if ( test -n "`egrep 'VOIDFUNCPTR' $file`" -a \
'(' -r vxWorks.h ')'
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
vxworks_time"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/VOIDFUNCPTR/i\
#ifndef __gcc_VOIDFUNCPTR_defined\
#ifdef __cplusplus\
typedef void (*__gcc_VOIDFUNCPTR) (...);\
#else\
typedef void (*__gcc_VOIDFUNCPTR) ();\
#endif\
#define __gcc_VOIDFUNCPTR_defined\
#endif
' \
-e 's/VOIDFUNCPTR/__gcc_VOIDFUNCPTR/g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# X11_Class fix
#
case "$file" in ./X11/ShellP.h )
if ( test -z "`egrep '__cplusplus' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
x11_class"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/char [*]class;/i\
#ifdef __cplusplus\
char *c_class;\
#else
' \
-e '/char [*]class;/a\
#endif
' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# X11_Class_Usage fix
#
case "$file" in ./Xm/BaseClassI.h )
if ( test -z "`egrep '__cplusplus' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
x11_class_usage"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's/ class[)]/ c_class)/g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# X11_New fix
#
case "$file" in ./Xm/Traversal.h )
if ( test -z "`egrep '__cplusplus' $file`"
) > /dev/null 2>&1 ; then
fixlist="${fixlist}
x11_new"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e '/Widget old, new;/i\
#ifdef __cplusplus\
Widget old, c_new;\
#else
' \
-e '/Widget old, new;/a\
#endif
' \
-e 's/Widget new,/Widget c_new,/g' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file
fi ;;
esac
# X11_Sprintf fix
#
case "$file" in ./X11*/Xmu.h )
fixlist="${fixlist}
x11_sprintf"
if [ ! -r ${DESTDIR}/$file ]
then exec 4< $file
else exec 4< ${DESTDIR}/$file ; fi
if test $? -ne 0
then continue ; fi
sed -e 's,^extern char \* sprintf();$,#ifndef __STDC__\
extern char * sprintf();\
#endif /* !defined __STDC__ */,' <&4 > ${DESTDIR}/$file.
exec 4<&-
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file ;;
esac
# IF the output has been removed OR it is unchanged,
# THEN ensure the output is gone
# ELSE look for local directory include syntax
#
if ( test ! -f ${DESTDIR}/$file || \
cmp $file ${DESTDIR}/$file ) > /dev/null 2>&1
then
rm -f ${DESTDIR}/$file
else
echo "Fixed $file:${fixlist}"
# Find any include directives that use "file".
#
for include in `
egrep '^[ ]*#[ ]*include[ ]*"[^/]' ${DESTDIR}/$file |
sed -e 's/^[ ]*#[ ]*include[ ]*"\([^"]*\)".*$/\1/'`
do
dir=`echo $file | sed -e s'|/[^/]*$||'`
required="$required ${SRCDIR} $dir/$include ${DESTDIR}/$dir/$include"
done
fi
done # for file in $files
done
## Make sure that any include files referenced using double quotes
## exist in the fixed directory. This comes last since otherwise
## we might end up deleting some of these files "because they don't
## need any change."
set x `echo $required`
shift
while [ $# != 0 ]; do
newreq=
while [ $# != 0 ]; do
# $1 is the directory to copy from,
# $2 is the unfixed file,
# $3 is the fixed file name.
#
cd ${INPUT}
cd $1
if [ -r $2 ] && [ ! -r $3 ]; then
cp $2 $3 >/dev/null 2>&1 || echo "Can't copy $2" >&2
chmod +w $3 2>/dev/null
chmod a+r $3 2>/dev/null
echo Copied $2
for include in `egrep '^[ ]*#[ ]*include[ ]*"[^/]' $3 |
sed -e 's/^[ ]*#[ ]*include[ ]*"\([^"]*\)".*$/\1/'`
do
dir=`echo $2 | sed -e s'|/[^/]*$||'`
dir2=`echo $3 | sed -e s'|/[^/]*$||'`
newreq="$newreq $1 $dir/$include $dir2/$include"
done
fi
shift; shift; shift
done
set x $newreq
shift
done
echo 'Cleaning up DONE files.'
cd $LIB
find . -name DONE -exec rm -f '{}' ';'
echo 'Removing unneeded directories:'
cd $LIB
files=`find . -type d -print | sort -r`
for file in $files; do
rmdir $LIB/$file > /dev/null 2>&1
done
[= autogen template -*- Mode: shell-script -*-
sh
#
# $Id: inclhack.tpl,v 1.1 1998/03/20 16:19:41 korbb Exp $
#
=]
#!/bin/sh -p
#
[= _EVAL "## " _DNE =]
#
# Install modified versions of certain ANSI-incompatible system header
# files which are fixed to work correctly with ANSI C and placed in a
# directory that GNU C will search.
#
# This script contains [=_eval fix _count =] fixup scripts.
#
# See README-fixinc for more information.
#
[=_eval fixincludes "## " _gpl=]
#
# # # # # # # # # # # # # # # # # # # # #
#
# Directory containing the original header files.
# (This was named INCLUDES, but that conflicts with a name in Makefile.in.)
#
INPUT=${2-${INPUT-/usr/include}}
( \cd ${INPUT} > /dev/null 2>&1 ) || {
echo 'fixincludes: input dir `'$INPUT"' is an invalid directory"
exit 1
}
# # # # # # # # # # # # # # # # # # # # #
#
# Directory in which to store the results.
# Fail if no arg to specify a directory for the output.
if [ "x$1" = "x" ]
then echo fixincludes: no output directory specified
exit 1
fi
LIB=${1}
# Make sure it exists.
if [ ! -d $LIB ]; then
mkdir $LIB || {
echo fixincludes: output dir '`'$LIB"' cannot be created"
exit 1
}
else
( \cd $LIB && touch DONE && rm DONE ) || {
echo fixincludes: output dir '`'$LIB"' is an invalid directory"
exit 1
}
fi
# Define what target system we're fixing.
#
if test -r ./Makefile; then
target_canonical="`sed -n -e 's,^target[ ]*=[ ]*\(.*\)$,\1,p' < Makefile`"
fi
# If not from the Makefile, then try config.guess
#
if test -z "${target_canonical}" ; then
if test -x ./config.guess ; then
target_canonical="`config.guess`" ; fi
test -z "${target_canonical}" && target_canonical=unknown
fi
export target_canonical
# # # # # # # # # # # # # # # # # # # # #
#
# Define PWDCMD as a command to use to get the working dir
# in the form that we want.
PWDCMD=pwd
case "`$PWDCMD`" in
//*)
# On an Apollo, discard everything before `/usr'.
PWDCMD="eval pwd | sed -e 's,.*/usr/,/usr/,'"
;;
esac
# Original directory.
ORIGDIR=`${PWDCMD}`[=
_IF PROGRAM _env =]
FIXINCL=${ORIGDIR}/fixincl
export FIXINCL[=
_ENDIF=]
# Make LIB absolute only if needed to avoid problems with the amd.
case $LIB in
/*)
;;
*)
cd $LIB; LIB=`${PWDCMD}`
;;
esac
echo Fixing headers into ${LIB} for ${target_canonical} target
# Determine whether this system has symbolic links.
if ln -s X $LIB/ShouldNotExist 2>/dev/null; then
rm -f $LIB/ShouldNotExist
LINKS=true
elif ln -s X /tmp/ShouldNotExist 2>/dev/null; then
rm -f /tmp/ShouldNotExist
LINKS=true
else
LINKS=false
fi
# # # # # # # # # # # # # # # # # # # # #
#
echo Finding directories and links to directories
cd ${INPUT}
# Find all directories and all symlinks that point to directories.
# Put the list in $files.
# Each time we find a symlink, add it to newdirs
# so that we do another find within the dir the link points to.
# Note that $files may have duplicates in it;
# later parts of this file are supposed to ignore them.
dirs="."
levels=2
while [ -n "$dirs" ] && [ $levels -gt 0 ]
do
levels=`expr $levels - 1`
newdirs=
for d in $dirs
do
echo " Searching $INPUT/$d"
# Find all directories under $d, relative to $d, excluding $d itself.
# (The /. is needed after $d in case $d is a symlink.)
files="$files `find $d/. -type d -print | \
sed -e '/\/\.$/d' -e 's@/./@/@g'`"
# Find all links to directories.
# Using `-exec test -d' in find fails on some systems,
# and trying to run test via sh fails on others,
# so this is the simplest alternative left.
# First find all the links, then test each one.
theselinks=
$LINKS && \
theselinks=`find $d/. -type l -print | sed -e 's@/./@/@g'`
for d1 in $theselinks --dummy--
do
# If the link points to a directory,
# add that dir to $newdirs
if [ -d $d1 ]
then
files="$files $d1"
if [ "`ls -ld $d1 | sed -n 's/.*-> //p'`" != "." ]
then
newdirs="$newdirs $d1"
fi
fi
done
done
dirs="$newdirs"
done
# # # # # # # # # # # # # # # # # # # # #
#
dirs=
echo "All directories (including links to directories):"
echo $files
for file in $files; do
rm -rf $LIB/$file
if [ ! -d $LIB/$file ]
then mkdir $LIB/$file
fi
done
mkdir $LIB/root
# # # # # # # # # # # # # # # # # # # # #
#
# treetops gets an alternating list
# of old directories to copy
# and the new directories to copy to.
treetops="${INPUT} ${LIB}"
if $LINKS; then
echo 'Making symbolic directory links'
for file in $files; do
dest=`ls -ld $file | sed -n 's/.*-> //p'`
if [ "$dest" ]; then
cwd=`${PWDCMD}`
# In case $dest is relative, get to $file's dir first.
cd ${INPUT}
cd `echo ./$file | sed -n 's&[^/]*$&&p'`
# Check that the target directory exists.
# Redirections changed to avoid bug in sh on Ultrix.
(cd $dest) > /dev/null 2>&1
if [ $? = 0 ]; then
cd $dest
# X gets the dir that the link actually leads to.
x=`${PWDCMD}`
# Canonicalize ${INPUT} now to minimize the time an
# automounter has to change the result of ${PWDCMD}.
cinput=`cd ${INPUT}; ${PWDCMD}`
# If a link points to ., make a similar link to .
if [ $x = ${cinput} ]; then
echo $file '->' . ': Making link'
rm -fr ${LIB}/$file > /dev/null 2>&1
ln -s . ${LIB}/$file > /dev/null 2>&1
# If link leads back into ${INPUT},
# make a similar link here.
elif expr $x : "${cinput}/.*" > /dev/null; then
# Y gets the actual target dir name, relative to ${INPUT}.
y=`echo $x | sed -n "s&${cinput}/&&p"`
# DOTS is the relative path from ${LIB}/$file's dir back to ${LIB}.
dots=`echo "$file" |
sed -e 's@^./@@' -e 's@/./@/@g' -e 's@[^/][^/]*@..@g' -e 's@..$@@'`
echo $file '->' $dots$y ': Making link'
rm -fr ${LIB}/$file > /dev/null 2>&1
ln -s $dots$y ${LIB}/$file > /dev/null 2>&1
else
# If the link is to a dir $target outside ${INPUT},
# repoint the link at ${INPUT}/root$target
# and process $target into ${INPUT}/root$target
# treat this directory as if it actually contained the files.
echo $file '->' root$x ': Making link'
if [ -d $LIB/root$x ]
then true
else
dirname=root$x/
dirmade=.
cd $LIB
while [ x$dirname != x ]; do
component=`echo $dirname | sed -e 's|/.*$||'`
mkdir $component >/dev/null 2>&1
cd $component
dirmade=$dirmade/$component
dirname=`echo $dirname | sed -e 's|[^/]*/||'`
done
fi
# Duplicate directory structure created in ${LIB}/$file in new
# root area.
for file2 in $files; do
case $file2 in
$file/*)
dupdir=${LIB}/root$x/`echo $file2 | sed -n "s|^${file}/||p"`
echo "Duplicating ${file}'s ${dupdir}"
if [ -d ${dupdir} ]
then true
else
mkdir ${dupdir}
fi
;;
*)
;;
esac
done
# Get the path from ${LIB} to $file, accounting for symlinks.
parent=`echo "$file" | sed -e 's@/[^/]*$@@'`
libabs=`cd ${LIB}; ${PWDCMD}`
file2=`cd ${LIB}; cd $parent; ${PWDCMD} | sed -e "s@^${libabs}@@"`
# DOTS is the relative path from ${LIB}/$file's dir back to ${LIB}.
dots=`echo "$file2" | sed -e 's@/[^/]*@../@g'`
rm -fr ${LIB}/$file > /dev/null 2>&1
ln -s ${dots}root$x ${LIB}/$file > /dev/null 2>&1
treetops="$treetops $x ${LIB}/root$x"
fi
fi
cd $cwd
fi
done
fi
# # # # # # # # # # # # # # # # # # # # #
#
required=
set x $treetops
shift
while [ $# != 0 ]; do
# $1 is an old directory to copy, and $2 is the new directory to copy to.
#
SRCDIR=`cd ${INPUT} ; cd $1 ; ${PWDCMD}`
export SRCDIR
shift
DESTDIR=`cd $1;${PWDCMD}`
export DESTDIR
shift
# The same dir can appear more than once in treetops.
# There's no need to scan it more than once.
#
if [ -f ${DESTDIR}/DONE ]
then continue ; fi
touch ${DESTDIR}/DONE
echo Fixing directory ${SRCDIR} into ${DESTDIR}
# Check .h files which are symlinks as well as those which are files.
# A link to a header file will not be processed by anything but this.
#
cd ${SRCDIR}
[=_IF PROGRAM _env ! =][=
_include hackshell =][=
_ELSE
=]
required="$required `if $LINKS; then
find . -name '*.h' \( -type f -o -type l \) -print
else
find . -name '*.h' -type f -print
fi | ${FIXINCL}`"[=
_ENDIF =]
done
## Make sure that any include files referenced using double quotes
## exist in the fixed directory. This comes last since otherwise
## we might end up deleting some of these files "because they don't
## need any change."
set x `echo $required`
shift
while [ $# != 0 ]; do
newreq=
while [ $# != 0 ]; do
# $1 is the directory to copy from,
# $2 is the unfixed file,
# $3 is the fixed file name.
#
cd ${INPUT}
cd $1
if [ -r $2 ] && [ ! -r $3 ]; then
cp $2 $3 >/dev/null 2>&1 || echo "Can't copy $2" >&2
chmod +w $3 2>/dev/null
chmod a+r $3 2>/dev/null
echo Copied $2
for include in `egrep '^[ ]*#[ ]*include[ ]*"[^/]' $3 |
sed -e 's/^[ ]*#[ ]*include[ ]*"\([^"]*\)".*$/\1/'`
do
dir=`echo $2 | sed -e s'|/[^/]*$||'`
dir2=`echo $3 | sed -e s'|/[^/]*$||'`
newreq="$newreq $1 $dir/$include $dir2/$include"
done
fi
shift; shift; shift
done
set x $newreq
shift
done
echo 'Cleaning up DONE files.'
cd $LIB
find . -name DONE -exec rm -f '{}' ';'
echo 'Removing unneeded directories:'
cd $LIB
files=`find . -type d -print | sort -r`
for file in $files; do
rmdir $LIB/$file > /dev/null 2>&1
done[=
# Make the output file executable
# =][=
_eval _outfile "chmod +x %s" _printf _shell=]
This source diff could not be displayed because it is too large. You can view the blob instead.
/* Definitions for data structures and routines for the regular
expression library, version 0.12.
Copyright (C) 1985, 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* $Id: regex.h,v 1.1 1998/03/20 16:19:41 korbb Exp $ */
#ifndef __REGEXP_LIBRARY_H__
#define __REGEXP_LIBRARY_H__
/* POSIX says that <sys/types.h> must be included (by the caller) before
<regex.h>. */
#ifdef VMS
/* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it
should be there. */
#include <stddef.h>
#endif
/* The following bits are used to determine the regexp syntax we
recognize. The set/not-set meanings are chosen so that Emacs syntax
remains the value 0. The bits are given in alphabetical order, and
the definitions shifted by one from the previous bit; thus, when we
add or remove a bit, only one other definition need change. */
typedef unsigned reg_syntax_t;
/* If this bit is not set, then \ inside a bracket expression is literal.
If set, then such a \ quotes the following character. */
#define RE_BACKSLASH_ESCAPE_IN_LISTS (1)
/* If this bit is not set, then + and ? are operators, and \+ and \? are
literals.
If set, then \+ and \? are operators and + and ? are literals. */
#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
/* If this bit is set, then character classes are supported. They are:
[:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:],
[:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
If not set, then character classes are not supported. */
#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
/* If this bit is set, then ^ and $ are always anchors (outside bracket
expressions, of course).
If this bit is not set, then it depends:
^ is an anchor if it is at the beginning of a regular
expression or after an open-group or an alternation operator;
$ is an anchor if it is at the end of a regular expression, or
before a close-group or an alternation operator.
This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
POSIX draft 11.2 says that * etc. in leading positions is undefined.
We already implemented a previous draft which made those constructs
invalid, though, so we haven't changed the code back. */
#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
/* If this bit is set, then special characters are always special
regardless of where they are in the pattern.
If this bit is not set, then special characters are special only in
some contexts; otherwise they are ordinary. Specifically,
* + ? and intervals are only special when not after the beginning,
open-group, or alternation operator. */
#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
/* If this bit is set, then *, +, ?, and { cannot be first in an re or
immediately after an alternation or begin-group operator. */
#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
/* If this bit is set, then . matches newline.
If not set, then it doesn't. */
#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
/* If this bit is set, then . doesn't match NUL.
If not set, then it does. */
#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
/* If this bit is set, nonmatching lists [^...] do not match newline.
If not set, they do. */
#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
/* If this bit is set, either \{...\} or {...} defines an
interval, depending on RE_NO_BK_BRACES.
If not set, \{, \}, {, and } are literals. */
#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
/* If this bit is set, +, ? and | aren't recognized as operators.
If not set, they are. */
#define RE_LIMITED_OPS (RE_INTERVALS << 1)
/* If this bit is set, newline is an alternation operator.
If not set, newline is literal. */
#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
/* If this bit is set, then `{...}' defines an interval, and \{ and \}
are literals.
If not set, then `\{...\}' defines an interval. */
#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
/* If this bit is set, (...) defines a group, and \( and \) are literals.
If not set, \(...\) defines a group, and ( and ) are literals. */
#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
/* If this bit is set, then \<digit> matches <digit>.
If not set, then \<digit> is a back-reference. */
#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
/* If this bit is set, then | is an alternation operator, and \| is literal.
If not set, then \| is an alternation operator, and | is literal. */
#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
/* If this bit is set, then an ending range point collating higher
than the starting range point, as in [z-a], is invalid.
If not set, then when ending range point collates higher than the
starting range point, the range is ignored. */
#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
/* If this bit is set, then an unmatched ) is ordinary.
If not set, then an unmatched ) is invalid. */
#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
/* This global variable defines the particular regexp syntax to use (for
some interfaces). When a regexp is compiled, the syntax used is
stored in the pattern buffer, so changing this does not affect
already-compiled regexps. */
extern reg_syntax_t re_syntax_options;
/* Define combinations of the above bits for the standard possibilities.
(The [[[ comments delimit what gets put into the Texinfo file, so
don't delete them!) */
/* [[[begin syntaxes]]] */
#define RE_SYNTAX_EMACS 0
#define RE_SYNTAX_AWK \
(RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \
| RE_NO_BK_PARENS | RE_NO_BK_REFS \
| RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \
| RE_UNMATCHED_RIGHT_PAREN_ORD)
#define RE_SYNTAX_POSIX_AWK \
(RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS)
#define RE_SYNTAX_GREP \
(RE_BK_PLUS_QM | RE_CHAR_CLASSES \
| RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \
| RE_NEWLINE_ALT)
#define RE_SYNTAX_EGREP \
(RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \
| RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \
| RE_NEWLINE_ALT | RE_NO_BK_PARENS \
| RE_NO_BK_VBAR)
#define RE_SYNTAX_POSIX_EGREP \
(RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES)
/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */
#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
/* Syntax bits common to both basic and extended POSIX regex syntax. */
#define _RE_SYNTAX_POSIX_COMMON \
(RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \
| RE_INTERVALS | RE_NO_EMPTY_RANGES)
#define RE_SYNTAX_POSIX_BASIC \
(_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this
isn't minimal, since other operators, such as \`, aren't disabled. */
#define RE_SYNTAX_POSIX_MINIMAL_BASIC \
(_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
#define RE_SYNTAX_POSIX_EXTENDED \
(_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
| RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \
| RE_NO_BK_PARENS | RE_NO_BK_VBAR \
| RE_UNMATCHED_RIGHT_PAREN_ORD)
/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS
replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */
#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \
(_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
| RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \
| RE_NO_BK_PARENS | RE_NO_BK_REFS \
| RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD)
/* [[[end syntaxes]]] */
/* Maximum number of duplicates an interval can allow. Some systems
(erroneously) define this in other header files, but we want our
value, so remove any previous define. */
#ifdef RE_DUP_MAX
#undef RE_DUP_MAX
#endif
#define RE_DUP_MAX ((1 << 15) - 1)
/* POSIX `cflags' bits (i.e., information for `regcomp'). */
/* If this bit is set, then use extended regular expression syntax.
If not set, then use basic regular expression syntax. */
#define REG_EXTENDED 1
/* If this bit is set, then ignore case when matching.
If not set, then case is significant. */
#define REG_ICASE (REG_EXTENDED << 1)
/* If this bit is set, then anchors do not match at newline
characters in the string.
If not set, then anchors do match at newlines. */
#define REG_NEWLINE (REG_ICASE << 1)
/* If this bit is set, then report only success or fail in regexec.
If not set, then returns differ between not matching and errors. */
#define REG_NOSUB (REG_NEWLINE << 1)
/* POSIX `eflags' bits (i.e., information for regexec). */
/* If this bit is set, then the beginning-of-line operator doesn't match
the beginning of the string (presumably because it's not the
beginning of a line).
If not set, then the beginning-of-line operator does match the
beginning of the string. */
#define REG_NOTBOL 1
/* Like REG_NOTBOL, except for the end-of-line. */
#define REG_NOTEOL (1 << 1)
/* POSIX doesn't require that we do anything for the 0 case,
but why not be nice. */
#define REG_ERR_TABLE \
_RERR_( NOERROR, "Success" ) \
_RERR_( NOMATCH, "No match" ) \
/* \
* POSIX regcomp return error codes. \
* (In the order listed in the standard.) \
*/ \
_RERR_( BADPAT, "Invalid regular expression" ) \
_RERR_( ECOLLATE, "Invalid collation character" ) \
_RERR_( ECTYPE, "Invalid character class name" ) \
_RERR_( EESCAPE, "Trailing backslash" ) \
_RERR_( ESUBREG, "Invalid back reference" ) \
_RERR_( EBRACK, "Unmatched [ or [^" ) \
_RERR_( EPAREN, "Unmatched ( or \\(" ) \
_RERR_( EBRACE, "Unmatched \\{" ) \
_RERR_( BADBR, "Invalid content of \\{\\}" ) \
_RERR_( ERANGE, "Invalid range end" ) \
_RERR_( ESPACE, "Memory exhausted" ) \
_RERR_( BADRPT, "Invalid preceding regular expression" ) \
_RERR_( ECHAR, "Invalid multibyte character" ) \
_RERR_( EBOL, "^ anchor and not BOL" ) \
_RERR_( EEOL, "$ anchor and not EOL" ) \
\
/* \
* Error codes we've added. \
*/ \
_RERR_( EEND, "Premature end of regular expression" ) \
_RERR_( ESIZE, "Regular expression too big" ) \
_RERR_( ERPAREN, "Unmatched ) or \\)" )
#define _RERR_(n,t) REG_ ## n,
typedef enum { REG_ERR_TABLE REG_ERR_COUNT } reg_errcode_t;
#undef _RERR_
/* This data structure represents a compiled pattern. Before calling
the pattern compiler, the fields `buffer', `allocated', `fastmap',
`translate', and `no_sub' can be set. After the pattern has been
compiled, the `re_nsub' field is available. All other fields are
private to the regex routines. */
struct re_pattern_buffer
{
/* [[[begin pattern_buffer]]] */
/* Space that holds the compiled pattern. It is declared as
`unsigned char *' because its elements are
sometimes used as array indexes. */
unsigned char *buffer;
/* Number of bytes to which `buffer' points. */
unsigned long allocated;
/* Number of bytes actually used in `buffer'. */
unsigned long used;
/* Syntax setting with which the pattern was compiled. */
reg_syntax_t syntax;
/* Pointer to a fastmap, if any, otherwise zero. re_search uses
the fastmap, if there is one, to skip over impossible
starting points for matches. */
char *fastmap;
/* Either a translate table to apply to all characters before
comparing them, or zero for no translation. The translation
is applied to a pattern when it is compiled and to a string
when it is matched. */
char *translate;
/* Number of subexpressions found by the compiler. */
size_t re_nsub;
/* Zero if this pattern cannot match the empty string, one else.
Well, in truth it's used only in `re_search_2', to see
whether or not we should use the fastmap, so we don't set
this absolutely perfectly; see `re_compile_fastmap' (the
`duplicate' case). */
unsigned can_be_null : 1;
/* If REGS_UNALLOCATED, allocate space in the `regs' structure
for `max (RE_NREGS, re_nsub + 1)' groups.
If REGS_REALLOCATE, reallocate space if necessary.
If REGS_FIXED, use what's there. */
#define REGS_UNALLOCATED 0
#define REGS_REALLOCATE 1
#define REGS_FIXED 2
unsigned regs_allocated : 2;
/* Set to zero when `regex_compile' compiles a pattern; set to one
by `re_compile_fastmap' if it updates the fastmap. */
unsigned fastmap_accurate : 1;
/* If set, `re_match_2' does not return information about
subexpressions. */
unsigned no_sub : 1;
/* If set, a beginning-of-line anchor doesn't match at the
beginning of the string. */
unsigned not_bol : 1;
/* Similarly for an end-of-line anchor. */
unsigned not_eol : 1;
/* If true, an anchor at a newline matches. */
unsigned newline_anchor : 1;
/* [[[end pattern_buffer]]] */
};
typedef struct re_pattern_buffer regex_t;
/* search.c (search_buffer) in Emacs needs this one opcode value. It is
defined both in `regex.c' and here. */
#define RE_EXACTN_VALUE 1
/* Type for byte offsets within the string. POSIX mandates this. */
typedef int regoff_t;
/* This is the structure we store register match data in. See
regex.texinfo for a full description of what registers match. */
struct re_registers
{
unsigned num_regs;
regoff_t *start;
regoff_t *end;
};
/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
`re_match_2' returns information about at least this many registers
the first time a `regs' structure is passed. */
#ifndef RE_NREGS
#define RE_NREGS 30
#endif
/* POSIX specification for registers. Aside from the different names than
`re_registers', POSIX uses an array of structures, instead of a
structure of arrays. */
typedef struct
{
regoff_t rm_so; /* Byte offset from string's start to substring's start. */
regoff_t rm_eo; /* Byte offset from string's start to substring's end. */
} regmatch_t;
/* Declarations for routines. */
/* To avoid duplicating every routine declaration -- once with a
prototype (if we are ANSI), and once without (if we aren't) -- we
use the following macro to declare argument types. This
unfortunately clutters up the declarations a bit, but I think it's
worth it. */
#if __STDC__
#define _RE_ARGS(args) args
#else /* not __STDC__ */
#define _RE_ARGS(args) ()
#endif /* not __STDC__ */
/* Sets the current default syntax to SYNTAX, and return the old syntax.
You can also simply assign to the `re_syntax_options' variable. */
extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax));
/* Compile the regular expression PATTERN, with length LENGTH
and syntax given by the global `re_syntax_options', into the buffer
BUFFER. Return NULL if successful, and an error string if not. */
extern const char *re_compile_pattern
_RE_ARGS ((const char *pattern, int length,
struct re_pattern_buffer *buffer));
/* Compile a fastmap for the compiled pattern in BUFFER; used to
accelerate searches. Return 0 if successful and -2 if was an
internal error. */
extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
/* Search in the string STRING (with length LENGTH) for the pattern
compiled into BUFFER. Start searching at position START, for RANGE
characters. Return the starting position of the match, -1 for no
match, or -2 for an internal error. Also return register
information in REGS (if REGS and BUFFER->no_sub are nonzero). */
extern int re_search
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
int length, int start, int range, struct re_registers *regs));
/* Like `re_search', but search in the concatenation of STRING1 and
STRING2. Also, stop searching at index START + STOP. */
extern int re_search_2
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
int length1, const char *string2, int length2,
int start, int range, struct re_registers *regs, int stop));
/* Like `re_search', but return how many characters in STRING the regexp
in BUFFER matched, starting at position START. */
extern int re_match
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
int length, int start, struct re_registers *regs));
/* Relates to `re_match' as `re_search_2' relates to `re_search'. */
extern int re_match_2
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
int length1, const char *string2, int length2,
int start, struct re_registers *regs, int stop));
/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
ENDS. Subsequent matches using BUFFER and REGS will use this memory
for recording register information. STARTS and ENDS must be
allocated with malloc, and must each be at least `NUM_REGS * sizeof
(regoff_t)' bytes long.
If NUM_REGS == 0, then subsequent matches should allocate their own
register data.
Unless this function is called, the first search or match using
PATTERN_BUFFER will allocate its own register data, without
freeing the old data. */
extern void re_set_registers
_RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs,
unsigned num_regs, regoff_t *starts, regoff_t *ends));
/* 4.2 bsd compatibility. */
extern char *re_comp _RE_ARGS ((const char *));
extern int re_exec _RE_ARGS ((const char *));
/* POSIX compatibility. */
extern int regcomp _RE_ARGS ((regex_t *preg, const char *pattern, int cflags));
extern int regexec
_RE_ARGS ((const regex_t *preg, const char *string, size_t nmatch,
regmatch_t pmatch[], int eflags));
extern size_t regerror
_RE_ARGS ((int errcode, const regex_t *preg, char *errbuf,
size_t errbuf_size));
extern void regfree _RE_ARGS ((regex_t *preg));
#endif /* not __REGEXP_LIBRARY_H__ */
/*
Local variables:
make-backup-files: t
version-control: t
trim-versions-without-asking: nil
End:
*/
/*
* $Id: server.c,v 1.1 1998/03/20 16:19:41 korbb Exp $
*
* Server Handling copyright 1992-1998 Bruce Korb
*
* Server Handling is free software.
* You may redistribute it and/or modify it under the terms of the
* GNU General Public License, as published by the Free Software
* Foundation; either version 2, or (at your option) any later version.
*
* Server Handling is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Server Handling. See the file "COPYING". If not,
* write to: The Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
* As a special exception, Bruce Korb gives permission for additional
* uses of the text contained in his release of ServerHandler.
*
* The exception is that, if you link the ServerHandler library with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the ServerHandler library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by Bruce Korb under
* the name ServerHandler. If you copy code from other sources under the
* General Public License into a copy of ServerHandler, as the General Public
* License permits, the exception does not apply to the code that you add
* in this way. To avoid misleading anyone as to the status of such
* modified files, you must delete this exception notice from them.
*
* If you write modifications of your own for ServerHandler, it is your
* choice whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*/
#include <fcntl.h>
#include <errno.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <sys/param.h>
#include "server.h"
#ifdef DEBUG
#define STATIC
#else
#define STATIC static
#endif
#ifndef tSCC
#define tSCC static const char
#endif
#ifndef NUL
#define NUL '\0'
#endif
STATIC bool readPipeTimeout;
STATIC tpChar defArgs[] =
{(char *) NULL, "-p", (char *) NULL};
STATIC tpfPair serverPair =
{(FILE *) NULL, (FILE *) NULL};
STATIC pid_t serverId = NULLPROCESS;
/*
* Arbitrary text that should not be found in the shell output.
* It must be a single line and appear verbatim at the start of
* the terminating output line.
*/
tSCC zDone[] = "ShElL-OuTpUt-HaS-bEeN-cOmPlEtEd";
STATIC tpChar pCurDir = (char *) NULL;
/*
* chainOpen
*
* Given an FD for an inferior process to use as stdin,
* start that process and return a NEW FD that that process
* will use for its stdout. Requires the argument vector
* for the new process and, optionally, a pointer to a place
* to store the child's process id.
*/
int
chainOpen (stdinFd, ppArgs, pChild)
int stdinFd;
tpChar *ppArgs;
pid_t *pChild;
{
tFdPair stdoutPair =
{-1, -1};
pid_t chId;
char *pzCmd;
/*
* Create a pipe it will be the child process' stdout,
* and the parent will read from it.
*/
if ((pipe ((int *) &stdoutPair) < 0))
{
if (pChild != (pid_t *) NULL)
*pChild = NOPROCESS;
return -1;
}
/*
* If we did not get an arg list, use the default
*/
if (ppArgs == (tpChar *) NULL)
ppArgs = defArgs;
/*
* If the arg list does not have a program,
* assume the "SHELL" from the environment, or, failing
* that, then sh. Set argv[0] to whatever we decided on.
*/
if (pzCmd = *ppArgs,
(pzCmd == (char *) NULL) || (*pzCmd == '\0'))
{
pzCmd = getenv ("SHELL");
if (pzCmd == (char *) NULL)
pzCmd = "sh";
}
#ifdef DEBUG_PRINT
printf ("START: %s\n", pzCmd);
{
int idx = 0;
while (ppArgs[++idx] != (char *) NULL)
printf (" ARG %2d: %s\n", idx, ppArgs[idx]);
}
#endif
/*
* Call fork() and see which process we become
*/
chId = fork ();
switch (chId)
{
case NOPROCESS: /* parent - error in call */
close (stdoutPair.readFd);
close (stdoutPair.writeFd);
if (pChild != (pid_t *) NULL)
*pChild = NOPROCESS;
return -1;
default: /* parent - return opposite FD's */
if (pChild != (pid_t *) NULL)
*pChild = chId;
#ifdef DEBUG_PRINT
printf ("for pid %d: stdin from %d, stdout to %d\n"
"for parent: read from %d\n",
chId, stdinFd, stdoutPair.writeFd, stdoutPair.readFd);
#endif
close (stdinFd);
close (stdoutPair.writeFd);
return stdoutPair.readFd;
case NULLPROCESS: /* child - continue processing */
break;
}
/*
* Close the pipe end handed back to the parent process
*/
close (stdoutPair.readFd);
/*
* Close our current stdin and stdout
*/
close (STDIN_FILENO);
close (STDOUT_FILENO);
/*
* Make the fd passed in the stdin, and the write end of
* the new pipe become the stdout.
*/
fcntl (stdoutPair.writeFd, F_DUPFD, STDOUT_FILENO);
fcntl (stdinFd, F_DUPFD, STDIN_FILENO);
if (*ppArgs == (char *) NULL)
*ppArgs = pzCmd;
execvp (pzCmd, ppArgs);
fprintf (stderr, "Error %d: Could not execvp( '%s', ... ): %s\n",
errno, pzCmd, strerror (errno));
exit (EXIT_PANIC);
}
/*
* p2open
*
* Given a pointer to an argument vector, start a process and
* place its stdin and stdout file descriptors into an fd pair
* structure. The "writeFd" connects to the inferior process
* stdin, and the "readFd" connects to its stdout. The calling
* process should write to "writeFd" and read from "readFd".
* The return value is the process id of the created process.
*/
pid_t
p2open (pPair, ppArgs)
tFdPair *pPair;
tpChar *ppArgs;
{
pid_t chId;
/*
* Create a bi-directional pipe. Writes on 0 arrive on 1
* and vice versa, so the parent and child processes will
* read and write to opposite FD's.
*/
if (pipe ((int *) pPair) < 0)
return NOPROCESS;
pPair->readFd = chainOpen (pPair->readFd, ppArgs, &chId);
if (chId == NOPROCESS)
close (pPair->writeFd);
return chId;
}
/*
* p2fopen
*
* Identical to "p2open()", except that the "fd"'s are "fdopen(3)"-ed
* into file pointers instead.
*/
pid_t
p2fopen (pfPair, ppArgs)
tpfPair *pfPair;
tpChar *ppArgs;
{
tFdPair fdPair;
pid_t chId = p2open (&fdPair, ppArgs);
if (chId == NOPROCESS)
return chId;
pfPair->pfRead = fdopen (fdPair.readFd, "r");
pfPair->pfWrite = fdopen (fdPair.writeFd, "w");
return chId;
}
/*
* loadData
*
* Read data from a file pointer (a pipe to a process in this context)
* until we either get EOF or we get a marker line back.
* The read data are stored in a malloc-ed string that is truncated
* to size at the end. Input is assumed to be an ASCII string.
*/
STATIC char *
loadData (fp)
FILE *fp;
{
char *pzText;
size_t textSize;
char *pzScan;
char zLine[1024];
textSize = sizeof (zLine) * 2;
pzScan = \
pzText = malloc (textSize);
if (pzText == (char *) NULL)
return pzText;
for (;;)
{
size_t usedCt;
alarm (10);
readPipeTimeout = BOOL_FALSE;
if (fgets (zLine, sizeof (zLine), fp) == (char *) NULL)
break;
if (strncmp (zLine, zDone, sizeof (zDone) - 1) == 0)
break;
strcpy (pzScan, zLine);
pzScan += strlen (zLine);
usedCt = (size_t) (pzScan - pzText);
if (textSize - usedCt < sizeof (zLine))
{
size_t off = (size_t) (pzScan - pzText);
void *p;
textSize += 4096;
p = realloc ((void *) pzText, textSize);
if (p == (void *) NULL)
{
fprintf (stderr, "Failed to get 0x%08X bytes\n", textSize);
free ((void *) pzText);
return (char *) NULL;
}
pzText = (char *) p;
pzScan = pzText + off;
}
}
alarm (0);
if (readPipeTimeout)
{
free ((void *) pzText);
return (char *) NULL;
}
while ((pzScan > pzText) && isspace (pzScan[-1]))
pzScan--;
*pzScan = NUL;
return realloc ((void *) pzText, strlen (pzText) + 1);
}
/*
* SHELL SERVER PROCESS CODE
*/
#ifdef DONT_HAVE_SIGSEND
typedef enum
{
P_ALL, P_PID, P_GID, P_UID, P_PGID, P_SID, P_CID
}
idtype_t;
typedef long id_t;
STATIC int
sigsend (idtype, id, sig)
idtype_t idtype;
id_t id;
int sig;
{
switch (idtype)
{
case P_PID:
kill ((pid_t) id, sig);
break;
case P_ALL:
case P_GID:
case P_UID:
case P_PGID:
case P_SID:
case P_CID:
errno = EINVAL;
return -1;
/*NOTREACHED */
}
return 0;
}
#endif /* HAVE_SIGSEND */
STATIC void
closeServer ()
{
sigsend (P_PID, (id_t) serverId, SIGKILL);
serverId = NULLPROCESS;
fclose (serverPair.pfRead);
fclose (serverPair.pfWrite);
serverPair.pfRead = serverPair.pfWrite = (FILE *) NULL;
}
struct sigaction savePipeAction;
struct sigaction saveAlrmAction;
struct sigaction currentAction;
STATIC void
sigHandler (signo)
int signo;
{
closeServer ();
readPipeTimeout = BOOL_TRUE;
}
STATIC void
serverSetup ()
{
currentAction.sa_sigaction =
currentAction.sa_handler = sigHandler;
currentAction.sa_flags = SA_SIGINFO;
sigemptyset (&currentAction.sa_mask);
sigaction (SIGPIPE, &currentAction, &savePipeAction);
sigaction (SIGALRM, &currentAction, &saveAlrmAction);
atexit (&closeServer);
fputs ("trap : INT\n", serverPair.pfWrite);
fflush (serverPair.pfWrite);
pCurDir = getcwd ((char *) NULL, MAXPATHLEN + 1);
}
char *
runShell (pzCmd)
const char *pzCmd;
{
tSCC zNil[] = "";
/*
* IF the shell server process is not running yet,
* THEN try to start it.
*/
if (serverId == NULLPROCESS)
{
serverId = p2fopen (&serverPair, defArgs);
if (serverId > 0)
serverSetup ();
}
/*
* IF it is still not running,
* THEN return the nil string.
*/
if (serverId <= 0)
return (char *) zNil;
/*
* Make sure the process will pay attention to us,
* send the supplied command, and then
* have it output a special marker that we can find.
*/
fprintf (serverPair.pfWrite, "\\cd %s\n%s\n\necho\necho %s\n",
pCurDir, pzCmd, zDone);
fflush (serverPair.pfWrite);
if (serverId == NULLPROCESS)
return (char *) NULL;
/*
* Now try to read back all the data. If we fail due to either
* a sigpipe or sigalrm (timeout), we will return the nil string.
*/
{
char *pz = loadData (serverPair.pfRead);
if (pz == (char *) NULL)
{
fprintf (stderr, "CLOSING SHELL SERVER - command failure:\n\t%s\n",
pzCmd);
closeServer ();
pz = (char *) zNil;
}
return pz;
}
}
/*
* $Id: server.h,v 1.1 1998/03/20 16:19:41 korbb Exp $
*
* Server Handling copyright 1992-1998 Bruce Korb
*
* Server Handling is free software.
* You may redistribute it and/or modify it under the terms of the
* GNU General Public License, as published by the Free Software
* Foundation; either version 2, or (at your option) any later version.
*
* Server Handling is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Server Handling. See the file "COPYING". If not,
* write to: The Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
* As a special exception, Bruce Korb gives permission for additional
* uses of the text contained in his release of ServerHandler.
*
* The exception is that, if you link the ServerHandler library with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the ServerHandler library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by Bruce Korb under
* the name ServerHandler. If you copy code from other sources under the
* General Public License into a copy of ServerHandler, as the General Public
* License permits, the exception does not apply to the code that you add
* in this way. To avoid misleading anyone as to the status of such
* modified files, you must delete this exception notice from them.
*
* If you write modifications of your own for ServerHandler, it is your
* choice whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*/
#ifndef FIXINC_SERVER_H
#define FIXINC_SERVER_H
#include <stdio.h>
#include <unistd.h>
/*
* Dual pipe opening of a child process
*/
typedef struct
{
int readFd;
int writeFd;
}
tFdPair;
typedef struct
{
FILE *pfRead; /* parent read fp */
FILE *pfWrite; /* parent write fp */
}
tpfPair;
typedef char *tpChar;
#define NOPROCESS ((pid_t)-1)
#define NULLPROCESS ((pid_t)0)
#define EXIT_PANIC 99
typedef enum
{
BOOL_FALSE, BOOL_TRUE
}
bool;
#define _P_(p) ()
char *runShell _P_ ((const char *pzCmd));
pid_t p2fopen _P_ ((tpfPair * pfPair, tpChar * ppArgs));
pid_t p2open _P_ ((tFdPair * pPair, tpChar * ppArgs));
int
chainOpen _P_ ((int stdinFd,
tpChar * ppArgs,
pid_t * pChild));
#endif /* FIXINC_SERVER_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment