chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
loginctl: show the 10 most recent log user/session log lines in "loginctl user-status...
[elogind.git]
/
src
/
shared
/
in-addr-util.c
diff --git
a/src/shared/in-addr-util.c
b/src/shared/in-addr-util.c
index 5fbee6caf2fcbf0562c6b35b83eba3cb92f7ec3b..9dc9ec82b484eb4c97976ab1de7d50cf9561eff0 100644
(file)
--- a/
src/shared/in-addr-util.c
+++ b/
src/shared/in-addr-util.c
@@
-250,21
+250,20
@@
unsigned in_addr_netmask_to_prefixlen(const struct in_addr *addr) {
}
int in_addr_default_prefixlen(const struct in_addr *addr, unsigned char *prefixlen) {
}
int in_addr_default_prefixlen(const struct in_addr *addr, unsigned char *prefixlen) {
- uint32_t address;
+ uint8_t msb_octet = *(uint8_t*) addr;
+
+ /* addr may not be aligned, so make sure we only access it byte-wise */
assert(addr);
assert(addr);
- assert(addr->s_addr != INADDR_ANY);
assert(prefixlen);
assert(prefixlen);
- address = be32toh(addr->s_addr);
-
- if ((address >> 31) == 0x0)
+ if (msb_octet < 128)
/* class A, leading bits: 0 */
*prefixlen = 8;
/* class A, leading bits: 0 */
*prefixlen = 8;
- else if (
(address >> 30) == 0x
2)
+ else if (
msb_octet < 19
2)
/* class B, leading bits 10 */
*prefixlen = 16;
/* class B, leading bits 10 */
*prefixlen = 16;
- else if (
(address >> 29) == 0x6
)
+ else if (
msb_octet < 224
)
/* class C, leading bits 110 */
*prefixlen = 24;
else
/* class C, leading bits 110 */
*prefixlen = 24;
else