]> granicus.if.org Git - strace/commitdiff
Introduce get_sockaddr_by_inode
authorFabien Siron <fabien.siron@epita.fr>
Thu, 26 May 2016 10:46:28 +0000 (10:46 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 5 Jun 2017 11:52:11 +0000 (11:52 +0000)
Add a way to get socket information without printing it.

* defs.h (get_sockaddr_by_inode): New prototype.
* socketutils.c (get_sockaddr_by_inode): New function.

Co-authored-by: Dmitry V. Levin <ldv@altlinux.org>
defs.h
socketutils.c

diff --git a/defs.h b/defs.h
index 70ff07bcdba5bbeaad64654c9b6c741598faaff4..0837b9cec872a9fbf5a142259ce3d3ceaadee14a 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -596,6 +596,7 @@ printpath(struct tcb *, kernel_ulong_t addr);
                (sizeof(long long) * 3 * 2 + sizeof("{tv_sec=-, tv_nsec=}"))
 extern void printfd(struct tcb *, int);
 extern void print_sockaddr(struct tcb *tcp, const void *, int);
+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);
 
index a52f2656d4b0bfb3915b198e1a2e9d960d2e7f0b..a3aedb4e4d976fe924f9ec8115630b7bb3730919 100644 (file)
@@ -517,6 +517,16 @@ print_sockaddr_by_inode_uncached(const unsigned long inode,
        return false;
 }
 
+/* Given an inode number of a socket, return its protocol details.  */
+const char *
+get_sockaddr_by_inode(struct tcb *const tcp, const int fd,
+                     const unsigned long inode)
+{
+       const char *details = get_sockaddr_by_inode_cached(inode);
+       return details ? details :
+               get_sockaddr_by_inode_uncached(inode, getfdproto(tcp, fd));
+}
+
 /* Given an inode number of a socket, print out its protocol details.  */
 bool
 print_sockaddr_by_inode(struct tcb *const tcp, const int fd,