diff options
author | Jakub Jelinek <jakub@redhat.com> | 2006-08-17 09:58:02 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2006-08-17 09:58:02 +0200 |
commit | 89b3e3cda19cfd551d082dcef6d34b21fb56aeb9 (patch) | |
tree | ec6bcf1b1e13120fdc20fa06cbabd9ff42389db6 /libgomp | |
parent | 6d4d7b0eed1846e13f5dd75765696b2b6854af44 (diff) | |
download | gcc-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
Diffstat (limited to 'libgomp')
-rw-r--r-- | libgomp/ChangeLog | 8 | ||||
-rw-r--r-- | libgomp/env.c | 49 |
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); } |