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