Sorry I misinterpreted the 255 as being 127. That said, correct isdigit() implementations are supposed to handle the native compiler char->int conversion of the argument. This masking can make the -1 EOF match the 255 character and thus is really incorrect.
On 12/07/2011 09:25 PM, Michael Sweet wrote: > Bill, > > A digit is just 0 to 9, per the definition of isdigit. Masking off the sign > extension of the char value will just keep the values from 0 to 255 - UTF-8 > sequences will have bit 7 set which will prevent isdigit from matching. > > > On Dec 7, 2011, at 11:09 PM, Bill Spitzak wrote: >> On 10/18/2011 11:43 AM, Michael Sweet wrote: >>> In this case I would not use strtol to skip digits, but a simple while loop >>> instead: >>> >>> while (isdigit(*str& 255)) >>> str ++; >>> >>> (the "& 255" part is necessary to avoid portability issues with UTF-8 >>> strings) >> >> That seems wrong. That will actually turn some parts of UTF-8 characters >> into digits and thus match. You actually do not want to change the >> bytes, all the bytes in a multi-byte UTF-8 character will fail the >> isdigit() test and thus this will stop at that point. >> >> _______________________________________________ >> fltk-dev mailing list >> fltk-dev@easysw.com >> http://lists.easysw.com/mailman/listinfo/fltk-dev > > _____________ > Michael Sweet > _______________________________________________ fltk-dev mailing list fltk-dev@easysw.com http://lists.easysw.com/mailman/listinfo/fltk-dev