NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/53595: getitimer() returns strange value



On Sep 12, 12:05am, ohnoya%lilac.plala.or.jp@localhost (ohnoya%lilac.plala.or.jp@localhost) wrote:
-- Subject: kern/53595: getitimer() returns strange value

| #include <stdio.h>
| #include <signal.h>
| #include <unistd.h>
| #include <sys/time.h>
| 
| int main(int argc, char** argv) {
|         struct itimerval  interval, remain;
| 
|         interval.it_value.tv_usec = 250000;
|         interval.it_value.tv_sec = 0;
|         interval.it_interval.tv_usec = 250000;
|         interval.it_interval.tv_sec = 0;
| 
|         setitimer(ITIMER_REAL, &interval, NULL);
| 
|         getitimer(ITIMER_REAL, &remain);
|         printf("getitimer : it_value.tv_usec:%lu, it_value.tv_sec:%lu, it_interval.tv_usec:%lu, it_interval.tv_sec:%lu\n",
|                 remain.it_value.tv_usec, remain.it_value.tv_sec, remain.it_interval.tv_usec, remain.it_interval.tv_sec);
| 
|         return 0;
| }
| ---
| getitimer : it_value.tv_usec:250000, it_value.tv_sec:0, it_interval.tv_usec:0, it_interval.tv_sec:250000

The program is broken. time_t (tv_sec) is int64_t on NetBSD and tv_usec
(suseconds_t) is an int32_t.
1. the long format is wrong for LP64 and tv_usec
2. the long format is wrong for ILP32 and tv_sec

If you compile with -Wall, you'll see the format warnings. The program
prints the right values if you:

        printf("getitimer : it_value.tv_usec:%jd, it_value.tv_sec:%jd, "
            "it_interval.tv_usec:%jd, it_interval.tv_sec:%jd\n",
            (intmax_t)remain.it_value.tv_usec,
            (intmax_t)remain.it_value.tv_sec,
            (intmax_t)remain.it_interval.tv_usec,
            (intmax_t)remain.it_interval.tv_sec);



Home | Main Index | Thread Index | Old Index