* defs.h (decode_inet_addr): New prototype.
* netlink_inet_diag.c (decode_inet_addr): Remove static keyword, move ...
* sockaddr.c: ... here.
extern void print_sockaddr(const void *sa, int len);
extern bool
print_inet_addr(int af, const void *addr, unsigned int len, const char *var_name);
+extern bool
+decode_inet_addr(struct tcb *, kernel_ulong_t addr,
+ unsigned int len, int family, const char *var_name);
extern const char *get_sockaddr_by_inode(struct tcb *, int fd, unsigned long inode);
extern bool print_sockaddr_by_inode(struct tcb *, int fd, unsigned long inode);
extern void print_dirfd(struct tcb *, int);
tprints("}");
}
-static bool
-decode_inet_addr(struct tcb *const tcp,
- const kernel_ulong_t addr,
- const unsigned int len,
- const int family,
- const char *const var_name)
-{
- union {
- struct in_addr a4;
- struct in6_addr a6;
- } addrbuf;
- size_t size = 0;
-
- switch (family) {
- case AF_INET:
- size = sizeof(addrbuf.a4);
- break;
- case AF_INET6:
- size = sizeof(addrbuf.a6);
- break;
- }
-
- if (!size || len < size) {
- if (var_name)
- tprintf("%s=", var_name);
- printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
- return false;
- }
-
- if (umoven(tcp, addr, size, &addrbuf) < 0) {
- if (var_name)
- tprintf("%s=", var_name);
- printaddr(addr);
- return false;
- }
-
- return print_inet_addr(family, &addrbuf, size, var_name);
-}
-
static void
decode_inet_diag_hostcond(struct tcb *const tcp,
const kernel_ulong_t addr,
return false;
}
+bool
+decode_inet_addr(struct tcb *const tcp,
+ const kernel_ulong_t addr,
+ const unsigned int len,
+ const int family,
+ const char *const var_name)
+{
+ union {
+ struct in_addr a4;
+ struct in6_addr a6;
+ } addrbuf;
+ size_t size = 0;
+
+ switch (family) {
+ case AF_INET:
+ size = sizeof(addrbuf.a4);
+ break;
+ case AF_INET6:
+ size = sizeof(addrbuf.a6);
+ break;
+ }
+
+ if (!size || len < size) {
+ if (var_name)
+ tprintf("%s=", var_name);
+ printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX);
+ return false;
+ }
+
+ if (umoven(tcp, addr, size, &addrbuf) < 0) {
+ if (var_name)
+ tprintf("%s=", var_name);
+ printaddr(addr);
+ return false;
+ }
+
+ return print_inet_addr(family, &addrbuf, size, var_name);
+}
+
static void
print_sockaddr_data_in(const void *const buf, const int addrlen)
{