From 402150eed057fc9fa52c8471ae645e23913a2805 Mon Sep 17 00:00:00 2001 From: Philip Homburg Date: Tue, 23 Jun 2020 12:25:08 -0400 Subject: [PATCH] replace stime with clock_settime --- coreutils/date.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) --- a/coreutils/date.c +++ b/coreutils/date.c @@ -246,6 +246,9 @@ int date_main(int argc UNUSED_PARAM, cha if (*argv) bb_show_usage(); + /* Clear ts.tv_nsec, in case we need to set the time later */ + ts.tv_nsec= 0; + /* Now we have parsed all the information except the date format * which depends on whether the clock is being set or read */ @@ -310,7 +313,7 @@ int date_main(int argc UNUSED_PARAM, cha } /* if setting time, set it */ - if ((opt & OPT_SET) && stime(&ts.tv_sec) < 0) { + if ((opt & OPT_SET) && clock_settime(CLOCK_REALTIME, &ts) < 0) { bb_perror_msg("can't set date"); } } --- a/util-linux/rdate.c +++ b/util-linux/rdate.c @@ -65,27 +65,27 @@ static time_t askremotedate(const char * int rdate_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int rdate_main(int argc UNUSED_PARAM, char **argv) { - time_t remote_time; + struct timespec remote_time; unsigned flags; opt_complementary = "-1"; flags = getopt32(argv, "sp"); - remote_time = askremotedate(argv[optind]); + remote_time.tv_sec = askremotedate(argv[optind]); if (!(flags & 2)) { /* no -p (-s may be present) */ time_t current_time; time(¤t_time); - if (current_time == remote_time) + if (current_time == remote_time.tv_sec) bb_error_msg("current time matches remote time"); else - if (stime(&remote_time) < 0) + if (clock_settime(CLOCK_REALTIME,&remote_time) < 0) bb_perror_msg_and_die("can't set time of day"); } if (flags != 1) /* not lone -s */ - printf("%s", ctime(&remote_time)); + printf("%s", ctime(&remote_time.tv_sec)); return EXIT_SUCCESS; } --- a/networking/httpget.c +++ b/networking/httpget.c @@ -947,8 +947,9 @@ static int eat_headers(FILE *tcp_file, i if (time_tolerance && strncmp(line, "Date: ", 6) == 0) { /* Try to set time from server */ - time_t now, tim, tolerance; + time_t now, tolerance; struct tm tm; + struct timespec tim; tolerance= strtoul(time_tolerance, &cp, 10); if (cp[0] != '\0') @@ -966,16 +967,16 @@ static int eat_headers(FILE *tcp_file, i line+6); } } - tim= timegm(&tm); + tim.tv_sec= timegm(&tm); now= time(NULL); - if (now < tim-tolerance || now > tim+tolerance) + if (now < tim.tv_sec-tolerance || now > tim.tv_sec+tolerance) { if (debug) { fprintf(stderr, "setting time, time difference is %d\n", - (int)(tim-now)); + (int)(tim.tv_sec-now)); } - stime(&tim); + clock_settime(CLOCK_REALTIME,&tim); } } --- a/networking/httppost.c +++ b/networking/httppost.c @@ -92,13 +92,14 @@ int httppost_main(int argc, char *argv[] char *time_tolerance, *rebased_fn= NULL; char *fn_new, *fn; FILE *tcp_file, *out_file, *fh; - time_t server_time, tolerance; + time_t tolerance; + struct timespec server_time; struct stat sbF, sbH, sbS; off_t cLength, dir_length, maxpostsize; struct sigaction sa; - post_dir= NULL; - post_file= NULL; + post_dir= NULL; + post_file= NULL; post_footer=NULL; post_header=NULL; atlas_id= NULL; @@ -470,12 +471,12 @@ int httppost_main(int argc, char *argv[] if (!check_result(tcp_file)) goto err; fprintf(stderr, "httppost: getting reply headers \n"); - server_time= 0; + server_time.tv_sec = 0; content_length= -1; - if (!eat_headers(tcp_file, &chunked, &content_length, &server_time)) + if (!eat_headers(tcp_file, &chunked, &content_length, &server_time.tv_sec)) goto err; - if (tolerance && server_time > 0) + if (tolerance && server_time.tv_sec > 0) { /* Try to set time from server */ int need_set_time; @@ -486,35 +487,35 @@ int httppost_main(int argc, char *argv[] rtt= now.tv_sec-start_time.tv_sec; rtt += (now.tv_usec-start_time.tv_usec)/1e6; if (rtt < 0) rtt= 0; - need_set_time= (now.tv_sec < server_time-tolerance-rtt || - now.tv_sec > server_time+tolerance+rtt); + need_set_time= (now.tv_sec < server_time.tv_sec-tolerance-rtt || + now.tv_sec > server_time.tv_sec+tolerance+rtt); if (need_set_time && getenv("HTTPPOST_ALLOW_STIME")) { fprintf(stderr, "setting time, time difference is %ld\n", - (long)server_time-now.tv_sec); - stime(&server_time); + (long)server_time.tv_sec-now.tv_sec); + clock_settime(CLOCK_REALTIME,&server_time); if (atlas_id) { printf( "RESULT %s ongoing %ld httppost setting time, local %ld, remote %ld\n", atlas_id, (long)time(NULL), (long)now.tv_sec, - (long)server_time); + (long)server_time.tv_sec); } } else if (need_set_time) { fprintf(stderr, "not setting time, time difference is %ld\n", - (long)server_time-now.tv_sec); + (long)server_time.tv_sec-now.tv_sec); if (atlas_id) { printf( "RESULT %s ongoing %ld httppost not in sync, local %ld, remote %ld\n", atlas_id, (long)time(NULL), (long)now.tv_sec, - (long)server_time); + (long)server_time.tv_sec); } } else if (rtt <= 1)