X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fstat-time.h;h=b3df6eb816d28aef1e5e5f80d541969143e15051;hb=7ef6c64e210ac0979d7e8ac69bc5b5208c2405ab;hp=649c848732bd8b184f39b08989ed7b11c7ca420c;hpb=fe0f080532b2357794d4e25d66a35f4aedc4f93a;p=gnulib.git
diff --git a/lib/stat-time.h b/lib/stat-time.h
index 649c84873..b3df6eb81 100644
--- a/lib/stat-time.h
+++ b/lib/stat-time.h
@@ -1,11 +1,11 @@
/* stat-related time functions.
- Copyright (C) 2005, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2007, 2009-2014 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
+ This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -13,8 +13,7 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+ along with this program. If not, see . */
/* Written by Paul Eggert. */
@@ -24,6 +23,14 @@
#include
#include
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_STAT_TIME_INLINE
+# define _GL_STAT_TIME_INLINE _GL_INLINE
+#endif
+
/* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type
struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST,
ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST,
@@ -47,7 +54,7 @@
#endif
/* Return the nanosecond component of *ST's access time. */
-static inline long int
+_GL_STAT_TIME_INLINE long int
get_stat_atime_ns (struct stat const *st)
{
# if defined STAT_TIMESPEC
@@ -60,7 +67,7 @@ get_stat_atime_ns (struct stat const *st)
}
/* Return the nanosecond component of *ST's status change time. */
-static inline long int
+_GL_STAT_TIME_INLINE long int
get_stat_ctime_ns (struct stat const *st)
{
# if defined STAT_TIMESPEC
@@ -73,7 +80,7 @@ get_stat_ctime_ns (struct stat const *st)
}
/* Return the nanosecond component of *ST's data modification time. */
-static inline long int
+_GL_STAT_TIME_INLINE long int
get_stat_mtime_ns (struct stat const *st)
{
# if defined STAT_TIMESPEC
@@ -86,7 +93,7 @@ get_stat_mtime_ns (struct stat const *st)
}
/* Return the nanosecond component of *ST's birth time. */
-static inline long int
+_GL_STAT_TIME_INLINE long int
get_stat_birthtime_ns (struct stat const *st)
{
# if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC
@@ -94,12 +101,14 @@ get_stat_birthtime_ns (struct stat const *st)
# elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
return STAT_TIMESPEC_NS (st, st_birthtim);
# else
+ /* Avoid a "parameter unused" warning. */
+ (void) st;
return 0;
# endif
}
/* Return *ST's access time. */
-static inline struct timespec
+_GL_STAT_TIME_INLINE struct timespec
get_stat_atime (struct stat const *st)
{
#ifdef STAT_TIMESPEC
@@ -113,7 +122,7 @@ get_stat_atime (struct stat const *st)
}
/* Return *ST's status change time. */
-static inline struct timespec
+_GL_STAT_TIME_INLINE struct timespec
get_stat_ctime (struct stat const *st)
{
#ifdef STAT_TIMESPEC
@@ -127,7 +136,7 @@ get_stat_ctime (struct stat const *st)
}
/* Return *ST's data modification time. */
-static inline struct timespec
+_GL_STAT_TIME_INLINE struct timespec
get_stat_mtime (struct stat const *st)
{
#ifdef STAT_TIMESPEC
@@ -141,8 +150,8 @@ get_stat_mtime (struct stat const *st)
}
/* Return *ST's birth time, if available; otherwise return a value
- with negative tv_nsec. */
-static inline struct timespec
+ with tv_sec and tv_nsec both equal to -1. */
+_GL_STAT_TIME_INLINE struct timespec
get_stat_birthtime (struct stat const *st)
{
struct timespec t;
@@ -154,15 +163,17 @@ get_stat_birthtime (struct stat const *st)
t.tv_sec = st->st_birthtime;
t.tv_nsec = st->st_birthtimensec;
#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
- /* Woe32 native platforms (but not Cygwin) put the "file creation
+ /* Native Windows platforms (but not Cygwin) put the "file creation
time" in st_ctime (!). See
. */
t.tv_sec = st->st_ctime;
t.tv_nsec = 0;
#else
- /* Birth time is not supported. Set tv_sec to avoid undefined behavior. */
+ /* Birth time is not supported. */
t.tv_sec = -1;
t.tv_nsec = -1;
+ /* Avoid a "parameter unused" warning. */
+ (void) st;
#endif
#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \
@@ -172,13 +183,17 @@ get_stat_birthtime (struct stat const *st)
using zero. Attempt to work around this problem. Alas, this can
report failure even for valid time stamps. Also, NetBSD
sometimes returns junk in the birth time fields; work around this
- bug if it it is detected. There's no need to detect negative
- tv_nsec junk as negative tv_nsec already indicates an error. */
- if (t.tv_sec == 0 || 1000000000 <= t.tv_nsec)
- t.tv_nsec = -1;
+ bug if it is detected. */
+ if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000))
+ {
+ t.tv_sec = -1;
+ t.tv_nsec = -1;
+ }
#endif
return t;
}
+_GL_INLINE_HEADER_END
+
#endif