version 1.2, 2022/06/29 16:01:10 |
version 1.3, 2022/06/30 07:42:50 |
|
|
{ |
{ |
int iflag, mflag, sflag; |
int iflag, mflag, sflag; |
int ch, prev; |
int ch, prev; |
struct timespec rstart, start, now, elapsed; |
struct timespec roff, start, now; |
struct tm *lt, tm; |
struct tm *tm; |
int clock = CLOCK_REALTIME; |
int clock = CLOCK_REALTIME; |
|
|
if (pledge("stdio", NULL) == -1) |
if (pledge("stdio", NULL) == -1) |
|
|
if ((outbuf = calloc(1, bufsize)) == NULL) |
if ((outbuf = calloc(1, bufsize)) == NULL) |
err(1, NULL); |
err(1, NULL); |
|
|
clock_gettime(CLOCK_REALTIME, &rstart); |
/* force UTC for interval calculations */ |
clock_gettime(CLOCK_MONOTONIC, &start); |
if (iflag || sflag) |
|
if (setenv("TZ", "UTC", 1) == -1) |
|
err(1, "setenv UTC"); |
|
|
|
clock_gettime(CLOCK_REALTIME, &roff); |
|
clock_gettime(clock, &start); |
|
timespecsub(&roff, &start, &roff); |
|
|
for (prev = '\n'; (ch = getchar()) != EOF; prev = ch) { |
for (prev = '\n'; (ch = getchar()) != EOF; prev = ch) { |
if (prev == '\n') { |
if (prev == '\n') { |
if (clock_gettime(clock, &now)) |
clock_gettime(clock, &now); |
err(1, "clock_gettime"); |
if (iflag || sflag) |
if (iflag || sflag) { |
timespecsub(&now, &start, &now); |
timespecsub(&now, &start, &elapsed); |
else if (mflag) |
if (gmtime_r(&elapsed.tv_sec, &tm) == NULL) |
timespecadd(&now, &roff, &now); |
err(1, "gmtime_r"); |
if (iflag) |
if (iflag) |
clock_gettime(clock, &start); |
if (clock_gettime(clock, &start)) |
if ((tm = localtime(&now.tv_sec)) == NULL) |
err(1, "clock_gettime"); |
err(1, "localtime/gmtime"); |
fmtfmt(&tm, elapsed.tv_nsec); |
fmtfmt(tm, now.tv_nsec); |
} else if (mflag) { |
|
timespecsub(&now, &start, &elapsed); |
|
timespecadd(&rstart, &elapsed, &now); |
|
lt = localtime(&now.tv_sec); |
|
if (lt == NULL) |
|
err(1, "localtime"); |
|
fmtfmt(lt, now.tv_nsec); |
|
} else { |
|
lt = localtime(&now.tv_sec); |
|
if (lt == NULL) |
|
err(1, "localtime"); |
|
fmtfmt(lt, now.tv_nsec); |
|
} |
|
} |
} |
if (putchar(ch) == EOF) |
if (putchar(ch) == EOF) |
break; |
break; |