summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Syromyatnikov <evgsyr@gmail.com>2018-09-02 21:56:47 +0200
committerDmitry V. Levin <ldv@altlinux.org>2019-08-06 13:38:20 +0000
commitbe5ef21fdabb4904ee119f134daa5af05f8c76de (patch)
tree2f3d4b90fa61edb43a16f498acdd12a9c7edb2f7
parent6b5a9d30b99cf99b27dc27a25ede9a0410d97b52 (diff)
downloadstrace-be5ef21fdabb4904ee119f134daa5af05f8c76de.tar.gz
count: use parse_ts for parsing overhead value
* 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.
-rw-r--r--count.c6
-rw-r--r--defs.h2
-rw-r--r--strace.c4
-rwxr-xr-xtests/count.test24
4 files changed, 21 insertions, 15 deletions
diff --git a/count.c b/count.c
index 02fb3f039..298cb6815 100644
--- 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 9c025b274..56bd993f8 100644
--- 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 *);
diff --git a/strace.c b/strace.c
index 6e0ad5ca9..6821f3979 100644
--- 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);
diff --git a/tests/count.test b/tests/count.test
index 6abb17726..2a8a73613 100755
--- a/tests/count.test
+++ b/tests/count.test
@@ -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