basic: introduce generic ascii_strlower_n() call and make use of it everywhere
This commit is contained in:
parent
d424da2ae0
commit
b577e3d589
|
@ -317,14 +317,33 @@ char *truncate_nl(char *s) {
|
|||
return s;
|
||||
}
|
||||
|
||||
char ascii_tolower(char x) {
|
||||
|
||||
if (x >= 'A' && x <= 'Z')
|
||||
return x - 'A' + 'a';
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
char *ascii_strlower(char *t) {
|
||||
char *p;
|
||||
|
||||
assert(t);
|
||||
|
||||
for (p = t; *p; p++)
|
||||
if (*p >= 'A' && *p <= 'Z')
|
||||
*p = *p - 'A' + 'a';
|
||||
*p = ascii_tolower(*p);
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
char *ascii_strlower_n(char *t, size_t n) {
|
||||
size_t i;
|
||||
|
||||
if (n <= 0)
|
||||
return t;
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
t[i] = ascii_tolower(t[i]);
|
||||
|
||||
return t;
|
||||
}
|
||||
|
|
|
@ -130,7 +130,9 @@ char *strstrip(char *s);
|
|||
char *delete_chars(char *s, const char *bad);
|
||||
char *truncate_nl(char *s);
|
||||
|
||||
char *ascii_strlower(char *path);
|
||||
char ascii_tolower(char x);
|
||||
char *ascii_strlower(char *s);
|
||||
char *ascii_strlower_n(char *s, size_t n);
|
||||
|
||||
bool chars_intersect(const char *a, const char *b) _pure_;
|
||||
|
||||
|
|
|
@ -890,8 +890,6 @@ int dnssec_canonicalize(const char *n, char *buffer, size_t buffer_max) {
|
|||
return -ENOBUFS;
|
||||
|
||||
for (;;) {
|
||||
size_t i;
|
||||
|
||||
r = dns_label_unescape(&n, buffer, buffer_max);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -918,11 +916,7 @@ int dnssec_canonicalize(const char *n, char *buffer, size_t buffer_max) {
|
|||
if (memchr(buffer, '.', r))
|
||||
return -EINVAL;
|
||||
|
||||
for (i = 0; i < (size_t) r; i ++) {
|
||||
if (buffer[i] >= 'A' && buffer[i] <= 'Z')
|
||||
buffer[i] = buffer[i] - 'A' + 'a';
|
||||
}
|
||||
|
||||
ascii_strlower_n(buffer, (size_t) r);
|
||||
buffer[r] = '.';
|
||||
|
||||
buffer += r + 1;
|
||||
|
|
|
@ -466,12 +466,8 @@ int dns_packet_append_label(DnsPacket *p, const char *d, size_t l, bool canonica
|
|||
/* Generate in canonical form, as defined by DNSSEC
|
||||
* RFC 4034, Section 6.2, i.e. all lower-case. */
|
||||
|
||||
for (i = 0; i < l; i++) {
|
||||
if (d[i] >= 'A' && d[i] <= 'Z')
|
||||
w[i] = (uint8_t) (d[i] - 'A' + 'a');
|
||||
else
|
||||
w[i] = (uint8_t) d[i];
|
||||
}
|
||||
for (i = 0; i < l; i++)
|
||||
w[i] = (uint8_t) ascii_tolower(d[i]);
|
||||
} else
|
||||
/* Otherwise, just copy the string unaltered. This is
|
||||
* essential for DNS-SD, where the casing of labels
|
||||
|
|
|
@ -913,19 +913,11 @@ int dns_name_to_wire_format(const char *domain, uint8_t *buffer, size_t len, boo
|
|||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (canonical) {
|
||||
size_t i;
|
||||
|
||||
/* Optionally, output the name in DNSSEC
|
||||
* canonical format, as described in RFC 4034,
|
||||
* section 6.2. Or in other words: in
|
||||
* lower-case. */
|
||||
|
||||
for (i = 0; i < (size_t) r; i++) {
|
||||
if (out[i] >= 'A' && out[i] <= 'Z')
|
||||
out[i] = out[i] - 'A' + 'a';
|
||||
}
|
||||
}
|
||||
/* Optionally, output the name in DNSSEC canonical
|
||||
* format, as described in RFC 4034, section 6.2. Or
|
||||
* in other words: in lower-case. */
|
||||
if (canonical)
|
||||
ascii_strlower_n((char*) out, (size_t) r);
|
||||
|
||||
/* Fill label length, move forward */
|
||||
*label_length = r;
|
||||
|
|
Loading…
Reference in New Issue