Module Name:    src
Committed By:   christos
Date:           Sun Apr  7 18:47:07 UTC 2013

Modified Files:
        src/sys/sys: stat.h

Log Message:
Add posix-2008 mandated timespec fields from Antoine Leca


To generate a diff of this commit:
cvs rdiff -u -r1.65 -r1.66 src/sys/sys/stat.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/sys/stat.h
diff -u src/sys/sys/stat.h:1.65 src/sys/sys/stat.h:1.66
--- src/sys/sys/stat.h:1.65	Sat Dec  1 03:20:55 2012
+++ src/sys/sys/stat.h	Sun Apr  7 14:47:06 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: stat.h,v 1.65 2012/12/01 08:20:55 skrll Exp $	*/
+/*	$NetBSD: stat.h,v 1.66 2013/04/07 18:47:06 christos Exp $	*/
 
 /*-
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -42,7 +42,17 @@
 #include <sys/featuretest.h>
 #include <sys/types.h>		/* XXX */
 
-#if defined(_NETBSD_SOURCE)
+#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \
+    defined(_NETBSD_SOURCE)
+/*
+ * POSIX:2008 / XPG7 requires struct timespec to be declared in
+ * this header, but does not provide the usual exemption
+ * "inclusion of this header may make visible symbols defined in <time.h>".
+ *
+ * This is a Standard omission, acknowledged by the committee and
+ * scheduled to be corrected in Technical Corrigendum 2, according to
+ * http://austingroupbugs.net/view.php?id=531
+ */
 #include <sys/time.h>
 #endif
 
@@ -54,11 +64,12 @@ struct stat {
 	uid_t	  st_uid;		/* user ID of the file's owner */
 	gid_t	  st_gid;		/* group ID of the file's group */
 	dev_t	  st_rdev;		/* device type */
-#if defined(_NETBSD_SOURCE)
-	struct	  timespec st_atimespec;/* time of last access */
-	struct	  timespec st_mtimespec;/* time of last data modification */
-	struct	  timespec st_ctimespec;/* time of last file status change */
-	struct 	  timespec st_birthtimespec; /* time of creation */
+#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \
+    defined(_NETBSD_SOURCE)
+	struct	  timespec st_atim;	/* time of last access */
+	struct	  timespec st_mtim;	/* time of last data modification */
+	struct	  timespec st_ctim;	/* time of last file status change */
+	struct	  timespec st_birthtim;	/* time of creation */
 #else
 	time_t	  st_atime;		/* time of last access */
 	long	  st_atimensec;		/* nsec of last access */
@@ -77,14 +88,23 @@ struct stat {
 	uint32_t  st_spare[2];
 };
 
+#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \
+    defined(_NETBSD_SOURCE)
+/* Standard-mandated compatibility */
+#define	st_atime		st_atim.tv_sec
+#define	st_mtime		st_mtim.tv_sec
+#define	st_ctime		st_ctim.tv_sec
+#define	st_birthtime		st_birthtim.tv_sec
+#endif
+
 #if defined(_NETBSD_SOURCE)
-#define	st_atime		st_atimespec.tv_sec
-#define	st_atimensec		st_atimespec.tv_nsec
-#define	st_mtime		st_mtimespec.tv_sec
-#define	st_mtimensec		st_mtimespec.tv_nsec
-#define	st_ctime		st_ctimespec.tv_sec
-#define	st_ctimensec		st_ctimespec.tv_nsec
-#define st_birthtime		st_birthtimespec.tv_sec
+#define	st_atimespec		st_atim
+#define	st_atimensec		st_atim.tv_nsec
+#define	st_mtimespec		st_mtim
+#define	st_mtimensec		st_mtim.tv_nsec
+#define	st_ctimespec		st_ctim
+#define	st_ctimensec		st_ctim.tv_nsec
+#define	st_birthtimespec        st_birthtim
 #define st_birthtimensec	st_birthtimespec.tv_nsec
 #endif
 
@@ -207,11 +227,14 @@ struct stat {
 #endif /* _KERNEL */
 #endif /* _NETBSD_SOURCE */
 
+#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \
+    defined(_NETBSD_SOURCE)
 /*
  * Special values for utimensat and futimens
  */
 #define UTIME_NOW	((1 << 30) - 1)
 #define UTIME_OMIT	((1 << 30) - 2)
+#endif
 
 #if !defined(_KERNEL) && !defined(_STANDALONE)
 #include <sys/cdefs.h>
@@ -225,10 +248,15 @@ int	stat(const char *, struct stat *) __
 int	fstat(int, struct stat *) __RENAME(__fstat50);
 #endif
 mode_t	umask(mode_t);
+#if (_POSIX_C_SOURCE - 0) >= 200112L || defined(_XOPEN_SOURCE) || \
+    defined(_NETBSD_SOURCE)
+#ifndef __LIBC12_SOURCE__
+int	lstat(const char *, struct stat *) __RENAME(__lstat50);
+#endif
+#endif /* _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE || _NETBSD_SOURCE */
 #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
 int	fchmod(int, mode_t);
 #ifndef __LIBC12_SOURCE__
-int	lstat(const char *, struct stat *) __RENAME(__lstat50);
 int	mknod(const char *, mode_t, dev_t) __RENAME(__mknod50);
 #endif
 #endif /* defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) */
@@ -244,8 +272,8 @@ int	lchmod(const char *, mode_t);
 /*
  * X/Open Extended API set 2 (a.k.a. C063)
  */
-#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0 >= 700) || \
-    defined(_INCOMPLETE_XOPEN_C063) || defined(_NETBSD_SOURCE)
+#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \
+    defined(_NETBSD_SOURCE) || defined(_INCOMPLETE_XOPEN_C063)
 int     fstatat(int, const char *, struct stat *, int);
 int     utimensat(int, const char *, const struct timespec *, int);
 #endif
@@ -254,8 +282,12 @@ int     utimensat(int, const char *, con
 int utimens(const char *, const struct timespec *);
 int lutimens(const char *, const struct timespec *);
 #endif
+
+#if (_POSIX_C_SOURCE - 0) >= 200809L || (_XOPEN_SOURCE - 0) >= 700 || \
+    defined(_NETBSD_SOURCE)
 int futimens(int, const struct timespec *);
 #endif
+#endif
 
 __END_DECLS
 

Reply via email to