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;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char ascii_tolower(char x) {
|
||||||
|
|
||||||
|
if (x >= 'A' && x <= 'Z')
|
||||||
|
return x - 'A' + 'a';
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
char *ascii_strlower(char *t) {
|
char *ascii_strlower(char *t) {
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
assert(t);
|
assert(t);
|
||||||
|
|
||||||
for (p = t; *p; p++)
|
for (p = t; *p; p++)
|
||||||
if (*p >= 'A' && *p <= 'Z')
|
*p = ascii_tolower(*p);
|
||||||
*p = *p - 'A' + 'a';
|
|
||||||
|
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;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,7 +130,9 @@ char *strstrip(char *s);
|
||||||
char *delete_chars(char *s, const char *bad);
|
char *delete_chars(char *s, const char *bad);
|
||||||
char *truncate_nl(char *s);
|
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_;
|
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;
|
return -ENOBUFS;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
size_t i;
|
|
||||||
|
|
||||||
r = dns_label_unescape(&n, buffer, buffer_max);
|
r = dns_label_unescape(&n, buffer, buffer_max);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -918,11 +916,7 @@ int dnssec_canonicalize(const char *n, char *buffer, size_t buffer_max) {
|
||||||
if (memchr(buffer, '.', r))
|
if (memchr(buffer, '.', r))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
for (i = 0; i < (size_t) r; i ++) {
|
ascii_strlower_n(buffer, (size_t) r);
|
||||||
if (buffer[i] >= 'A' && buffer[i] <= 'Z')
|
|
||||||
buffer[i] = buffer[i] - 'A' + 'a';
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer[r] = '.';
|
buffer[r] = '.';
|
||||||
|
|
||||||
buffer += r + 1;
|
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
|
/* Generate in canonical form, as defined by DNSSEC
|
||||||
* RFC 4034, Section 6.2, i.e. all lower-case. */
|
* RFC 4034, Section 6.2, i.e. all lower-case. */
|
||||||
|
|
||||||
for (i = 0; i < l; i++) {
|
for (i = 0; i < l; i++)
|
||||||
if (d[i] >= 'A' && d[i] <= 'Z')
|
w[i] = (uint8_t) ascii_tolower(d[i]);
|
||||||
w[i] = (uint8_t) (d[i] - 'A' + 'a');
|
|
||||||
else
|
|
||||||
w[i] = (uint8_t) d[i];
|
|
||||||
}
|
|
||||||
} else
|
} else
|
||||||
/* Otherwise, just copy the string unaltered. This is
|
/* Otherwise, just copy the string unaltered. This is
|
||||||
* essential for DNS-SD, where the casing of labels
|
* 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)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
if (canonical) {
|
/* Optionally, output the name in DNSSEC canonical
|
||||||
size_t i;
|
* format, as described in RFC 4034, section 6.2. Or
|
||||||
|
* in other words: in lower-case. */
|
||||||
/* Optionally, output the name in DNSSEC
|
if (canonical)
|
||||||
* canonical format, as described in RFC 4034,
|
ascii_strlower_n((char*) out, (size_t) r);
|
||||||
* 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';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Fill label length, move forward */
|
/* Fill label length, move forward */
|
||||||
*label_length = r;
|
*label_length = r;
|
||||||
|
|
Loading…
Reference in a new issue