emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 295bacb: Move current_timespec decl to timespec.h


From: Paul Eggert
Subject: [Emacs-diffs] master 295bacb: Move current_timespec decl to timespec.h
Date: Mon, 17 Sep 2018 00:28:14 -0400 (EDT)

branch: master
commit 295bacba61bd681798b55599551116db197b3388
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>

    Move current_timespec decl to timespec.h
    
    This change was motivated by the desire to remove the weird
    dependency of lib-src/profile.o on src/systime.h.  profile.c
    included systime.h only for current_timespec, and this
    inclusion required systime.h to have #ifdef emacs in multiple
    places and complicated further changes I have in mind.
    The current_timespec decl belongs in timespec.h anyway,
    and the main effect of this change is to move it there.
    * lib-src/profile.c (INLINE): Remove.
    Include timespec.h, not systime.h.
    * lib/gettime.c (gettime): Prefer clock_gettime to nanotime,
    and don’t worry about it failing on a CLOCK_REALTIME arg.
    POSIX requires it to succeed and I don’t know of any
    counterexamples where the fallbacks would work.
    (current_timespec): Move here from src/systime.h.
    Nowadays it seems to be better to not have this function
    be inline.
    * lib/timespec.h: Include arg-nonnull.h.
    (current_timespec): New declaration.
    (gettime, settime): Declare args to be nonnull.
    * lib/gettime.c, lib/timespec.h: Copy from Gnulib.
    * src/systime.h: Simplify by assuming ‘emacs’ is defined,
    which it always is now.
    (current_timespec): Move to lib/timespec.h.
---
 lib-src/profile.c |  3 +--
 lib/gettime.c     | 29 ++++++++++++++++-------------
 lib/timespec.h    | 10 ++++++----
 src/systime.h     | 22 +++-------------------
 4 files changed, 26 insertions(+), 38 deletions(-)

diff --git a/lib-src/profile.c b/lib-src/profile.c
index cccdfbc..649eb04 100644
--- a/lib-src/profile.c
+++ b/lib-src/profile.c
@@ -30,14 +30,13 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
  **  operations: reset_watch, get_time
  */
 
-#define INLINE EXTERN_INLINE
 #include <config.h>
 
 #include <inttypes.h>
 #include <stdlib.h>
 
 #include <intprops.h>
-#include <systime.h>
+#include <timespec.h>
 #include <unlocked-io.h>
 
 static struct timespec TV1;
diff --git a/lib/gettime.c b/lib/gettime.c
index 9a4e342..171f224 100644
--- a/lib/gettime.c
+++ b/lib/gettime.c
@@ -28,21 +28,24 @@
 void
 gettime (struct timespec *ts)
 {
-#if HAVE_NANOTIME
+#if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME
+  clock_gettime (CLOCK_REALTIME, ts);
+#elif HAVE_NANOTIME
   nanotime (ts);
 #else
+  struct timeval tv;
+  gettimeofday (&tv, NULL);
+  ts->tv_sec = tv.tv_sec;
+  ts->tv_nsec = tv.tv_usec * 1000;
+#endif
+}
 
-# if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME
-  if (clock_gettime (CLOCK_REALTIME, ts) == 0)
-    return;
-# endif
-
-  {
-    struct timeval tv;
-    gettimeofday (&tv, NULL);
-    ts->tv_sec = tv.tv_sec;
-    ts->tv_nsec = tv.tv_usec * 1000;
-  }
+/* Return the current system time as a struct timespec.  */
 
-#endif
+struct timespec
+current_timespec (void)
+{
+  struct timespec ts;
+  gettime (&ts);
+  return ts;
 }
diff --git a/lib/timespec.h b/lib/timespec.h
index c414cfe..cc49668 100644
--- a/lib/timespec.h
+++ b/lib/timespec.h
@@ -17,9 +17,9 @@
    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #if ! defined TIMESPEC_H
-# define TIMESPEC_H
+#define TIMESPEC_H
 
-# include <time.h>
+#include <time.h>
 
 #ifndef _GL_INLINE_HEADER_BEGIN
  #error "Please include config.h first."
@@ -33,6 +33,7 @@ _GL_INLINE_HEADER_BEGIN
 extern "C" {
 #endif
 
+#include "arg-nonnull.h"
 #include "verify.h"
 
 /* Inverse resolution of timespec timestamps (in units per second),
@@ -122,8 +123,9 @@ timespectod (struct timespec a)
   return a.tv_sec + a.tv_nsec / 1e9;
 }
 
-void gettime (struct timespec *);
-int settime (struct timespec const *);
+struct timespec current_timespec (void);
+void gettime (struct timespec *) _GL_ARG_NONNULL ((1));
+int settime (struct timespec const *) _GL_ARG_NONNULL ((1));
 
 #ifdef __cplusplus
 }
diff --git a/src/systime.h b/src/systime.h
index ede3d4e..ad5ab85 100644
--- a/src/systime.h
+++ b/src/systime.h
@@ -23,12 +23,10 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 
 INLINE_HEADER_BEGIN
 
-#ifdef emacs
-# ifdef HAVE_X_WINDOWS
-#  include <X11/X.h>
-# else
+#ifdef HAVE_X_WINDOWS
+# include <X11/X.h>
+#else
 typedef unsigned long Time;
-# endif
 #endif
 
 /* On some configurations (hpux8.0, X11R4), sys/time.h and X11/Xos.h
@@ -66,15 +64,6 @@ timespec_valid_p (struct timespec t)
   return t.tv_nsec >= 0;
 }
 
-/* Return current system time.  */
-INLINE struct timespec
-current_timespec (void)
-{
-  struct timespec r;
-  gettime (&r);
-  return r;
-}
-
 /* defined in sysdep.c */
 extern int set_file_times (int, const char *, struct timespec, struct 
timespec);
 extern struct timeval make_timeval (struct timespec) ATTRIBUTE_CONST;
@@ -82,10 +71,6 @@ extern struct timeval make_timeval (struct timespec) 
ATTRIBUTE_CONST;
 /* defined in keyboard.c */
 extern void set_waiting_for_input (struct timespec *);
 
-/* When lisp.h is not included Lisp_Object is not defined (this can
-   happen when this file is used outside the src directory).  */
-#ifdef emacs
-
 /* Emacs uses the integer list (HI LO US PS) to represent the time
    (HI << LO_TIME_BITS) + LO + US / 1e6 + PS / 1e12.  */
 enum { LO_TIME_BITS = 16 };
@@ -103,7 +88,6 @@ extern int decode_time_components (Lisp_Object, Lisp_Object, 
Lisp_Object,
                                   Lisp_Object, struct lisp_time *, double *);
 extern struct timespec lisp_to_timespec (struct lisp_time);
 extern struct timespec lisp_time_argument (Lisp_Object);
-#endif
 
 INLINE_HEADER_END
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]