Mercurial > hg > octave-kai > gnulib-hg
annotate lib/stat-time.h @ 11224:5aa57cee93aa
avoid gcc 3.4.3 bug on long double NaN on Irix 6.5
* tests/nan.h (NaNl): Rewrite as function on Irix, to avoid
compilation bug by using runtime conversion.
* m4/isfinite.m4 (gl_ISFINITE): Likewise.
* m4/isnanl.m4 (gl_FUNC_ISNANL): Likewise.
* modules/ceill-tests (Files): Use nan.h.
* modules/floorl-tests (Files): Likewise.
* modules/frexpl-tests (Files): Likewise.
* modules/isnanl-tests (Files): Likewise.
* modules/ldexpl-tests (Files): Likewise.
* modules/roundl-tests (Files): Likewise.
* modules/truncl-tests (Files): Likewise.
* tests/test-ceill.c (main): Use a working NaN.
* tests/test-floorl.c (main): Likewise.
* tests/test-frexpl.c (main): Likewise.
* tests/test-isnan.c (test_long_double): Likewise.
* tests/test-isnanl.h (main): Likewise.
* tests/test-ldexpl.h (main): Likewise.
* tests/test-roundl.h (main): Likewise.
* tests/test-truncl.h (main): Likewise.
See http://lists.gnu.org/archive/html/bug-gnulib/2009-02/msg00190.html.
Signed-off-by: Eric Blake <ebb9@byu.net>
author | Eric Blake <ebb9@byu.net> |
---|---|
date | Thu, 26 Feb 2009 20:18:42 -0700 |
parents | 381eff2df16b |
children | b5e42ef33b49 |
rev | line source |
---|---|
6237
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
1 /* stat-related time functions. |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
2 |
8223
ca249819379f
* lib/getdate.h (includes): Include <time.h>, not "timespec.h".
Eric Blake <ebb9@byu.net>
parents:
6471
diff
changeset
|
3 Copyright (C) 2005, 2007 Free Software Foundation, Inc. |
6237
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
4 |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
8621
diff
changeset
|
5 This program is free software: you can redistribute it and/or modify |
6237
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
6 it under the terms of the GNU General Public License as published by |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
8621
diff
changeset
|
7 the Free Software Foundation; either version 3 of the License, or |
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
8621
diff
changeset
|
8 (at your option) any later version. |
6237
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
9 |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
10 This program is distributed in the hope that it will be useful, |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
13 GNU General Public License for more details. |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
14 |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
15 You should have received a copy of the GNU General Public License |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
8621
diff
changeset
|
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
6237
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
17 |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
18 /* Written by Paul Eggert. */ |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
19 |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
20 #ifndef STAT_TIME_H |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
21 #define STAT_TIME_H 1 |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
22 |
8565
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
23 #include <sys/stat.h> |
8223
ca249819379f
* lib/getdate.h (includes): Include <time.h>, not "timespec.h".
Eric Blake <ebb9@byu.net>
parents:
6471
diff
changeset
|
24 #include <time.h> |
6237
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
25 |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
26 /* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
27 struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST, |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
28 ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST, |
8568
392970b32717
Support sub-second birthtime on cygwin.
Eric Blake <ebb9@byu.net>
parents:
8567
diff
changeset
|
29 if available. ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim |
392970b32717
Support sub-second birthtime on cygwin.
Eric Blake <ebb9@byu.net>
parents:
8567
diff
changeset
|
30 for access, status change, data modification, or birth (creation) |
392970b32717
Support sub-second birthtime on cygwin.
Eric Blake <ebb9@byu.net>
parents:
8567
diff
changeset
|
31 time respectively. |
6237
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
32 |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
33 These macros are private to stat-time.h. */ |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
34 #if defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC |
6471
54a70822331f
* m4/stat-time.m4 (STATE_TIMESPEC, STAT_TIMESPEC_NS): Add check for
Paul Eggert <eggert@cs.ucla.edu>
parents:
6242
diff
changeset
|
35 # ifdef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC |
54a70822331f
* m4/stat-time.m4 (STATE_TIMESPEC, STAT_TIMESPEC_NS): Add check for
Paul Eggert <eggert@cs.ucla.edu>
parents:
6242
diff
changeset
|
36 # define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim) |
54a70822331f
* m4/stat-time.m4 (STATE_TIMESPEC, STAT_TIMESPEC_NS): Add check for
Paul Eggert <eggert@cs.ucla.edu>
parents:
6242
diff
changeset
|
37 # else |
54a70822331f
* m4/stat-time.m4 (STATE_TIMESPEC, STAT_TIMESPEC_NS): Add check for
Paul Eggert <eggert@cs.ucla.edu>
parents:
6242
diff
changeset
|
38 # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec) |
54a70822331f
* m4/stat-time.m4 (STATE_TIMESPEC, STAT_TIMESPEC_NS): Add check for
Paul Eggert <eggert@cs.ucla.edu>
parents:
6242
diff
changeset
|
39 # endif |
6237
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
40 #elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
41 # define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec) |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
42 #elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
43 # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec) |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
44 #elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
45 # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec) |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
46 #endif |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
47 |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
48 /* Return the nanosecond component of *ST's access time. */ |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
49 static inline long int |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
50 get_stat_atime_ns (struct stat const *st) |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
51 { |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
52 # if defined STAT_TIMESPEC |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
53 return STAT_TIMESPEC (st, st_atim).tv_nsec; |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
54 # elif defined STAT_TIMESPEC_NS |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
55 return STAT_TIMESPEC_NS (st, st_atim); |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
56 # else |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
57 return 0; |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
58 # endif |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
59 } |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
60 |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
61 /* Return the nanosecond component of *ST's status change time. */ |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
62 static inline long int |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
63 get_stat_ctime_ns (struct stat const *st) |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
64 { |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
65 # if defined STAT_TIMESPEC |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
66 return STAT_TIMESPEC (st, st_ctim).tv_nsec; |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
67 # elif defined STAT_TIMESPEC_NS |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
68 return STAT_TIMESPEC_NS (st, st_ctim); |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
69 # else |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
70 return 0; |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
71 # endif |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
72 } |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
73 |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
74 /* Return the nanosecond component of *ST's data modification time. */ |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
75 static inline long int |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
76 get_stat_mtime_ns (struct stat const *st) |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
77 { |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
78 # if defined STAT_TIMESPEC |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
79 return STAT_TIMESPEC (st, st_mtim).tv_nsec; |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
80 # elif defined STAT_TIMESPEC_NS |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
81 return STAT_TIMESPEC_NS (st, st_mtim); |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
82 # else |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
83 return 0; |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
84 # endif |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
85 } |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
86 |
8565
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
87 /* Return the nanosecond component of *ST's birth time. */ |
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
88 static inline long int |
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
89 get_stat_birthtime_ns (struct stat const *st) |
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
90 { |
8567
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
91 # if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC |
8565
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
92 return STAT_TIMESPEC (st, st_birthtim).tv_nsec; |
8567
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
93 # elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC |
8565
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
94 return STAT_TIMESPEC_NS (st, st_birthtim); |
8567
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
95 # else |
9679
381eff2df16b
Avoid two "parameter unused" warnings.
Jim Meyering <meyering@redhat.com>
parents:
9309
diff
changeset
|
96 /* Avoid a "parameter unused" warning. */ |
381eff2df16b
Avoid two "parameter unused" warnings.
Jim Meyering <meyering@redhat.com>
parents:
9309
diff
changeset
|
97 (void) st; |
8565
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
98 return 0; |
8567
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
99 # endif |
8565
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
100 } |
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
101 |
6237
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
102 /* Return *ST's access time. */ |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
103 static inline struct timespec |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
104 get_stat_atime (struct stat const *st) |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
105 { |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
106 #ifdef STAT_TIMESPEC |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
107 return STAT_TIMESPEC (st, st_atim); |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
108 #else |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
109 struct timespec t; |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
110 t.tv_sec = st->st_atime; |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
111 t.tv_nsec = get_stat_atime_ns (st); |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
112 return t; |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
113 #endif |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
114 } |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
115 |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
116 /* Return *ST's status change time. */ |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
117 static inline struct timespec |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
118 get_stat_ctime (struct stat const *st) |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
119 { |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
120 #ifdef STAT_TIMESPEC |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
121 return STAT_TIMESPEC (st, st_ctim); |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
122 #else |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
123 struct timespec t; |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
124 t.tv_sec = st->st_ctime; |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
125 t.tv_nsec = get_stat_ctime_ns (st); |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
126 return t; |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
127 #endif |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
128 } |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
129 |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
130 /* Return *ST's data modification time. */ |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
131 static inline struct timespec |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
132 get_stat_mtime (struct stat const *st) |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
133 { |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
134 #ifdef STAT_TIMESPEC |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
135 return STAT_TIMESPEC (st, st_mtim); |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
136 #else |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
137 struct timespec t; |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
138 t.tv_sec = st->st_mtime; |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
139 t.tv_nsec = get_stat_mtime_ns (st); |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
140 return t; |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
141 #endif |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
142 } |
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
143 |
8567
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
144 /* Return *ST's birth time, if available; otherwise return a value |
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
145 with negative tv_nsec. */ |
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
146 static inline struct timespec |
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
147 get_stat_birthtime (struct stat const *st) |
8565
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
148 { |
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
149 struct timespec t; |
8567
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
150 |
8621
71d64e4302fa
* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
Paul Eggert <eggert@cs.ucla.edu>
parents:
8568
diff
changeset
|
151 #if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ |
71d64e4302fa
* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
Paul Eggert <eggert@cs.ucla.edu>
parents:
8568
diff
changeset
|
152 || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC) |
8567
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
153 t = STAT_TIMESPEC (st, st_birthtim); |
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
154 #elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC |
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
155 t.tv_sec = st->st_birthtime; |
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
156 t.tv_nsec = st->st_birthtimensec; |
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
157 #elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ |
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
158 /* Woe32 native platforms (but not Cygwin) put the "file creation |
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
159 time" in st_ctime (!). See |
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
160 <http://msdn2.microsoft.com/de-de/library/14h5k7ff(VS.80).aspx>. */ |
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
161 t.tv_sec = st->st_ctime; |
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
162 t.tv_nsec = 0; |
8565
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
163 #else |
8567
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
164 /* Birth time is not supported. Set tv_sec to avoid undefined behavior. */ |
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
165 t.tv_sec = -1; |
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
166 t.tv_nsec = -1; |
9679
381eff2df16b
Avoid two "parameter unused" warnings.
Jim Meyering <meyering@redhat.com>
parents:
9309
diff
changeset
|
167 /* Avoid a "parameter unused" warning. */ |
381eff2df16b
Avoid two "parameter unused" warnings.
Jim Meyering <meyering@redhat.com>
parents:
9309
diff
changeset
|
168 (void) st; |
6237
d81a8251a9b0
* MODULES.html.sh (File system functions): Add stat-time.
Paul Eggert <eggert@cs.ucla.edu>
parents:
diff
changeset
|
169 #endif |
8567
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
170 |
8621
71d64e4302fa
* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
Paul Eggert <eggert@cs.ucla.edu>
parents:
8568
diff
changeset
|
171 #if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ |
71d64e4302fa
* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
Paul Eggert <eggert@cs.ucla.edu>
parents:
8568
diff
changeset
|
172 || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \ |
71d64e4302fa
* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
Paul Eggert <eggert@cs.ucla.edu>
parents:
8568
diff
changeset
|
173 || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC) |
71d64e4302fa
* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
Paul Eggert <eggert@cs.ucla.edu>
parents:
8568
diff
changeset
|
174 /* FreeBSD and NetBSD sometimes signal the absence of knowledge by |
71d64e4302fa
* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
Paul Eggert <eggert@cs.ucla.edu>
parents:
8568
diff
changeset
|
175 using zero. Attempt to work around this problem. Alas, this can |
71d64e4302fa
* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
Paul Eggert <eggert@cs.ucla.edu>
parents:
8568
diff
changeset
|
176 report failure even for valid time stamps. Also, NetBSD |
71d64e4302fa
* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
Paul Eggert <eggert@cs.ucla.edu>
parents:
8568
diff
changeset
|
177 sometimes returns junk in the birth time fields; work around this |
71d64e4302fa
* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
Paul Eggert <eggert@cs.ucla.edu>
parents:
8568
diff
changeset
|
178 bug if it it is detected. There's no need to detect negative |
71d64e4302fa
* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
Paul Eggert <eggert@cs.ucla.edu>
parents:
8568
diff
changeset
|
179 tv_nsec junk as negative tv_nsec already indicates an error. */ |
71d64e4302fa
* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
Paul Eggert <eggert@cs.ucla.edu>
parents:
8568
diff
changeset
|
180 if (t.tv_sec == 0 || 1000000000 <= t.tv_nsec) |
71d64e4302fa
* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
Paul Eggert <eggert@cs.ucla.edu>
parents:
8568
diff
changeset
|
181 t.tv_nsec = -1; |
71d64e4302fa
* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
Paul Eggert <eggert@cs.ucla.edu>
parents:
8568
diff
changeset
|
182 #endif |
71d64e4302fa
* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
Paul Eggert <eggert@cs.ucla.edu>
parents:
8568
diff
changeset
|
183 |
8567
f7fc3652bfc5
* lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents:
8565
diff
changeset
|
184 return t; |
8565
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
185 } |
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
186 |
c49cf515502f
2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
8223
diff
changeset
|
187 #endif |