On Mon, Mar 7, 2016 at 12:55 PM, Christopher Collins <[email protected]>
wrote:

> I realize I'm being annoying and pedantic, but I just wanted to clarify
> the issue.  The problem is a difference in standard libraries:
>     * baselibc: isdigit() is a function.
>     * newlib: isdigit() is a macro.
>
> There is no problem when baselibc is used, because the argument gets
> promoted to an integer as required by the C standard.  With newlibc, no
> promotion occurs because macro invocations just translate to token
> substitution.
>
> Normally this wouldn't be a problem either, but gcc can be configured to
> raise an odd warning when a char is used to index an array
> (-Wchar-subscripts).  I am really not sure of the rationale for this
> warning...
>
>
The rationale is that 'char' can be signed or unsigned depending on the
architecture. If a particular architecture has signed chars then integer
promotion can result in negative values (which most likely was not
intended).

There is a more detailed explanation in the following thread:
https://sourceware.org/ml/newlib/2010/msg00245.html

best
Neel


> Chris
>
>
> On Mon, Mar 07, 2016 at 08:12:44PM +0000, [email protected] wrote:
> > Repository: incubator-mynewt-larva
> > Updated Branches:
> >   refs/heads/master db0e97b1e -> faa7814db
> >
> >
> > MYNEWT-230
> >
> > explictely cast to an integer since some compilers don't like to
> implicitelty
> > cast a char to an int
> >
> >
> > Project:
> http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/repo
> > Commit:
> http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/commit/faa7814d
> > Tree:
> http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/tree/faa7814d
> > Diff:
> http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/diff/faa7814d
> >
> > Branch: refs/heads/master
> > Commit: faa7814db73f712ffa46cf4522c22b821e32cce7
> > Parents: db0e97b
> > Author: Paul Dietrich <[email protected]>
> > Authored: Thu Mar 3 17:11:13 2016 -0800
> > Committer: wes3 <[email protected]>
> > Committed: Mon Mar 7 11:53:13 2016 -0800
> >
> > ----------------------------------------------------------------------
> >  libs/util/src/datetime.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > ----------------------------------------------------------------------
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/faa7814d/libs/util/src/datetime.c
> > ----------------------------------------------------------------------
> > diff --git a/libs/util/src/datetime.c b/libs/util/src/datetime.c
> > index 902eb55..fe4fb38 100644
> > --- a/libs/util/src/datetime.c
> > +++ b/libs/util/src/datetime.c
> > @@ -211,7 +211,7 @@ parse_number(const char *str, int digits, int *val)
> >      cp = str;
> >      end = str + digits;
> >      while (cp < end) {
> > -        if (!isdigit(*cp)) {
> > +        if (!isdigit((int) *cp)) {
> >              return (NULL);
> >          }
> >          *val *= 10;
> > @@ -277,7 +277,7 @@ parse_datetime(const char *input, struct os_timeval
> *tv, struct os_timezone *tz)
> >      /* parse fractional seconds if specified */
> >      if (*cp == '.') {
> >          ep = ++cp;
> > -        while (isdigit(*ep)) {
> > +        while (isdigit((int) *ep)) {
> >              ep++;
> >          }
> >          digits = ep - cp;
> >
>

Reply via email to