]> granicus.if.org Git - sudo/commitdiff
Replace timerfoo macros with timevalfoo since the timer macros are known
authorTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 8 Jun 2010 22:38:23 +0000 (18:38 -0400)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 8 Jun 2010 22:38:23 +0000 (18:38 -0400)
to be busted on some systems.

compat/nanosleep.c
config.h.in
configure
configure.in
include/compat.h
plugins/sudoers/check.c
plugins/sudoers/iolog.c
plugins/sudoers/visudo.c
src/sudo_edit.c

index 9c33d11d6bde56b312c12f57064d16caa4fbbbb6..16114395b22fb168f57043e8400c6a6a9e455293 100644 (file)
@@ -41,14 +41,14 @@ nanosleep(const struct timespec *ts, struct timespec *rts)
     timeout.tv_usec = ts->tv_nsec / 1000;
     if (rts != NULL) {
        gettimeofday(&endtime, NULL);
-       timeradd(&endtime, &timeout, &endtime);
+       timevaladd(&endtime, &timeout);
     }
     rval = select(0, NULL, NULL, NULL, &timeout);
     if (rts != NULL && rval == -1 && errno == EINTR) {
        gettimeofday(&now, NULL);
-       timersub(&endtime, &now, &timeout);
-       rts->tv_sec = timeout.tv_sec;
-       rts->tv_nsec = timeout.tv_usec * 1000;
+       timevalsub(&endtime, &now);
+       rts->tv_sec = endtime.tv_sec;
+       rts->tv_nsec = endtime.tv_usec * 1000;
     }
     return(rval);
 }
index c4c639f8d97fea811a957754cb6a7d88542dcad9..d03d9fde878e06a4441aaa53ad94d97ad9adb8ee 100644 (file)
 /* Define to 1 if you have the <termio.h> header file. */
 #undef HAVE_TERMIO_H
 
-/* Define to 1 if you have a timersub macro or function that takes two
-   arguments (not three) */
-#undef HAVE_TIMERSUB2
-
 /* Define to 1 if you have struct timespec in sys/time.h */
 #undef HAVE_TIMESPEC
 
index 1f7a600b7a2309c8a226e2974fdf9f08a58b4821..65f69c29c2f2c1944f24da057463067237354f23 100755 (executable)
--- a/configure
+++ b/configure
 
 fi
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for two-parameter timersub" >&5
-$as_echo_n "checking for two-parameter timersub... " >&6; }
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <sys/time.h>
-int
-main ()
-{
-struct timeval ts1, ts2;
-ts1.tv_sec = 1; ts1.tv_usec = 0; ts2.tv_sec = 0; ts2.tv_usec = 0;
-#ifndef timersub
-#error missing timersub
-#endif
-timersub(&ts1, &ts2);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  $as_echo "#define HAVE_TIMERSUB2 1" >>confdefs.h
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -20407,6 +20378,5 @@ fi
 
 
 
-
 
 
index 6cc787dc677420979e78d4ab86245d36d77f61c4..057387dfec45b71057f7d9beb8fee0fa467a3916 100644 (file)
@@ -1980,15 +1980,6 @@ if test X"$ac_cv_type_struct_timespec" != X"no"; then
     AC_CHECK_MEMBER([struct stat.st_mtim], [AC_DEFINE(HAVE_ST_MTIM)]
        [AC_CHECK_MEMBER([struct stat.st_mtim.st__tim], AC_DEFINE(HAVE_ST__TIM))],
        [AC_CHECK_MEMBER([struct stat.st_mtimespec], AC_DEFINE([HAVE_ST_MTIMESPEC]))])
-    AC_MSG_CHECKING([for two-parameter timersub])
-    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
-#include <sys/time.h>]], [[struct timeval ts1, ts2;
-ts1.tv_sec = 1; ts1.tv_usec = 0; ts2.tv_sec = 0; ts2.tv_usec = 0;
-#ifndef timersub
-#error missing timersub
-#endif
-timersub(&ts1, &ts2);]])], [AC_DEFINE(HAVE_TIMERSUB2)
-    AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])
 fi
 dnl
 dnl Check for the dirfd function/macro.  If not found, look for dd_fd in DIR.
