void usage(void);
int convert_numeric_option(char, int);
void convert_code_point_range(char, Range *);
-unsigned str_to_code_point(const char *, char **);
+int str_to_code_point(const char *, char **);
void convert_size(char, unsigned *, unsigned *);
void sort_and_compact_ranges(Range *, unsigned *);
int range_cmp(const void *, const void *);
}
value = str_to_code_point(optarg, &ptr);
- if(value>0 && *ptr==',')
+ if(value>=0 && *ptr==',')
{
range->first = value;
value = str_to_code_point(ptr+1, &ptr);
- if(value>0 && !*ptr)
+ if(value>=0 && !*ptr)
{
range->last = value;
return;
exit(1);
}
-unsigned str_to_code_point(const char *nptr, char **endptr)
+int str_to_code_point(const char *nptr, char **endptr)
{
if(nptr[0]=='U' && nptr[1]=='+')
return strtoul(nptr+2, endptr, 16);
for(bytes=1; (bytes<4 && (nptr[0]&(0x80>>bytes))); ++bytes)
if((nptr[bytes]&0xC0)!=0x80)
- return 0;
+ return -1;
if(bytes<2)
- return 0;
+ return -1;
code = nptr[0]&(0x3F>>bytes);
for(i=1; i<bytes; ++i)