On Wed, Jun 15, 2016 at 12:42:59PM +0000, Fabien Siron wrote:
> This commit aims to avoid future string comparisons with getfdproto function
> in changing its return type. It also adapts the functions that use it.

I'm not quite sure what does the first sentence mean.

> * defs.h (print_sockaddr_by_inode, get_proto_by_name): Add.

Only get_proto_by_name is a new prototype, print_sockaddr_by_inode was
there before the change.

> (sock_proto): New enum.
> * socketutils.c (print_sockaddr_by_inode): Move proto to int.

I'm not quite sure what does "Move proto to int" mean.

> (get_proto_by_name): New function.
> (protocols): New static table.
> * util.c (getfdproto): Return sock_proto instead of string.
> (printfd): Change type of proto.
> ---
>  defs.h        | 13 +++++++++++-
>  socketutils.c | 63 
> ++++++++++++++++++++++++++++++++++++-----------------------
>  util.c        | 20 ++++++++++---------
>  3 files changed, 62 insertions(+), 34 deletions(-)
> 
> diff --git a/defs.h b/defs.h
> index 724d4f3..ab06921 100644
> --- a/defs.h
> +++ b/defs.h
> @@ -431,6 +431,17 @@ extern const struct xlat whence_codes[];
>  # define NEED_UID16_PARSERS 0
>  #endif
>  
> +enum sock_proto {
> +     SOCK_PROTO_UNKNOWN,
> +     SOCK_PROTO_UNIX,
> +     SOCK_PROTO_TCP,
> +     SOCK_PROTO_UDP,
> +     SOCK_PROTO_TCPv6,
> +     SOCK_PROTO_UDPv6,
> +     SOCK_PROTO_NETLINK
> +};
> +extern enum sock_proto get_proto_by_name(const char *const name);

(const char *) is enough

>  typedef enum {
>       CFLAG_NONE = 0,
>       CFLAG_ONLY_STATS,
> @@ -630,7 +641,7 @@ extern void printpathn(struct tcb *, long, unsigned int);
>  #define TIMESPEC_TEXT_BUFSIZE \
>               (sizeof(intmax_t)*3 * 2 + sizeof("{tv_sec=%jd, tv_nsec=%jd}"))
>  extern void printfd(struct tcb *, int);
> -extern bool print_sockaddr_by_inode(const unsigned long, const char *);
> +extern bool print_sockaddr_by_inode(const unsigned long, const enum 
> sock_proto);
>  extern bool print_sockaddr_by_inode_cached(const unsigned long);
>  extern void print_dirfd(struct tcb *, int);
>  extern void printsock(struct tcb *, long, int);
> diff --git a/socketutils.c b/socketutils.c
> index 5d8d3ed..4a39522 100644
> --- a/socketutils.c
> +++ b/socketutils.c
> @@ -438,44 +438,59 @@ netlink_print(const int fd, const unsigned long inode)
>                                    netlink_parse_response);
>  }
>  
> +static const struct {
> +     const char *const name;
> +     bool (*const print)(int, unsigned long);
> +} protocols[] = {
> +     [SOCK_PROTO_UNIX] = { "UNIX", unix_print },
> +     [SOCK_PROTO_TCP] = { "TCP", tcp_v4_print },
> +     [SOCK_PROTO_UDP] = { "UDP", udp_v4_print },
> +     [SOCK_PROTO_TCPv6] = { "TCPv6", tcp_v6_print },
> +     [SOCK_PROTO_UDPv6] = { "UDPv6", udp_v6_print },
> +     [SOCK_PROTO_NETLINK] = { "NETLINK", netlink_print }
> +};
> +
>  /* Given an inode number of a socket, print out the details
>   * of the ip address and port. */
> +
> +enum sock_proto
> +get_proto_by_name(const char *const name)
> +{
> +     unsigned int i;
> +     for (i = (unsigned int) SOCK_PROTO_UNKNOWN + 1;
> +          i < ARRAY_SIZE(protocols); ++i) {
> +             if (protocols[i].name && !strcmp(name, protocols[i].name))
> +                     return (enum sock_proto) i;
> +     }
> +     return SOCK_PROTO_UNKNOWN;
> +}

Please don't insert a new function between print_sockaddr_by_inode and its
description.


-- 
ldv

Attachment: pgp6HLI4TYUcn.pgp
Description: PGP signature

------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity planning
reports. http://pubads.g.doubleclick.net/gampad/clk?id=1444514421&iu=/41014381
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to