@@ -2831,7 +2822,6 @@ AH_TEMPLATE(HAVE_ST_MTIM, [Define to 1 if your struct stat has an st_mtim member
 AH_TEMPLATE(HAVE_ST_MTIMESPEC, [Define to 1 if your struct stat has an st_mtimespec member])
 AH_TEMPLATE(HAVE_TERMIOS_H, [Define to 1 if you have the <termios.h> header file and the `tcgetattr' function.])
 AH_TEMPLATE(HAVE_TIMESPEC, [Define to 1 if you have struct timespec in sys/time.h])
-AH_TEMPLATE(HAVE_TIMERSUB2, [Define to 1 if you have a timersub macro or function that takes two arguments (not three)])
 AH_TEMPLATE(HAVE___PROGNAME, [Define to 1 if your crt0.o defines the __progname symbol for you.])
 AH_TEMPLATE(HOST_IN_LOG, [Define to 1 if you want the hostname to be entered into the log file.])
 AH_TEMPLATE(IGNORE_DOT_PATH, [Define to 1 if you want to ignore '.' and empty PATH elements])
index 520b41474b6a7fde6d05dbc40917efe3671edb74..04f618b9f1fb92d35ea1b10c654ca05bc3fac9f1 100644 (file)
@@ -252,40 +252,40 @@ void setprogname(const char *);
 #endif /* HAVE___PROGNAME */
 #endif /* !HAVE_GETPROGNAME */
 
-#ifndef timerclear
-# define timerclear(ts)        (ts)->tv_sec = (ts)->tv_nsec = 0
+#ifndef timevalclear
+# define timevalclear(tv)      ((tv)->tv_sec = (tv)->tv_usec = 0)
 #endif
-#ifndef timerisset
-# define timerisset(ts)        ((ts)->tv_sec || (ts)->tv_nsec)
+#ifndef timevalisset
+# define timevalisset(tv)      ((tv)->tv_sec || (tv)->tv_usec)
 #endif
-#ifndef timeradd
-# define timeradd(tv1, tv2, total)                                            \
+#ifndef timevalcmp
+# define timevalcmp(tv1, tv2, op)                                             \
+    (((tv1)->tv_sec == (tv2)->tv_sec) ?                                               \
+       ((tv1)->tv_usec op (tv2)->tv_usec) :                                   \
+       ((tv1)->tv_sec op (tv2)->tv_sec))
+#endif
+#ifndef timevaladd
+# define timevaladd(tv1, tv2)                                                 \
     do {                                                                      \
-       (total)->tv_sec = (tv1)->tv_sec + (tv2)->tv_sec;                       \
-       (total)->tv_usec = (tv1)->tv_usec + (tv2)->tv_usec;                    \
-       if ((total)->tv_usec >= 1000000) {                                     \
-           (total)->tv_sec++;                                                 \
-           (total)->tv_usec -= 1000000;                                       \
+       (tv1)->tv_sec += (tv2)->tv_sec;                                        \
+       (tv1)->tv_usec += (tv2)->tv_usec;                                      \
+       if ((tv1)->tv_usec >= 1000000) {                                       \
+           (tv1)->tv_sec++;                                                   \
+           (tv1)->tv_usec -= 1000000;                                         \
        }                                                                      \
     } while (0)
 #endif
-#ifndef timersub
-# define timersub(minuend, subrahend, difference)                             \
+#ifndef timevalsub
+# define timevalsub(tv1, tv2)                                                 \
     do {                                                                      \
-       (difference)->tv_sec = (minuend)->tv_sec - (subrahend)->tv_sec;        \
-       (difference)->tv_usec = (minuend)->tv_usec - (subrahend)->tv_usec;     \
-       if ((difference)->tv_usec < 0) {                                       \
-           (difference)->tv_sec--;                                            \
-           (difference)->tv_usec += 1000000;                                  \
+       (tv1)->tv_sec -= (tv2)->tv_sec;                                        \
+       (tv1)->tv_usec -= (tv2)->tv_usec;                                      \
+       if ((tv1)->tv_usec < 0) {                                              \
+           (tv1)->tv_sec--;                                                   \
+           (tv1)->tv_usec += 1000000;                                         \
        }                                                                      \
     } while (0)
 #endif
-#ifndef timercmp
-#define timercmp(tv1, tv2, cmp)                                                       \
-    (((tv1)->tv_sec == (tv2)->tv_sec) ?                                               \
-       ((tv1)->tv_usec cmp (tv2)->tv_usec) :                                  \
-       ((tv1)->tv_sec cmp (tv2)->tv_sec))
-#endif
 
 #ifndef WCOREDUMP
 # define WCOREDUMP(x)  ((x) & 0x80)
index 45e8cd9d4d19679355f38bd49d3d99903d5b4617..77d9355eb7b4aabf05323c4417bf1d839958c4ff 100644 (file)
@@ -612,7 +612,7 @@ timestamp_status(char *timestampdir, char *timestampfile, char *user, int flags)
                    else
                        (void) rmdir(timestampdir);
                    status = TS_MISSING;
-               } else if (get_boottime(&boottime) && timercmp(&mtime, &boottime, <)) {
+               } else if (get_boottime(&boottime) && timevalcmp(&mtime, &boottime, <)) {
                    status = TS_OLD;
                } else {
                    status = TS_CURRENT;
@@ -655,7 +655,7 @@ remove_timestamp(int remove)
                remove = FALSE;
            }
        } else {
-           timerclear(&tv);
+           timevalclear(&tv);
            if (touch(-1, path, &tv) == -1)
                error(1, "can't reset %s to Epoch", path);
        }
index 90199f8db1be7bfe119932feb707a41c0c9f537c..86bb7813108fe0159eff21b221e888f84cbce16d 100644 (file)
@@ -335,7 +335,7 @@ sudoers_io_version(int verbose)
 static int
 sudoers_io_log(const char *buf, unsigned int len, int idx)
 {
-    struct timeval now, tv;
+    struct timeval now, delay;
 
     gettimeofday(&now, NULL);
 
@@ -345,15 +345,17 @@ sudoers_io_log(const char *buf, unsigned int len, int idx)
     else
 #endif
        fwrite(buf, 1, len, io_fds[idx].f);
-    timersub(&now, &last_time, &tv);
+    delay.tv_sec = now.tv_sec;
+    delay.tv_usec = now.tv_usec;
+    timevalsub(&delay, &last_time);
 #ifdef HAVE_ZLIB
     if (def_compress_io)
        gzprintf(io_fds[IOFD_TIMING].g, "%d %f %d\n", idx,
-           tv.tv_sec + ((double)tv.tv_usec / 1000000), len);
+           delay.tv_sec + ((double)delay.tv_usec / 1000000), len);
     else
 #endif
        fprintf(io_fds[IOFD_TIMING].f, "%d %f %d\n", idx,
-           tv.tv_sec + ((double)tv.tv_usec / 1000000), len);
+           delay.tv_sec + ((double)delay.tv_usec / 1000000), len);
     last_time.tv_sec = now.tv_sec;
     last_time.tv_usec = now.tv_usec;
 
index 62d91981f3e603d145fa7e4fb8e39f412c5ea306..bf9c94f2d520fa74f12fa94d5637d2dfc559672c 100644 (file)
@@ -365,19 +365,13 @@ edit_sudoers(struct sudoersfile *sp, char *editor, char *args, int lineno)
     /* Set modified bit if use changed the file. */
     modified = TRUE;
     mtim_get(&sb, &tv);
-    if (orig_size == sb.st_size &&
-       orig_mtim.tv_sec == tv.tv_sec &&
-       orig_mtim.tv_usec == tv.tv_usec) {
+    if (orig_size == sb.st_size && timevalcmp(&orig_mtim, &tv, ==)) {
        /*
         * If mtime and size match but the user spent no measurable
         * time in the editor we can't tell if the file was changed.
         */
-#ifdef HAVE_TIMERSUB2
-       timersub(&tv1, &tv2);
-#else
-       timersub(&tv1, &tv2, &tv2);
-#endif
-       if (timerisset(&tv2))
+       timevalsub(&tv1, &tv2);
+       if (timevalisset(&tv2))
            modified = FALSE;
     }
 
index 602d86651b10ec05eed622c0cfb35eb00d91e58e..a7062722bb5223e3a6123419f39bef73ba8eae84 100644 (file)
@@ -277,17 +277,13 @@ sudo_edit(struct command_details *command_details, char *argv[], char *envp[])
            continue;
        }
        mtim_get(&sb, &tv);
-       if (tf[i].osize == sb.st_size && timercmp(&tf[i].omtim, &tv, ==)) {
+       if (tf[i].osize == sb.st_size && timevalcmp(&tf[i].omtim, &tv, ==)) {
            /*
             * If mtime and size match but the user spent no measurable
             * time in the editor we can't tell if the file was changed.
             */
-#ifdef HAVE_TIMERSUB2
-           timersub(&tv1, &tv2);
-#else
-           timersub(&tv1, &tv2, &tv2);
-#endif
-           if (timerisset(&tv2)) {
+           timevalsub(&tv1, &tv2);
+           if (timevalisset(&tv2)) {
                warningx("%s unchanged", tf[i].ofile);
                unlink(tf[i].tfile);
                close(tfd);