]> granicus.if.org Git - strace/commitdiff
Added switch for printing only succeeding syscalls.
authorMichal Ludvig <mludvig@suse.cz>
Wed, 6 Nov 2002 13:17:21 +0000 (13:17 +0000)
committerMichal Ludvig <mludvig@suse.cz>
Wed, 6 Nov 2002 13:17:21 +0000 (13:17 +0000)
ChangeLog
defs.h
strace.c
syscall.c

index 43c16a0952fdbb3e7cef77131a99d2745bc209e7..5e8ade9de30ca63b8e8e55210e1ad5261bff96f8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2002-11-06  Michal Ludvig  <mludvig@suse.cz>
+
+       From Marty Leisner <leisner@rochester.rr.com>, 
+       rewritten my mludvig:
+       * strace.c (not_failing_only): New.
+       (usage): Added -z switch description.
+       (main): Added -z switch parsing to not_failing_only variable.
+       * syscall.c (trace_syscall): Added not_failing_only handling.
+
 2002-10-08  Heiko Carstens <heiko.carstens@de.ibm.com>
 
        Missing complete changelog for 2002-10-07 commit:
diff --git a/defs.h b/defs.h
index 74c9fb1a762ce5c222bd6b30779f88938a3a617f..43036852aef7dfed7174a544e136d417635ceb9e 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -553,3 +553,5 @@ do {                                                                        \
 #ifdef IA64
 extern long ia32;
 #endif
+
+extern int not_failing_only;
index 9d1f4270bc47eea5e42ddf32521d6fa38ab4edc5..15aea5aae762df3cf5a5b34900d8491d59228a62 100644 (file)
--- a/strace.c
+++ b/strace.c
@@ -67,6 +67,9 @@ int rflag = 0, tflag = 0, dtime = 0, cflag = 0;
 int iflag = 0, xflag = 0, qflag = 0;
 int pflag_seen = 0;
 
+/* Sometimes we want to print only succeeding syscalls. */
+int not_failing_only = 0;
+
 char *username = NULL;
 uid_t run_uid;
 gid_t run_gid;
@@ -154,6 +157,7 @@ usage: strace [-dffhiqrtttTvVxx] [-a column] [-e expr] ... [-o file]\n\
 -s strsize -- limit length of print strings to STRSIZE chars (default %d)\n\
 -S sortby -- sort syscall counts by: time, calls, name, nothing (default %s)\n\
 -u username -- run command as username handling setuid and/or setgid\n\
+-z -- print only succeeding syscalls\n\
 ", DEFAULT_ACOLUMN, DEFAULT_STRLEN, DEFAULT_SORTBY);
        exit(exitval);
 }
@@ -190,7 +194,7 @@ char *argv[];
        set_sortby(DEFAULT_SORTBY);
        set_personality(DEFAULT_PERSONALITY);
        while ((c = getopt(argc, argv,
-               "+cdfFhiqrtTvVxa:e:o:O:p:s:S:u:")) != EOF) {
+               "+cdfFhiqrtTvVxza:e:o:O:p:s:S:u:")) != EOF) {
                switch (c) {
                case 'c':
                        cflag++;
@@ -234,6 +238,9 @@ char *argv[];
                        printf("%s\n", version);
                        exit(0);
                        break;
+               case 'z':
+                       not_failing_only = 1;
+                       break;
                case 'a':
                        acolumn = atoi(optarg);
                        break;
index 511966811bcaa4914e0674b3e5a343ec5ecc1482..1f98de012d4e33c115e9703c2e0026d38439077b 100644 (file)
--- a/syscall.c
+++ b/syscall.c
@@ -1742,8 +1742,11 @@ struct tcb *tcp;
                if (tcp->scno >= nsyscalls || tcp->scno < 0
                    || (qual_flags[tcp->scno] & QUAL_RAW))
                        sys_res = printargs(tcp);
-               else
+               else {
+                       if (not_failing_only && tcp->u_error)
+                               return; /* ignore failed syscalls */
                        sys_res = (*sysent[tcp->scno].sys_func)(tcp);
+               }       
                u_error = tcp->u_error;
                tprintf(") ");
                tabto(acolumn);