Use collate for alpha character ranges
This commit is contained in:
parent
c7f1966900
commit
9e33f9be1e
@ -21,6 +21,9 @@
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
#ifdef __FreeBSD__
|
||||
#include <locale.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
@ -671,6 +674,27 @@ lex()
|
||||
}
|
||||
else
|
||||
c2 = c;
|
||||
#ifdef __FreeBSD__
|
||||
{ token c3;
|
||||
|
||||
if (collate_range_cmp(c, c2) > 0) {
|
||||
FETCH(c2, "Invalid range");
|
||||
goto skip;
|
||||
}
|
||||
|
||||
for (c3 = 0; c3 < NOTCHAR; ++c3)
|
||||
if ( collate_range_cmp(c, c3) <= 0
|
||||
&& collate_range_cmp(c3, c2) <= 0
|
||||
) {
|
||||
setbit(c3, ccl);
|
||||
if (case_fold)
|
||||
if (ISUPPER(c3))
|
||||
setbit(tolower(c3), ccl);
|
||||
else if (ISLOWER(c3))
|
||||
setbit(toupper(c3), ccl);
|
||||
}
|
||||
}
|
||||
#else
|
||||
while (c <= c2)
|
||||
{
|
||||
setbit(c, ccl);
|
||||
@ -681,6 +705,7 @@ lex()
|
||||
setbit(toupper(c), ccl);
|
||||
++c;
|
||||
}
|
||||
#endif
|
||||
skip:
|
||||
;
|
||||
}
|
||||
|
@ -146,7 +146,7 @@ char **argv;
|
||||
extern char *optarg;
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
(void) setlocale(LC_CTYPE, "");
|
||||
(void) setlocale(LC_ALL, "");
|
||||
#endif
|
||||
#ifdef __EMX__
|
||||
_response(&argc, &argv);
|
||||
|
Loading…
x
Reference in New Issue
Block a user