Add support for Windriver's Diab v4 (stricter C89)

This commit is contained in:
Sergio R. Caprile committed 2025-12-04 13:58:49 -03:00
1 parent 4717a15c17
commit 5b023cb85b
19 files changed
+347 -215

No files matched your search

+13 -13
View File
@@ -31,14 +31,14 @@ size_t mg_printf(struct mg_connection *c, const char *fmt, ...) {
static bool mg_atonl(struct mg_str str, struct mg_addr *addr) {
uint32_t localhost = mg_htonl(0x7f000001);
if (mg_strcasecmp(str, mg_str("localhost")) != 0) return false;
memcpy(addr->ip, &localhost, sizeof(uint32_t));
memcpy(addr->addr.ip, &localhost, sizeof(uint32_t));
addr->is_ip6 = false;
return true;
}
static bool mg_atone(struct mg_str str, struct mg_addr *addr) {
if (str.len > 0) return false;
memset(addr->ip, 0, sizeof(addr->ip));
memset(addr->addr.ip, 0, sizeof(addr->addr.ip));
addr->is_ip6 = false;
return true;
}
@@ -59,7 +59,7 @@ static bool mg_aton4(struct mg_str str, struct mg_addr *addr) {
}
}
if (num_dots != 3 || str.buf[i - 1] == '.') return false;
memcpy(&addr->ip, data, sizeof(data));
memcpy(&addr->addr.ip, data, sizeof(data));
addr->is_ip6 = false;
return true;
}
@@ -74,10 +74,10 @@ static bool mg_v4mapped(struct mg_str str, struct mg_addr *addr) {
}
// struct mg_str s = mg_str_n(&str.buf[7], str.len - 7);
if (!mg_aton4(mg_str_n(&str.buf[7], str.len - 7), addr)) return false;
memcpy(&ipv4, addr->ip, sizeof(ipv4));
memset(addr->ip, 0, sizeof(addr->ip));
addr->ip[10] = addr->ip[11] = 255;
memcpy(&addr->ip[12], &ipv4, 4);
memcpy(&ipv4, addr->addr.ip, sizeof(ipv4));
memset(addr->addr.ip, 0, sizeof(addr->addr.ip));
addr->addr.ip[10] = addr->addr.ip[11] = 255;
memcpy(&addr->addr.ip[12], &ipv4, 4);
addr->is_ip6 = true;
return true;
}
@@ -95,8 +95,8 @@ static bool mg_aton6(struct mg_str str, struct mg_addr *addr) {
if (i > j + 3) return false;
// MG_DEBUG(("%lu %lu [%.*s]", i, j, (int) (i - j + 1), &str.buf[j]));
mg_str_to_num(mg_str_n(&str.buf[j], i - j + 1), 16, &val, sizeof(val));
addr->ip[n] = (uint8_t) ((val >> 8) & 255);
addr->ip[n + 1] = (uint8_t) (val & 255);
addr->addr.ip[n] = (uint8_t) ((val >> 8) & 255);
addr->addr.ip[n + 1] = (uint8_t) (val & 255);
} else if (str.buf[i] == ':') {
j = i + 1;
if (i > 0 && str.buf[i - 1] == ':') {
@@ -106,8 +106,8 @@ static bool mg_aton6(struct mg_str str, struct mg_addr *addr) {
n += 2;
}
if (n > 14) return false;
addr->ip[n] = addr->ip[n + 1] = 0; // For trailing ::
} else if (str.buf[i] == '%') { // Scope ID, last in string
addr->addr.ip[n] = addr->addr.ip[n + 1] = 0; // For trailing ::
} else if (str.buf[i] == '%') { // Scope ID, last in string
if (mg_str_to_num(mg_str_n(&str.buf[i + 1], str.len - i - 1), 10,
&addr->scope_id, sizeof(uint8_t))) {
addr->is_ip6 = true;
@@ -121,8 +121,8 @@ static bool mg_aton6(struct mg_str str, struct mg_addr *addr) {
}
if (n < 14 && dc == 42) return false;
if (n < 14) {
memmove(&addr->ip[dc + (14 - n)], &addr->ip[dc], n - dc + 2);
memset(&addr->ip[dc], 0, 14 - n);
memmove(&addr->addr.ip[dc + (14 - n)], &addr->addr.ip[dc], n - dc + 2);
memset(&addr->addr.ip[dc], 0, 14 - n);
}
addr->is_ip6 = true;