libc: Remove futimens() and utimensat() compat stubs.
The futimens() and utimensat() compat stubs allowed using these functions on kernels that did not have the system calls yet (10.2, old 11-current). Also remove the documentation of the [ENOTSUP] error that could occur with an old kernel. A -DNO_CLEAN build may fail because the depend files refer to the deleted files.
This commit is contained in:
parent
3a286197d0
commit
e0e0323354
@ -37,10 +37,6 @@ SRCS+= \
|
||||
|
||||
SRCS+= getdents.c lstat.c mknod.c stat.c
|
||||
|
||||
SRCS+= futimens.c utimensat.c
|
||||
NOASM+= futimens.o utimensat.o
|
||||
PSEUDO+= _futimens.o _utimensat.o
|
||||
|
||||
SRCS+= pipe.c
|
||||
|
||||
INTERPOSED = \
|
||||
|
@ -1,100 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Jilles Tjoelker
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#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"
|
||||
|
||||
int
|
||||
futimens(int fd, const struct timespec times[2])
|
||||
{
|
||||
struct timeval now, tv[2], *tvp;
|
||||
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;
|
||||
else if (times[0].tv_nsec == UTIME_OMIT &&
|
||||
times[1].tv_nsec == UTIME_OMIT)
|
||||
return (0);
|
||||
else {
|
||||
if ((times[0].tv_nsec < 0 || times[0].tv_nsec > 999999999) &&
|
||||
times[0].tv_nsec != UTIME_NOW &&
|
||||
times[0].tv_nsec != UTIME_OMIT) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
if ((times[1].tv_nsec < 0 || times[1].tv_nsec > 999999999) &&
|
||||
times[1].tv_nsec != UTIME_NOW &&
|
||||
times[1].tv_nsec != UTIME_OMIT) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
tv[0].tv_sec = times[0].tv_sec;
|
||||
tv[0].tv_usec = times[0].tv_nsec / 1000;
|
||||
tv[1].tv_sec = times[1].tv_sec;
|
||||
tv[1].tv_usec = times[1].tv_nsec / 1000;
|
||||
tvp = tv;
|
||||
if (times[0].tv_nsec == UTIME_OMIT ||
|
||||
times[1].tv_nsec == UTIME_OMIT) {
|
||||
if (_fstat(fd, &sb) == -1)
|
||||
return (-1);
|
||||
if (times[0].tv_nsec == UTIME_OMIT) {
|
||||
tv[0].tv_sec = sb.st_atim.tv_sec;
|
||||
tv[0].tv_usec = sb.st_atim.tv_nsec / 1000;
|
||||
}
|
||||
if (times[1].tv_nsec == UTIME_OMIT) {
|
||||
tv[1].tv_sec = sb.st_mtim.tv_sec;
|
||||
tv[1].tv_usec = sb.st_mtim.tv_nsec / 1000;
|
||||
}
|
||||
}
|
||||
if (times[0].tv_nsec == UTIME_NOW ||
|
||||
times[1].tv_nsec == UTIME_NOW) {
|
||||
if (gettimeofday(&now, NULL) == -1)
|
||||
return (-1);
|
||||
if (times[0].tv_nsec == UTIME_NOW)
|
||||
tv[0] = now;
|
||||
if (times[1].tv_nsec == UTIME_NOW)
|
||||
tv[1] = now;
|
||||
}
|
||||
}
|
||||
return (futimes(fd, tvp));
|
||||
}
|
@ -31,7 +31,7 @@
|
||||
.\" @(#)utimes.2 8.1 (Berkeley) 6/4/93
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd January 17, 2016
|
||||
.Dd June 7, 2017
|
||||
.Dt UTIMENSAT 2
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -267,10 +267,6 @@ argument is not an absolute path and
|
||||
is neither
|
||||
.Dv AT_FDCWD
|
||||
nor a file descriptor associated with a directory.
|
||||
.It Bq Er ENOTSUP
|
||||
The running kernel does not support this system call and
|
||||
.Dv AT_SYMLINK_NOFOLLOW
|
||||
is used with a path relative to a file descriptor.
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr chflags 2 ,
|
||||
|
@ -1,112 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Jilles Tjoelker
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#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"
|
||||
|
||||
int
|
||||
utimensat(int fd, const char *path, const struct timespec times[2], int flag)
|
||||
{
|
||||
struct timeval now, tv[2], *tvp;
|
||||
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);
|
||||
}
|
||||
if (times == NULL || (times[0].tv_nsec == UTIME_NOW &&
|
||||
times[1].tv_nsec == UTIME_NOW))
|
||||
tvp = NULL;
|
||||
else if (times[0].tv_nsec == UTIME_OMIT &&
|
||||
times[1].tv_nsec == UTIME_OMIT)
|
||||
return (0);
|
||||
else {
|
||||
if ((times[0].tv_nsec < 0 || times[0].tv_nsec > 999999999) &&
|
||||
times[0].tv_nsec != UTIME_NOW &&
|
||||
times[0].tv_nsec != UTIME_OMIT) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
if ((times[1].tv_nsec < 0 || times[1].tv_nsec > 999999999) &&
|
||||
times[1].tv_nsec != UTIME_NOW &&
|
||||
times[1].tv_nsec != UTIME_OMIT) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
tv[0].tv_sec = times[0].tv_sec;
|
||||
tv[0].tv_usec = times[0].tv_nsec / 1000;
|
||||
tv[1].tv_sec = times[1].tv_sec;
|
||||
tv[1].tv_usec = times[1].tv_nsec / 1000;
|
||||
tvp = tv;
|
||||
if (times[0].tv_nsec == UTIME_OMIT ||
|
||||
times[1].tv_nsec == UTIME_OMIT) {
|
||||
if (fstatat(fd, path, &sb, flag) == -1)
|
||||
return (-1);
|
||||
if (times[0].tv_nsec == UTIME_OMIT) {
|
||||
tv[0].tv_sec = sb.st_atim.tv_sec;
|
||||
tv[0].tv_usec = sb.st_atim.tv_nsec / 1000;
|
||||
}
|
||||
if (times[1].tv_nsec == UTIME_OMIT) {
|
||||
tv[1].tv_sec = sb.st_mtim.tv_sec;
|
||||
tv[1].tv_usec = sb.st_mtim.tv_nsec / 1000;
|
||||
}
|
||||
}
|
||||
if (times[0].tv_nsec == UTIME_NOW ||
|
||||
times[1].tv_nsec == UTIME_NOW) {
|
||||
if (gettimeofday(&now, NULL) == -1)
|
||||
return (-1);
|
||||
if (times[0].tv_nsec == UTIME_NOW)
|
||||
tv[0] = now;
|
||||
if (times[1].tv_nsec == UTIME_NOW)
|
||||
tv[1] = now;
|
||||
}
|
||||
}
|
||||
if ((flag & AT_SYMLINK_NOFOLLOW) == 0)
|
||||
return (futimesat(fd, path, tvp));
|
||||
else if ((flag & AT_SYMLINK_NOFOLLOW) != 0 &&
|
||||
(fd == AT_FDCWD || path[0] == '/'))
|
||||
return (lutimes(path, tvp));
|
||||
else {
|
||||
errno = ENOTSUP;
|
||||
return (-1);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user