]> granicus.if.org Git - strace/commitdiff
count: use parse_ts for parsing overhead value
authorEugene Syromyatnikov <evgsyr@gmail.com>
Sun, 2 Sep 2018 19:56:47 +0000 (21:56 +0200)
committerDmitry V. Levin <ldv@altlinux.org>
Tue, 6 Aug 2019 13:38:20 +0000 (13:38 +0000)
* count.c (set_overhead): Change argument type to const char *, call
parse_ts to parse it and set to overhead.
* defs.h (set_overhead): Update declaration.
* strace.c: (init) <case 'O'>: do not parse argument, pass optarg to
set_overhead call.
* tests/count.test (GENERIC, WALLCLOCK, WALLCLOCK1, HALFCLOCK): New
variables with expected patterns.
Add checks for the new -O syntax.

count.c
defs.h
strace.c
tests/count.test

diff --git a/count.c b/count.c
index 02fb3f039cad97ae4f7addeb02d1185ed925052d..298cb6815e88bd5f69e231f5738b0abcaa5687f3 100644 (file)
--- a/count.c
+++ b/count.c
@@ -101,10 +101,10 @@ set_sortby(const char *sortby)
        }
 }
 
-void set_overhead(int n)
+int
+set_overhead(const char *str)
 {
-       overhead.tv_sec = n / 1000000;
-       overhead.tv_nsec = n % 1000000 * 1000;
+       return parse_ts(str, &overhead);
 }
 
 static void
diff --git a/defs.h b/defs.h
index 9c025b2747cc7739dae39940738be5ddd48e8a23..56bd993f8dbc026ddf59ee39de760743aeb74af1 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -428,7 +428,7 @@ extern unsigned os_release;
 extern int read_int_from_file(struct tcb *, const char *, int *);
 
 extern void set_sortby(const char *);
-extern void set_overhead(int);
+extern int set_overhead(const char *);
 
 extern bool get_instruction_pointer(struct tcb *, kernel_ulong_t *);
 extern bool get_stack_pointer(struct tcb *, kernel_ulong_t *);
index 6e0ad5ca935feb976f264a2e2e7349c8f133c45d..6821f397951bd9714ed6a541dad51af3f3035b7f 100644 (file)
--- a/strace.c
+++ b/strace.c
@@ -1664,10 +1664,8 @@ init(int argc, char *argv[])
                        outfname = optarg;
                        break;
                case 'O':
-                       i = string_to_uint(optarg);
-                       if (i < 0)
+                       if (set_overhead(optarg) < 0)
                                error_opt_arg(c, optarg);
-                       set_overhead(i);
                        break;
                case 'p':
                        process_opt_p_list(optarg);
index 6abb177260db7bdb7b73d0074edfdd770133148e..2a8a73613e7875182c31290ded981bf78de43a92 100755 (executable)
@@ -29,13 +29,21 @@ grep_log()
        }
 }
 
-grep_log ' *[^ ]+ +0\.0[^n]*nanosleep'         -c
-grep_log ' *[^ ]+ +0\.0[^n]*nanosleep'         -c -O1
-grep_log ' *[^ ]+ +0\.0[^n]*nanosleep'         -c -enanosleep
-grep_log ' *[^ ]+ +0\.0[^n]*nanosleep'         -c -O1 -enanosleep
-grep_log ' *[^ ]+ +(1\.[01]|0\.99)[^n]*nanosleep'      -cw
-grep_log ' *[^ ]+ +(1\.[01]|0\.99)[^n]*nanosleep'      -cw -O1
-grep_log '100\.00 +(1\.[01]|0\.99)[^n]*nanosleep'      -cw -enanosleep
-grep_log '100\.00 +(1\.[01]|0\.99)[^n]*nanosleep'      -cw -O1 -enanosleep
+GENERIC=' *[^ ]+ +0\.0[^n]*nanosleep *'
+WALLCLOCK=' *[^ ]+ +(1\.[01]|0\.99)[^n]*nanosleep *'
+WALLCLOCK1='100\.00 +(1\.[01]|0\.99)[^n]*nanosleep'
+HALFCLOCK=' *[^ ]+ +0\.[567][^n]*nanosleep *'
+
+grep_log "$GENERIC"    -c
+grep_log "$GENERIC"    -c -O1
+grep_log "$GENERIC"    -c -enanosleep
+grep_log "$GENERIC"    -c -O1 -enanosleep
+grep_log "$WALLCLOCK"  -cw
+grep_log "$WALLCLOCK"  -cw -O1
+grep_log "$WALLCLOCK1" -cw -enanosleep
+grep_log "$WALLCLOCK1" -cw -O1 -enanosleep
+grep_log "$HALFCLOCK"  -cw -O4.5e2ms -enanosleep
+grep_log "$HALFCLOCK"  -cw -O4.5e-1s -enanosleep
+grep_log "$HALFCLOCK"  -cw -O456789012ns -enanosleep
 
 exit 0