Files
systemd/src/shared
Marc-Antoine Perennou 57827c087c fix in_addr_prefix_intersect for 32bits
shifting from a non fixed number of bits >= to the size of the type
leads to weird results, handle the special case of << 32 to fix it.

This was causing a test failure from test-socket-util:
Assertion 'in_addr_prefix_intersect(f, &ua, apl, &ub, bpl) == result' failed at
/var/tmp/paludis/build/sys-apps-systemd-scm/work/systemd-scm/src/test/test-socket-util.c:147, function
test_in_addr_prefix_intersect_one(). Aborting.

Minimal reproducer:

paludisbuild@Lou /tmp $ cat test.c
static void test(unsigned m) {
        unsigned nm = 0xFFFFFFFFUL << (32-m);
        printf("%u: %x\n", m, nm);
}

int main (void) {
        test(1);
        test(0);
        return 0;
}
paludisbuild@Lou /tmp $ gcc -m32 -std=gnu99 test.c -o test32
paludisbuild@Lou /tmp $ ./test32
1: 80000000
0: ffffffff
paludisbuild@Lou /tmp $ gcc -std=gnu99 test.c -o test64
paludisbuild@Lou /tmp $ ./test64
1: 80000000
0: 0
2014-06-22 12:26:09 -04:00
..
2014-02-12 18:30:36 +01:00
2014-02-19 17:53:50 +01:00
2014-03-04 21:06:05 +01:00
2014-03-04 21:06:05 +01:00
…
2014-02-19 17:53:50 +01:00
2014-04-28 08:15:50 +02:00
2014-05-15 15:29:58 +02:00
2014-03-19 16:25:11 +01:00
…
…
…
2014-04-12 17:23:13 -04:00
…
…
2014-06-16 15:22:46 +02:00
…
2014-06-20 22:05:43 -04:00
…
…
…
2014-02-21 18:42:14 +01:00
…
…
2014-05-13 22:08:13 +02:00
2014-05-13 22:08:13 +02:00
…
…
…
…
…
2014-02-24 19:24:14 -05:00
2014-06-17 01:24:03 +02:00
2014-06-06 19:41:24 +02:00
2014-06-06 19:41:24 +02:00