On 24 Oct 2013, at 21:13, Sean Bruno <sean_br...@yahoo.com> wrote: > On Tue, 2013-10-22 at 09:47 +0100, David Chisnall wrote: >> On 22 Oct 2013, at 00:43, Sean Bruno <sean_br...@yahoo.com> wrote: >> >>> Heh, Matthew suggested the obvious in private mail, it seems that this >>> would be better "spelled" as "isalpha" :-) >> >> This looks wrong. The behaviour of isalpha() depends on the current locale. >> You probably want isalpha_l(), with the "C" locale. >> >> David > > Took me a bit of wrangling to figure out what the proper implementation > of isalpha_l() and friends. > > How about this then? > > Index: options.cc > =================================================================== > --- options.cc (revision 257083) > +++ options.cc (working copy) > @@ -28,6 +28,7 @@ > #include <string.h> /* declares strcmp() */ > #include <ctype.h> /* declares isdigit() */ > #include <limits.h> /* defines CHAR_MAX */ > +#include <xlocale.h>/* support for newlocale() */ > #include "getopt.h" > #include "version.h" > > @@ -275,13 +276,15 @@ > for (int i = 0; i < _argument_count; i++) > { > const char *arg = _argument_vector[i]; > + locale_t loc; > > + loc = newlocale(LC_ALL_MASK, "C", 0); > /* Escape arg if it contains shell metacharacters. */ > if (*arg == '-') > { > putchar (*arg); > arg++; > - if (*arg >= 'A' && *arg <= 'Z' || *arg >= 'a' && *arg <= 'z') > + if (isalpha_l(*arg, loc)) > { > putchar (*arg); > arg++; > @@ -293,7 +296,7 @@ > putchar (*arg); > arg++; > } > - while (*arg >= 'A' && *arg <= 'Z' || *arg >= 'a' && *arg > <= 'z' || *arg == '-'); > + while (isalpha_l(*arg, loc) || *arg == '-'); > if (*arg == '=') > { > putchar (*arg);
Don't forget the freelocale() at the end. This seems like a very slow way of doing what was very fast in the original code though. I'm not entirely sure what you're aiming to gain in this refactoring. David _______________________________________________ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"