aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2006-08-17 09:58:02 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2006-08-17 09:58:02 +0200
commit89b3e3cda19cfd551d082dcef6d34b21fb56aeb9 (patch)
treeec6bcf1b1e13120fdc20fa06cbabd9ff42389db6
parent6d4d7b0eed1846e13f5dd75765696b2b6854af44 (diff)
downloadgcc-89b3e3cda19cfd551d082dcef6d34b21fb56aeb9.zip
gcc-89b3e3cda19cfd551d082dcef6d34b21fb56aeb9.tar.gz
gcc-89b3e3cda19cfd551d082dcef6d34b21fb56aeb9.tar.bz2
re PR libgomp/28725 (Case Sensitive OpenMP environment variables and patch)
PR libgomp/28725 * env.c: Include ctype.h. (parse_schedule, parse_unsigned_long, parse_boolean): Allow leading and/or trailing whitespace and compare strings case insensitively. From-SVN: r116209
-rw-r--r--libgomp/ChangeLog8
-rw-r--r--libgomp/env.c49
2 files changed, 42 insertions, 15 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 7824dd4..3b9ff82 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,11 @@
+2006-08-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR libgomp/28725
+ * env.c: Include ctype.h.
+ (parse_schedule, parse_unsigned_long, parse_boolean): Allow
+ leading and/or trailing whitespace and compare strings case
+ insensitively.
+
2006-07-16 Jakub Jelinek <jakub@redhat.com>
PR fortran/28390
diff --git a/libgomp/env.c b/libgomp/env.c
index c86ebc6..0a80b87 100644
--- a/libgomp/env.c
+++ b/libgomp/env.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005 Free Software Foundation, Inc.
+/* Copyright (C) 2005, 2006 Free Software Foundation, Inc.
Contributed by Richard Henderson <rth@redhat.com>.
This file is part of the GNU OpenMP Library (libgomp).
@@ -30,6 +30,7 @@
#include "libgomp.h"
#include "libgomp_f.h"
+#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
@@ -53,17 +54,19 @@ parse_schedule (void)
if (env == NULL)
return;
- if (strncmp (env, "static", 6) == 0)
+ while (isspace ((unsigned char) *env))
+ ++env;
+ if (strncasecmp (env, "static", 6) == 0)
{
gomp_run_sched_var = GFS_STATIC;
env += 6;
}
- else if (strncmp (env, "dynamic", 7) == 0)
+ else if (strncasecmp (env, "dynamic", 7) == 0)
{
gomp_run_sched_var = GFS_DYNAMIC;
env += 7;
}
- else if (strncmp (env, "guided", 6) == 0)
+ else if (strncasecmp (env, "guided", 6) == 0)
{
gomp_run_sched_var = GFS_GUIDED;
env += 6;
@@ -71,20 +74,20 @@ parse_schedule (void)
else
goto unknown;
+ while (isspace ((unsigned char) *env))
+ ++env;
if (*env == '\0')
return;
- if (*env != ' ' && *env != ',')
+ if (*env++ != ',')
goto unknown;
- while (*env == ' ')
- env++;
+ while (isspace ((unsigned char) *env))
+ ++env;
if (*env == '\0')
- return;
- if (*env != ',')
- goto unknown;
- if (*++env == '\0')
goto invalid;
gomp_run_sched_chunk = strtoul (env, &end, 10);
+ while (isspace ((unsigned char) *end))
+ ++end;
if (*end != '\0')
goto invalid;
return;
@@ -113,10 +116,14 @@ parse_unsigned_long (const char *name, unsigned long *pvalue)
if (env == NULL)
return false;
+ while (isspace ((unsigned char) *env))
+ ++env;
if (*env == '\0')
goto invalid;
value = strtoul (env, &end, 10);
+ while (isspace ((unsigned char) *end))
+ ++end;
if (*end != '\0')
goto invalid;
@@ -140,11 +147,23 @@ parse_boolean (const char *name, bool *value)
if (env == NULL)
return;
- if (strcmp (env, "true") == 0)
- *value = true;
- else if (strcmp (env, "false") == 0)
- *value = false;
+ while (isspace ((unsigned char) *env))
+ ++env;
+ if (strncasecmp (env, "true", 4) == 0)
+ {
+ *value = true;
+ env += 4;
+ }
+ else if (strncasecmp (env, "false", 5) == 0)
+ {
+ *value = false;
+ env += 5;
+ }
else
+ env = "X";
+ while (isspace ((unsigned char) *env))
+ ++env;
+ if (*env != '\0')
gomp_error ("Invalid value for environment variable %s", name);
}