FreeBSD 10 clang port

This commit is contained in:
Ulrich Wilkens
2014-07-27 16:48:57 +02:00
committed by Jon Trulson
parent 8d0551bfda
commit c3f74eec17
99 changed files with 510 additions and 366 deletions

View File

@@ -216,6 +216,7 @@ my_eval_variable (ip, var, len)
const char *var;
int len;
{
long val;
struct symtab **s;
s = lookup_variable (ip, var, len);
@@ -223,12 +224,14 @@ my_eval_variable (ip, var, len)
return 0;
do {
var = (*s)->s_value;
if (!isvarfirstletter(*var))
if (!isvarfirstletter(*var) || !strcmp((*s)->s_name, var))
break;
s = lookup_variable (ip, var, strlen(var));
} while (s);
return strtol(var, NULL, 0);
var = ParseIfExpression(ip, var, &val);
if (var && *var) debug(4, ("extraneous: '%s'\n", var));
return val;
}

View File

@@ -81,6 +81,7 @@
#include "ifparser.h"
#include <ctype.h>
#include <limits.h>
/****************************************************************************
Internal Macros and Utilities for Parser
@@ -116,19 +117,48 @@ parse_number (g, cp, valp)
const char *cp;
long *valp;
{
long base = 10;
SKIPSPACE (cp);
if (!isdigit(*cp))
return CALLFUNC(g, handle_error) (g, cp, "number");
*valp = strtol(cp, &cp, 0);
/* skip trailing qualifiers */
*valp = 0;
if (*cp == '0') {
cp++;
if ((*cp == 'x') || (*cp == 'X')) {
base = 16;
cp++;
} else {
base = 8;
}
}
/* Ignore overflows and assume ASCII, what source is usually written in */
while (1) {
int increment = -1;
if (base == 8) {
if ((*cp >= '0') && (*cp <= '7'))
increment = *cp++ - '0';
} else if (base == 16) {
if ((*cp >= '0') && (*cp <= '9'))
increment = *cp++ - '0';
else if ((*cp >= 'A') && (*cp <= 'F'))
increment = *cp++ - ('A' - 10);
else if ((*cp >= 'a') && (*cp <= 'f'))
increment = *cp++ - ('a' - 10);
} else { /* Decimal */
if ((*cp >= '0') && (*cp <= '9'))
increment = *cp++ - '0';
}
if (increment < 0)
break;
*valp = (*valp * base) + increment;
}
/* Skip trailing qualifiers */
while (*cp == 'U' || *cp == 'u' || *cp == 'L' || *cp == 'l') cp++;
#if 0
*valp = atoi (cp);
/* EMPTY */
for (cp++; isdigit(*cp); cp++) ;
#endif
return cp;
}
@@ -272,7 +302,10 @@ parse_product (g, cp, valp)
case '/':
DO (cp = parse_product (g, cp + 1, &rightval));
*valp = (*valp / rightval);
if (rightval)
*valp = (*valp / rightval);
else
*valp = LONG_MAX;
break;
case '%':

View File

@@ -255,6 +255,17 @@ main(argc, argv)
argc--;
}
break;
case 'i':
if (strncmp(argv[0]+2, "system", 6) == 0) {
if (incp >= includedirs + MAXDIRS)
fatalerr("Too many -I flags.\n");
*incp++ = argv[0]+8;
if (**(incp-1) == '\0') {
*(incp-1) = *(++argv);
argc--;
}
}
break;
case 'Y':
defincdir = argv[0]+2;
break;

View File

@@ -110,7 +110,7 @@ int deftype (line, filep, file_red, file, parse_it)
int parse_it;
{
register char *p;
char *directive, savechar;
char *directive, savechar, *q;
register int ret;
/*
@@ -167,6 +167,11 @@ int deftype (line, filep, file_red, file, parse_it)
*/
while (*p == ' ' || *p == '\t')
p++;
q = p + strlen(p);
do {
q--;
} while (*q == ' ' || *q == '\t');
q[1] = '\0';
switch (ret) {
case IF:
/*
@@ -227,7 +232,7 @@ int deftype (line, filep, file_red, file, parse_it)
/*
* copy the definition back to the beginning of the line.
*/
strcpy (line, p);
memmove (line, p, strlen(p) + 1);
break;
case ELSE:
case ENDIF: