Returning the buffer allows using it in the logging functions
in easier way. This also makes the API consistent with sockunion.

Add also PREFIX_STRLEN to be the generic buffer length required
for any prefix string representation.

Signed-off-by: Timo Teräs <[email protected]>
---
 lib/prefix.c  | 7 ++++---
 lib/prefix.h  | 5 ++++-
 lib/zclient.c | 6 +++---
 3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/lib/prefix.c b/lib/prefix.c
index 57cf12a..63742f3 100644
--- a/lib/prefix.c
+++ b/lib/prefix.c
@@ -760,14 +760,15 @@ str2prefix (const char *str, struct prefix *p)
   return 0;
 }
 
-int
-prefix2str (const struct prefix *p, char *str, int size)
+const char *
+prefix2str (union prefix46constptr pu, char *str, int size)
 {
+  const struct prefix *p = pu.p;
   char buf[BUFSIZ];
 
   inet_ntop (p->family, &p->u.prefix, buf, BUFSIZ);
   snprintf (str, size, "%s/%d", buf, p->prefixlen);
-  return 0;
+  return str;
 }
 
 struct prefix *
diff --git a/lib/prefix.h b/lib/prefix.h
index 404a63a..bc8aebc 100644
--- a/lib/prefix.h
+++ b/lib/prefix.h
@@ -129,6 +129,9 @@ union prefix46constptr
 #define INET6_BUFSIZ 51
 #endif /* INET6_BUFSIZ */
 
+/* Maximum prefix string length (IPv6) */
+#define PREFIX_STRLEN 51
+
 /* Max bit/byte length of IPv4 address. */
 #define IPV4_MAX_BYTELEN    4
 #define IPV4_MAX_BITLEN    32
@@ -179,7 +182,7 @@ extern void prefix_free (struct prefix *);
 extern const char *prefix_family_str (const struct prefix *);
 extern int prefix_blen (const struct prefix *);
 extern int str2prefix (const char *, struct prefix *);
-extern int prefix2str (const struct prefix *, char *, int);
+extern const char *prefix2str (union prefix46constptr, char *, int);
 extern int prefix_match (const struct prefix *, const struct prefix *);
 extern int prefix_same (const struct prefix *, const struct prefix *);
 extern int prefix_cmp (const struct prefix *, const struct prefix *);
diff --git a/lib/zclient.c b/lib/zclient.c
index 21cdc94..329a2de 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -809,11 +809,11 @@ zebra_interface_address_read (int type, struct stream *s)
           else if (CHECK_FLAG(ifc->flags, ZEBRA_IFA_PEER))
             {
               /* carp interfaces on OpenBSD with 0.0.0.0/0 as "peer" */
-              char buf[BUFSIZ];
-              prefix2str (ifc->address, buf, sizeof(buf));
+              char buf[PREFIX_STRLEN];
               zlog_warn("warning: interface %s address %s "
                    "with peer flag set, but no peer address!",
-                   ifp->name, buf);
+                   ifp->name,
+                   prefix2str (ifc->address, buf, sizeof buf));
               UNSET_FLAG(ifc->flags, ZEBRA_IFA_PEER);
             }
         }
-- 
2.4.1


_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to