[systemd-devel] [PATCH] timedatectl: work with old timedated
Shawn Landden
shawn at churchofgit.com
Thu Dec 12 11:27:14 PST 2013
On Thu, Dec 12, 2013 at 11:02 AM, Lennart Poettering
<lennart at poettering.net> wrote:
> On Thu, 12.12.13 10:00, Shawn Landden (shawn at churchofgit.com) wrote:
>
>
> Applied. Dropped the fflush(stderr) bits though as we that's not
> necessary for stderr, and not even for stdout if an \n was printed
> anyway...
ok, I was worried about the lack of synchronization between stderr and
stdout causing them to interlace.
>
> Thanks!
>
>>
>> diff --git a/src/timedate/timedatectl.c b/src/timedate/timedatectl.c
>> index 9b81513..6b09559 100644
>> --- a/src/timedate/timedatectl.c
>> +++ b/src/timedate/timedatectl.c
>> @@ -98,6 +98,7 @@ static void print_status_info(const StatusInfo *i) {
>> char s[32];
>> struct tm tm;
>> time_t sec;
>> + bool have_time = false;
>> char *zc, *zn;
>> time_t t, tc, tn;
>> int dn;
>> @@ -109,20 +110,35 @@ static void print_status_info(const StatusInfo *i) {
>> /* Enforce the values of /etc/localtime */
>> if (getenv("TZ")) {
>> fprintf(stderr, "Warning: ignoring the TZ variable, reading the system's timezone setting only.\n\n");
>> + fflush(stderr);
>> unsetenv("TZ");
>> }
>>
>> - sec = (time_t) (i->time / USEC_PER_SEC);
>> + if (i->time != 0) {
>> + sec = (time_t) (i->time / USEC_PER_SEC);
>> + have_time = true;
>> + } else if (arg_transport == BUS_TRANSPORT_LOCAL) {
>> + sec = time(NULL);
>> + have_time = true;
>> + } else {
>> + fprintf(stderr, "Warning: could not get time from timedated and not operating locally.\n\n");
>> + fflush(stderr);
>> + }
>>
>> - zero(tm);
>> - assert_se(strftime(a, sizeof(a), "%a %Y-%m-%d %H:%M:%S %Z", localtime_r(&sec, &tm)) > 0);
>> - char_array_0(a);
>> - printf(" Local time: %s\n", a);
>> + if (have_time) {
>> + zero(tm);
>> + assert_se(strftime(a, sizeof(a), "%a %Y-%m-%d %H:%M:%S %Z", localtime_r(&sec, &tm)) > 0);
>> + char_array_0(a);
>> + printf(" Local time: %s\n", a);
>>
>> - zero(tm);
>> - assert_se(strftime(a, sizeof(a), "%a %Y-%m-%d %H:%M:%S UTC", gmtime_r(&sec, &tm)) > 0);
>> - char_array_0(a);
>> - printf(" Universal time: %s\n", a);
>> + zero(tm);
>> + assert_se(strftime(a, sizeof(a), "%a %Y-%m-%d %H:%M:%S UTC", gmtime_r(&sec, &tm)) > 0);
>> + char_array_0(a);
>> + printf(" Universal time: %s\n", a);
>> + } else {
>> + printf(" Local time: %s\n", "n/a");
>> + printf(" Universal time: %s\n", "n/a");
>> + }
>>
>> if (i->rtc_time > 0) {
>> time_t rtc_sec;
>> @@ -133,7 +149,7 @@ static void print_status_info(const StatusInfo *i) {
>> char_array_0(a);
>> printf(" RTC time: %s\n", a);
>> } else
>> - printf(" RTC time: n/a\n");
>> + printf(" RTC time: %s\n", "n/a");
>>
>> zero(tm);
>> assert_se(strftime(a, sizeof(a), "%Z, %z", localtime_r(&sec, &tm)) > 0);
>> @@ -151,8 +167,8 @@ static void print_status_info(const StatusInfo *i) {
>> &tc, &zc, &is_dstc,
>> &tn, &dn, &zn, &is_dstn);
>> if (r < 0)
>> - printf(" DST active: n/a\n");
>> - else {
>> + printf(" DST active: %s\n", "n/a");
>> + else if (have_time) {
>> printf(" DST active: %s\n", yes_no(is_dstc));
>>
>> t = tc - 1;
>> @@ -183,7 +199,8 @@ static void print_status_info(const StatusInfo *i) {
>>
>> free(zc);
>> free(zn);
>> - }
>> + } else
>> + printf(" DST active: %s\n", yes_no(is_dstc));
>>
>> if (i->rtc_local)
>> fputs("\n" ANSI_HIGHLIGHT_ON
>
>
> Lennart
>
> --
> Lennart Poettering, Red Hat
> _______________________________________________
> systemd-devel mailing list
> systemd-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/systemd-devel
More information about the systemd-devel
mailing list