hrev45762 adds 1 changeset to branch 'master' old head: 819b397354dc2452cc649ff2e269c8542398b091 new head: 24110ddab59dd5542e33e3e476cc271969324063 overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=24110dd+%5E819b397 ---------------------------------------------------------------------------- 24110dd: Route: Don't call null function pointers * Regression from hrev38233 (2010 baby!) * If no netmask, don't print anything vs showing uninitialized data. * Introduce "worst case address length" information per network family. * Fixes #9821 [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev45762 Commit: 24110ddab59dd5542e33e3e476cc271969324063 URL: http://cgit.haiku-os.org/haiku/commit/?id=24110dd Author: Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> Date: Sat Jun 15 06:24:15 2013 UTC Ticket: https://dev.haiku-os.org/ticket/9821 ---------------------------------------------------------------------------- 1 file changed, 22 insertions(+), 34 deletions(-) src/bin/network/route/route.cpp | 56 +++++++++++++++---------------------- ---------------------------------------------------------------------------- diff --git a/src/bin/network/route/route.cpp b/src/bin/network/route/route.cpp index 9989d03..7e37bcd 100644 --- a/src/bin/network/route/route.cpp +++ b/src/bin/network/route/route.cpp @@ -1,9 +1,10 @@ /* - * Copyright 2006-2010, Haiku, Inc. All Rights Reserved. + * Copyright 2006-2013, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: * Axel Dörfler, axeld@xxxxxxxxxxxxxxxx + * Alexander von Gluck <kallisti5@xxxxxxxxxxx> */ @@ -48,11 +49,7 @@ struct address_family { int family; const char* name; const char* identifiers[4]; - preferred_output_format preferred_format; - bool (*parse_address)(const char* string, sockaddr* _address); - bool (*prefix_length_to_mask)(uint8 prefixLength, sockaddr* mask); - uint8 (*mask_to_prefix_length)(sockaddr* mask); - const char* (*address_to_string)(sockaddr* address); + uint32 maxLength; }; @@ -61,15 +58,15 @@ static const address_family kFamilies[] = { AF_INET, "inet", {"AF_INET", "inet", "ipv4", NULL}, - PREFER_OUTPUT_MASK, + 15, }, { AF_INET6, "inet6", {"AF_INET6", "inet6", "ipv6", NULL}, - PREFER_OUTPUT_PREFIX_LENGTH, + 39, }, - { -1, NULL, {NULL}, PREFER_OUTPUT_MASK, NULL, NULL, NULL, NULL } + { -1, NULL, {NULL} } }; @@ -204,20 +201,16 @@ list_routes(int socket, const char *interfaceName, route_entry &route) if (family != NULL) { BNetworkAddress destination(*route.destination); - BNetworkAddress mask; - if (route.mask != NULL) - mask.SetTo(*route.mask); - // TODO: is the %15s format OK for IPv6? printf("%15s", destination.ToString().String()); - switch (family->preferred_format) { - case PREFER_OUTPUT_MASK: - printf(" mask %-15s ", mask.ToString().String()); - break; - case PREFER_OUTPUT_PREFIX_LENGTH: - printf("/%zd ", mask.PrefixLength()); - break; - } + + if (route.mask != NULL) { + BNetworkAddress mask; + mask.SetTo(*route.mask); + printf("/%zd\t", mask.PrefixLength()); + } else + printf(" \t"); + if ((route.flags & RTF_GATEWAY) != 0) { BNetworkAddress gateway; if (route.gateway != NULL) @@ -334,22 +327,17 @@ get_route(int socket, route_entry &route) } if (family != NULL) { - printf("%s", family->address_to_string(request.destination)); - switch (family->preferred_format) { - case PREFER_OUTPUT_MASK: - printf(" mask %s ", - family->address_to_string(request.mask)); - break; - case PREFER_OUTPUT_PREFIX_LENGTH: - printf("/%u ", - family->mask_to_prefix_length(request.mask)); - break; - } + BNetworkAddress destination(*request.destination); + BNetworkAddress mask(*request.mask); + printf("%s", destination.ToString().String()); + printf("/%zd ", mask.PrefixLength()); + BNetworkAddress gateway(*request.gateway); if (request.flags & RTF_GATEWAY) - printf("gateway %s ", family->address_to_string(request.gateway)); + printf("gateway %s ", gateway.ToString().String()); - printf("source %s\n", family->address_to_string(request.source)); + BNetworkAddress source(*request.source); + printf("source %s\n", source.ToString().String()); } else { printf("unknown family "); }