added message_args decoding support to strace (used by net_stack's RECEIVE/SEND).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20595 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -359,12 +359,28 @@ format_pointer(Context &context, socket_args *args)
|
|||||||
static string
|
static string
|
||||||
get_iovec(Context &context, iovec *iov, int iovlen)
|
get_iovec(Context &context, iovec *iov, int iovlen)
|
||||||
{
|
{
|
||||||
|
if (iov == NULL && iovlen == 0)
|
||||||
|
return "(empty)";
|
||||||
|
|
||||||
string r = "{";
|
string r = "{";
|
||||||
r += context.FormatPointer(iov);
|
r += context.FormatPointer(iov);
|
||||||
r += ", " + context.FormatSigned(iovlen);
|
r += ", " + context.FormatSigned(iovlen);
|
||||||
return r + "}";
|
return r + "}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static string
|
||||||
|
format_pointer(Context &context, message_args *msg)
|
||||||
|
{
|
||||||
|
string r;
|
||||||
|
|
||||||
|
r += "header = " + format_pointer_value<msghdr>(context, msg->header);
|
||||||
|
r += ", flags = " + context.FormatFlags(msg->flags);
|
||||||
|
r += ", data = " + context.FormatPointer(msg->data);
|
||||||
|
r += ", length = " + context.FormatUnsigned(msg->length);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
static string
|
static string
|
||||||
format_pointer(Context &context, msghdr *h)
|
format_pointer(Context &context, msghdr *h)
|
||||||
{
|
{
|
||||||
@@ -373,8 +389,10 @@ format_pointer(Context &context, msghdr *h)
|
|||||||
r = "name = " + format_pointer_value<sockaddr>(context, h->msg_name);
|
r = "name = " + format_pointer_value<sockaddr>(context, h->msg_name);
|
||||||
r += ", name_len = " + context.FormatUnsigned(h->msg_namelen);
|
r += ", name_len = " + context.FormatUnsigned(h->msg_namelen);
|
||||||
r += ", iov = " + get_iovec(context, h->msg_iov, h->msg_iovlen);
|
r += ", iov = " + get_iovec(context, h->msg_iov, h->msg_iovlen);
|
||||||
r += ", control = " + context.FormatPointer(h->msg_control);
|
if (h->msg_control != NULL || h->msg_controllen != 0) {
|
||||||
r += ", control_len = " + context.FormatUnsigned(h->msg_controllen);
|
r += ", control = " + context.FormatPointer(h->msg_control);
|
||||||
|
r += ", control_len = " + context.FormatUnsigned(h->msg_controllen);
|
||||||
|
}
|
||||||
r += ", flags = " + context.FormatFlags(h->msg_flags);
|
r += ", flags = " + context.FormatFlags(h->msg_flags);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
@@ -461,9 +479,10 @@ class SpecializedPointerTypeHandler : public TypeHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_TYPE(fdset_ptr, fd_set *);
|
DEFINE_TYPE(fdset_ptr, fd_set *);
|
||||||
|
POINTER_TYPE(ifconf_ptr, ifconf);
|
||||||
|
POINTER_TYPE(ifreq_ptr, ifreq);
|
||||||
|
POINTER_TYPE(message_args_ptr, message_args);
|
||||||
|
POINTER_TYPE(msghdr_ptr, msghdr);
|
||||||
POINTER_TYPE(sockaddr_args_ptr, sockaddr_args);
|
POINTER_TYPE(sockaddr_args_ptr, sockaddr_args);
|
||||||
POINTER_TYPE(sockopt_args_ptr, sockopt_args);
|
POINTER_TYPE(sockopt_args_ptr, sockopt_args);
|
||||||
POINTER_TYPE(socket_args_ptr, socket_args);
|
POINTER_TYPE(socket_args_ptr, socket_args);
|
||||||
POINTER_TYPE(msghdr_ptr, msghdr);
|
|
||||||
POINTER_TYPE(ifreq_ptr, ifreq);
|
|
||||||
POINTER_TYPE(ifconf_ptr, ifconf);
|
|
||||||
|
|||||||
@@ -100,16 +100,18 @@ struct TypeHandlerFactory<const char*> {
|
|||||||
struct fd_set;
|
struct fd_set;
|
||||||
struct ifconf;
|
struct ifconf;
|
||||||
struct ifreq;
|
struct ifreq;
|
||||||
|
struct message_args;
|
||||||
struct sockaddr_args;
|
struct sockaddr_args;
|
||||||
struct socket_args;
|
struct socket_args;
|
||||||
struct sockopt_args;
|
struct sockopt_args;
|
||||||
|
|
||||||
DEFINE_FACTORY(fdset_ptr, fd_set *);
|
DEFINE_FACTORY(fdset_ptr, fd_set *);
|
||||||
DEFINE_FACTORY(sockaddr_args_ptr, sockaddr_args *);
|
|
||||||
DEFINE_FACTORY(sockopt_args_ptr, sockopt_args *);
|
|
||||||
DEFINE_FACTORY(socket_args_ptr, socket_args *);
|
|
||||||
DEFINE_FACTORY(ifreq_ptr, ifreq *);
|
|
||||||
DEFINE_FACTORY(ifconf_ptr, ifconf *);
|
DEFINE_FACTORY(ifconf_ptr, ifconf *);
|
||||||
|
DEFINE_FACTORY(ifreq_ptr, ifreq *);
|
||||||
|
DEFINE_FACTORY(message_args_ptr, message_args *);
|
||||||
|
DEFINE_FACTORY(sockaddr_args_ptr, sockaddr_args *);
|
||||||
|
DEFINE_FACTORY(socket_args_ptr, socket_args *);
|
||||||
|
DEFINE_FACTORY(sockopt_args_ptr, sockopt_args *);
|
||||||
|
|
||||||
DEFINE_FACTORY(int_ptr, int *);
|
DEFINE_FACTORY(int_ptr, int *);
|
||||||
DEFINE_FACTORY(long_ptr, long *);
|
DEFINE_FACTORY(long_ptr, long *);
|
||||||
|
|||||||
Reference in New Issue
Block a user