On Thu, Jul 07, 2016 at 04:17:16PM +0200, aminkhorsa...@gmail.com wrote:
> From: Amin Khorsandi <amin.khorsa...@infinera.com>
> 
> ---
>  strace.1  |  5 +++++
>  syscall.c | 26 +++++++++++++++++++++++++-
>  2 files changed, 30 insertions(+), 1 deletion(-)
> 
> diff --git a/strace.1 b/strace.1
> index b7dddc0..c2088fa 100644
> --- a/strace.1
> +++ b/strace.1
> @@ -403,6 +403,11 @@ Furthermore, using the abbreviation will ensure that you 
> don't
>  accidentally forget to include a call like
>  .B lstat
>  in the list.  Betchya woulda forgot that one.
> +To see a list of all system calls in a class you can use
> +.BR "-e\ trace?" = classname .
> +For example you can see what are the system calls in the network
> +class running strace using the option
> +.BR "-e\ trace?" = network .

This extension of "-e trace=" syntax might appear to be confusing,
especially if it isn't consistent with traditional "-e trace=" syntax,
see below.

>  .TP
>  .BR "\-e\ trace" = process
>  Trace all system calls which involve process management.  This
> diff --git a/syscall.c b/syscall.c
> index c61f827..fb20f65 100644
> --- a/syscall.c
> +++ b/syscall.c
> @@ -503,6 +503,25 @@ lookup_class(const char *s)
>       return -1;
>  }
>  
> +static void
> +print_trace_class(const char* trace_class)
> +{
> +     unsigned int i;
> +     unsigned pers = 0; /* only print system calls in personality 0 */

Why?  Traditional "-e trace=" syntax is not limited to personality 0.

> +     int class = lookup_class(trace_class);

Traditional "-e trace=" syntax accepts lists.

> +
> +     if (class != -1) {
> +             printf("List of system calls in %s class\n", trace_class);
> +             printf("%s\n", "-------------------------------------");

Why printf instead of traditional fprintf(shared_log)?

> +             for (i = 0; i < nsyscall_vec[pers]; i++)
> +                     if (sysent_vec[pers][i].sys_flags & class) {
> +                     printf("\t%s \n", sysent_vec[pers][i].sys_name);
> +             }

This indentation is misleading.

> +     } else {
> +             error_msg_and_die("invalid class name '%s'", trace_class);
> +     }
> +}
> +
>  void
>  qualify(const char *s)
>  {
> @@ -518,7 +537,12 @@ qualify(const char *s)
>       opt = &qual_options[0];
>       for (i = 0; (p = qual_options[i].option_name); i++) {
>               unsigned int len = strlen(p);
> -             if (strncmp(s, p, len) == 0 && s[len] == '=') {
> +             if (strncmp(s, p, len) == 0 && s[len] == '?' && s[len + 1] == 
> '=') {
> +                     s += len + 2;
> +                     print_trace_class(s);
> +                     exit(0);

Traditional "-e trace=" syntax doesn't stop after the first option.

> +             }
> +             else if (strncmp(s, p, len) == 0 && s[len] == '=') {
>                       opt = &qual_options[i];
>                       s += len + 1;
>                       break;

In short, either this new extension should match traditional "-e trace="
syntax, or it shouldn't be called "-e trace?=".


-- 
ldv

Attachment: pgpXnGqlmBWFQ.pgp
Description: PGP signature

------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to