svn commit: r301763 - in head: . tools/build

Jilles Tjoelker jilles at FreeBSD.org
Thu Jun 9 21:57:35 UTC 2016


Author: jilles
Date: Thu Jun  9 21:57:34 2016
New Revision: 301763
URL: https://svnweb.freebsd.org/changeset/base/301763

Log:
  build: Add legacy support for futimens() and utimensat().
  
  In order to allow using utimensat() in install(1), add futimens() and
  utimensat() to -legacy.
  
  The files futimens.c and utimensat.c are modified copies of the files under
  lib/libc/sys/ since the libc versions use symbols that do not exist in the
  libc on the build system (sys_futimens and sys_utimensat) . I expect the
  next non-sweeping change to both sets of files to be to delete them, anyway.
  
  This will allow reverting r299942 (which is a revert of r299850) enabling
  nanosecond timestamps in install(1).
  
  Reviewed by:	bdrewery

Added:
  head/tools/build/futimens.c
     - copied, changed from r301311, head/lib/libc/sys/futimens.c
  head/tools/build/stat.h   (contents, props changed)
  head/tools/build/utimensat.c
     - copied, changed from r301311, head/lib/libc/sys/utimensat.c
Modified:
  head/Makefile.inc1
  head/tools/build/Makefile

Modified: head/Makefile.inc1
==============================================================================
--- head/Makefile.inc1	Thu Jun  9 21:19:46 2016	(r301762)
+++ head/Makefile.inc1	Thu Jun  9 21:57:34 2016	(r301763)
@@ -646,6 +646,8 @@ _worldtmp: .PHONY
 	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.groff.dist \
 	    -p ${WORLDTMP}/legacy/usr >/dev/null
 .endif
+	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
+	    -p ${WORLDTMP}/legacy/usr/include >/dev/null
 	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
 	    -p ${WORLDTMP}/usr >/dev/null
 	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \

Modified: head/tools/build/Makefile
==============================================================================
--- head/tools/build/Makefile	Thu Jun  9 21:19:46 2016	(r301762)
+++ head/tools/build/Makefile	Thu Jun  9 21:57:34 2016	(r301763)
@@ -4,9 +4,11 @@
 
 LIB=		egacy
 SRC=
-INCSGROUPS=	INCS
+INCSGROUPS=	INCS SYSINCS
 INCS=
 
+SYSINCSDIR=	${INCLUDEDIR}/sys
+
 BOOTSTRAPPING?=	0
 
 _WITH_PWCACHEDB!= grep -c pwcache_groupdb /usr/include/grp.h || true
@@ -33,6 +35,12 @@ SRCS+=		reallocarray.c
 CFLAGS+=	-I${.CURDIR}/../../lib/libc/include
 .endif
 
+_WITH_UTIMENS!= grep -c utimensat /usr/include/sys/stat.h || true
+.if ${_WITH_UTIMENS} == 0
+SYSINCS+=	stat.h
+SRCS+=		futimens.c utimensat.c
+.endif
+
 .if empty(SRCS)
 SRCS=		dummy.c
 .endif

Copied and modified: head/tools/build/futimens.c (from r301311, head/lib/libc/sys/futimens.c)
==============================================================================
--- head/lib/libc/sys/futimens.c	Sat Jun  4 10:19:07 2016	(r301311, copy source)
+++ head/tools/build/futimens.c	Thu Jun  9 21:57:34 2016	(r301763)
@@ -27,15 +27,16 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
-#include "namespace.h"
 #include <sys/stat.h>
 
 #include <errno.h>
 #include <fcntl.h>
 #include <time.h>
-#include "un-namespace.h"
 
-#include "libc_private.h"
+#ifndef	UTIME_NOW
+#define	UTIME_NOW	-1
+#define	UTIME_OMIT	-2
+#endif
 
 int
 futimens(int fd, const struct timespec times[2])
@@ -44,11 +45,6 @@ futimens(int fd, const struct timespec t
 	struct stat sb;
 	int osreldate;
 
-	osreldate = __getosreldate();
-	if (osreldate >= 1100056 ||
-	    (osreldate >= 1002506 && osreldate < 1100000))
-		return (__sys_futimens(fd, times));
-
 	if (times == NULL || (times[0].tv_nsec == UTIME_NOW &&
 	    times[1].tv_nsec == UTIME_NOW))
 		tvp = NULL;
@@ -75,7 +71,7 @@ futimens(int fd, const struct timespec t
 		tvp = tv;
 		if (times[0].tv_nsec == UTIME_OMIT ||
 		    times[1].tv_nsec == UTIME_OMIT) {
-			if (_fstat(fd, &sb) == -1)
+			if (fstat(fd, &sb) == -1)
 				return (-1);
 			if (times[0].tv_nsec == UTIME_OMIT) {
 				tv[0].tv_sec = sb.st_atim.tv_sec;

Added: head/tools/build/stat.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tools/build/stat.h	Thu Jun  9 21:57:34 2016	(r301763)
@@ -0,0 +1,46 @@
+/*-
+ * Copyright (c) 2016 Jilles Tjoelker <jilles at FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _LEGACY_SYS_STAT_H_
+#define	_LEGACY_SYS_STAT_H_
+
+#include_next <sys/stat.h>
+
+#ifndef	UTIME_NOW
+#define	UTIME_NOW	-1
+#define	UTIME_OMIT	-2
+#endif
+
+__BEGIN_DECLS
+
+int futimens(int, const struct timespec *);
+int utimensat(int, const char *, const struct timespec *, int);
+
+__END_DECLS
+
+#endif /* !_LEGACY_SYS_STAT_H_ */

Copied and modified: head/tools/build/utimensat.c (from r301311, head/lib/libc/sys/utimensat.c)
==============================================================================
--- head/lib/libc/sys/utimensat.c	Sat Jun  4 10:19:07 2016	(r301311, copy source)
+++ head/tools/build/utimensat.c	Thu Jun  9 21:57:34 2016	(r301763)
@@ -27,15 +27,16 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
-#include "namespace.h"
 #include <sys/stat.h>
 
 #include <errno.h>
 #include <fcntl.h>
 #include <time.h>
-#include "un-namespace.h"
 
-#include "libc_private.h"
+#ifndef	UTIME_NOW
+#define	UTIME_NOW	-1
+#define	UTIME_OMIT	-2
+#endif
 
 int
 utimensat(int fd, const char *path, const struct timespec times[2], int flag)
@@ -44,11 +45,6 @@ utimensat(int fd, const char *path, cons
 	struct stat sb;
 	int osreldate;
 
-	osreldate = __getosreldate();
-	if (osreldate >= 1100056 ||
-	    (osreldate >= 1002506 && osreldate < 1100000))
-		return (__sys_utimensat(fd, path, times, flag));
-
 	if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0) {
 		errno = EINVAL;
 		return (-1);


More information about the svn-src-all mailing list