mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
agent: Use clock or clock_gettime for calibration.
* agent/protect.c (calibrate_get_time): Use clock or clock_gettime. -- For calibration, clock(3) is better than times(3) among UNIXen. Tested on NetBSD 7.1 and FreeBSD 11.1, using QEMU. Thanks to Damien Goutte-Gattat for the information of use of CLOCKS_PER_SEC; The old code with times(3) is not 100% correct, in terms of POSIX. It should have used sysconf (_SC_CLK_TCK) instead of CLOCKS_PER_SEC. CLOCKS_PER_SEC is specifically for clock(3). GnuPG-bug-id: 3056, 3276, 3472 Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
parent
42308224d1
commit
380bce13d9
@ -23,6 +23,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <ctype.h>
|
||||
#include <assert.h>
|
||||
#include <unistd.h>
|
||||
@ -104,11 +105,14 @@ calibrate_get_time (struct calibrate_time_s *data)
|
||||
&data->creation_time, &data->exit_time,
|
||||
&data->kernel_time, &data->user_time);
|
||||
# endif
|
||||
#else
|
||||
struct tms tmp;
|
||||
#elif defined (CLOCK_THREAD_CPUTIME_ID)
|
||||
struct timespec tmp;
|
||||
|
||||
times (&tmp);
|
||||
data->ticks = tmp.tms_utime;
|
||||
clock_gettime (CLOCK_THREAD_CPUTIME_ID, &tmp);
|
||||
data->ticks = (clock_t)(((unsigned long long)tmp.tv_sec * 1000000000 +
|
||||
tmp.tv_nsec) * CLOCKS_PER_SEC / 1000000000);
|
||||
#else
|
||||
data->ticks = clock ();
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -135,7 +139,7 @@ calibrate_elapsed_time (struct calibrate_time_s *starttime)
|
||||
}
|
||||
#else
|
||||
return (unsigned long)((((double) (stoptime.ticks - starttime->ticks))
|
||||
/CLOCKS_PER_SEC)*10000000);
|
||||
/CLOCKS_PER_SEC)*1000);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -322,9 +322,9 @@ test_agent_protect_shared_secret (void)
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
opt.verbose = argc - 1; /* We can do "./t-protect -v -v" */
|
||||
gcry_control (GCRYCTL_DISABLE_SECMEM);
|
||||
|
||||
test_agent_protect ();
|
||||
|
Loading…
x
Reference in New Issue
Block a user