SOURCES: strace-fd.patch - more definitions
arekm
arekm at pld-linux.org
Sun Feb 22 14:46:03 CET 2009
Author: arekm Date: Sun Feb 22 13:46:03 2009 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- more definitions
---- Files affected:
SOURCES:
strace-fd.patch (1.1 -> 1.2)
---- Diffs:
================================================================
Index: SOURCES/strace-fd.patch
diff -u SOURCES/strace-fd.patch:1.1 SOURCES/strace-fd.patch:1.2
--- SOURCES/strace-fd.patch:1.1 Sun Feb 22 14:39:46 2009
+++ SOURCES/strace-fd.patch Sun Feb 22 14:45:57 2009
@@ -296,3 +296,120 @@
+ return do_signalfd(tcp, 3);
+}
#endif /* LINUX */
+commit feeceab4c8bfde6542d78048854c3bdc7ea9c99b
+Author: ldv <ldv>
+Date: Mon Nov 10 17:21:23 2008 +0000
+
+ 2008-10-22 Dmitry V. Levin <ldv at altlinux.org>
+
+ Handle socket type flags introduced in linux 2.6.27.
+ * net.c (socktypes): Add SOCK_DCCP.
+ (sock_type_flags): New xlat structure.
+ (tprint_sock_type): New function.
+ (sys_socket, sys_socketpair): Use it to parse socket type and
+ socket type flags.
+
+diff --git a/net.c b/net.c
+index c302b1f..f5426b2 100644
+--- a/net.c
++++ b/net.c
+@@ -27,7 +27,7 @@
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+- * $Id$
++ * $Id$
+ */
+
+ #include "defs.h"
+@@ -320,17 +320,32 @@ static const struct xlat socktypes[] = {
+ #ifdef SOCK_RAW
+ { SOCK_RAW, "SOCK_RAW" },
+ #endif
++#ifdef SOCK_RDM
++ { SOCK_RDM, "SOCK_RDM" },
++#endif
+ #ifdef SOCK_SEQPACKET
+ { SOCK_SEQPACKET,"SOCK_SEQPACKET"},
+ #endif
+-#ifdef SOCK_RDM
+- { SOCK_RDM, "SOCK_RDM" },
++#ifdef SOCK_DCCP
++ { SOCK_DCCP, "SOCK_DCCP" },
+ #endif
+ #ifdef SOCK_PACKET
+ { SOCK_PACKET, "SOCK_PACKET" },
+ #endif
+ { 0, NULL },
+ };
++const struct xlat sock_type_flags[] = {
++#ifdef SOCK_CLOEXEC
++ { SOCK_CLOEXEC, "SOCK_CLOEXEC" },
++#endif
++#ifdef SOCK_NONBLOCK
++ { SOCK_NONBLOCK,"SOCK_NONBLOCK" },
++#endif
++ { 0, NULL },
++};
++#ifndef SOCK_TYPE_MASK
++# define SOCK_TYPE_MASK 0xf
++#endif
+ static const struct xlat socketlayers[] = {
+ #if defined(SOL_IP)
+ { SOL_IP, "SOL_IP" },
+@@ -1182,14 +1197,33 @@ long addr;
+
+ #endif /* HAVE_SENDMSG */
+
++/*
++ * low bits of the socket type define real socket type,
++ * other bits are socket type flags.
++ */
++static void
++tprint_sock_type(struct tcb *tcp, int flags)
++{
++ const char *str = xlookup(socktypes, flags & SOCK_TYPE_MASK);
++
++ if (str)
++ {
++ tprintf("%s", str);
++ flags &= ~SOCK_TYPE_MASK;
++ if (!flags)
++ return;
++ tprintf("|");
++ }
++ printflags(sock_type_flags, flags, "SOCK_???");
++}
++
+ int
+-sys_socket(tcp)
+-struct tcb *tcp;
++sys_socket(struct tcb *tcp)
+ {
+ if (entering(tcp)) {
+ printxval(domains, tcp->u_arg[0], "PF_???");
+ tprintf(", ");
+- printxval(socktypes, tcp->u_arg[1], "SOCK_???");
++ tprint_sock_type(tcp, tcp->u_arg[1]);
+ tprintf(", ");
+ switch (tcp->u_arg[0]) {
+ case PF_INET:
+@@ -1489,8 +1523,7 @@ struct tcb *tcp;
+ }
+
+ int
+-sys_socketpair(tcp)
+-struct tcb *tcp;
++sys_socketpair(struct tcb *tcp)
+ {
+ #ifdef LINUX
+ int fds[2];
+@@ -1499,7 +1532,7 @@ struct tcb *tcp;
+ if (entering(tcp)) {
+ printxval(domains, tcp->u_arg[0], "PF_???");
+ tprintf(", ");
+- printxval(socktypes, tcp->u_arg[1], "SOCK_???");
++ tprint_sock_type(tcp, tcp->u_arg[1]);
+ tprintf(", ");
+ switch (tcp->u_arg[0]) {
+ case PF_INET:
================================================================
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/strace-fd.patch?r1=1.1&r2=1.2&f=u
More information about the pld-cvs-commit
mailing list