* time/sys/time.h [__USE_BSD] (lutimes, futimes): Declare them.

* manual/filesys.texi (File Times): Document lutimes and futimes.
	* misc/Makefile (routines): Add them.
	* misc/Versions (libc: GLIBC_2.3): Likewise.
	* sysdeps/generic/lutimes.c: New file.
	* sysdeps/generic/futimes.c: New file.
	* sysdeps/mach/hurd/lutimes.c: New file.
	* sysdeps/mach/hurd/futimes.c: New file.

	* manual/filesys.texi (File Times): Add explicit note about null
	pointer argument to utimes.

2002-08-26  Roland McGrath  <roland@frob.com>

	* sysdeps/mach/hurd/ifreq.h (__if_freereq): Add missing semicolon.
	(__ifreq): Add a cast.  Remove an unused variable.

	* hurd/hurd/threadvar.h (enum __hurd_threadvar_index): Add
	_HURD_THREADVAR_LOCALE.
This commit is contained in:
Roland McGrath 2002-08-27 02:10:01 +00:00
parent d387cc3fff
commit 20acbc2542
10 changed files with 260 additions and 8 deletions

View File

@ -1,3 +1,25 @@
2002-08-26 Roland McGrath <roland@redhat.com>
* time/sys/time.h [__USE_BSD] (lutimes, futimes): Declare them.
* manual/filesys.texi (File Times): Document lutimes and futimes.
* misc/Makefile (routines): Add them.
* misc/Versions (libc: GLIBC_2.3): Likewise.
* sysdeps/generic/lutimes.c: New file.
* sysdeps/generic/futimes.c: New file.
* sysdeps/mach/hurd/lutimes.c: New file.
* sysdeps/mach/hurd/futimes.c: New file.
* manual/filesys.texi (File Times): Add explicit note about null
pointer argument to utimes.
2002-08-26 Roland McGrath <roland@frob.com>
* sysdeps/mach/hurd/ifreq.h (__if_freereq): Add missing semicolon.
(__ifreq): Add a cast. Remove an unused variable.
* hurd/hurd/threadvar.h (enum __hurd_threadvar_index): Add
_HURD_THREADVAR_LOCALE.
2002-08-26 Jakub Jelinek <jakub@redhat.com>
* posix/regexec.c (re_search_stub): Return correct match length

View File

@ -2722,12 +2722,61 @@ in the header file @file{sys/time.h}.
This function sets the file access and modification times of the file
@var{filename}. The new file access time is specified by
@code{@var{tvp}[0]}, and the new modification time by
@code{@var{tvp}[1]}. This function comes from BSD.
@code{@var{tvp}[1]}. Similar to @code{utime}, if @var{tvp} is a null
pointer then the access and modification times of the file are set to
the current time. This function comes from BSD.
The return values and error conditions are the same as for the @code{utime}
function.
@end deftypefun
@comment sys/time.h
@comment BSD
@deftypefun int lutimes (const char *@var{filename}, struct timeval @var{tvp}@t{[2]})
This function is like @code{utimes}, except that it does not follow
symbolic links. If @var{filename} is the name of a symbolic link,
@code{lutimes} sets the file access and modification times of the
symbolic link special file itself (as seen by @code{lstat};
@pxref{Symbolic Links}) while @code{utimes} sets the file access and
modification times of the file the symbolic link refers to. This
function comes from FreeBSD, and is not available on all platforms (if
not available, it will fail with @code{ENOSYS}).
The return values and error conditions are the same as for the @code{utime}
function.
@end deftypefun
@comment sys/time.h
@comment BSD
@deftypefun int futimes (int *@var{fd}, struct timeval @var{tvp}@t{[2]})
This function is like @code{utimes}, except that it takes an open file
descriptor as an argument instead of a file name. @xref{Low-Level
I/O}. This function comes from FreeBSD, and is not available on all
platforms (if not available, it will fail with @code{ENOSYS}).
Like @code{utimes}, @code{futimes} returns @code{0} on success and @code{-1}
on failure. The following @code{errno} error conditions are defined for
@code{futimes}:
@table @code
@item EACCES
There is a permission problem in the case where a null pointer was
passed as the @var{times} argument. In order to update the time stamp on
the file, you must either be the owner of the file, have write
permission for the file, or be a privileged user.
@item EBADF
The @var{filedes} argument is not a valid file descriptor.
@item EPERM
If the @var{times} argument is not a null pointer, you must either be
the owner of the file or be a privileged user.
@item EROFS
The file lives on a read-only file system.
@end table
@end deftypefun
@node File Size
@subsection File Size

View File

@ -47,7 +47,7 @@ routines := brk sbrk sstk ioctl \
gtty stty \
ptrace \
fstab mntent mntent_r \
utimes \
utimes lutimes futimes \
truncate ftruncate truncate64 ftruncate64 \
chflags fchflags \
insremque getttyent getusershell getpass ttyslot \

View File

@ -111,6 +111,7 @@ libc {
GLIBC_2.3 {
# f*
fgetxattr; flistxattr; fremovexattr; fsetxattr;
futimes;
# g*
getxattr;
@ -118,6 +119,7 @@ libc {
# l*
listxattr;
lgetxattr; llistxattr; lremovexattr; lsetxattr;
lutimes;
# r*
removexattr;

34
sysdeps/generic/futimes.c Normal file
View File

@ -0,0 +1,34 @@
/* futimes -- change access and modification times of open file. Stub version.
Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <sys/time.h>
#include <errno.h>
/* Change the access time of FILE to TVP[0] and
the modification time of FILE to TVP[1], but do not follow symlinks. */
int
__futimes (int fd, const struct timeval tvp[2])
{
__set_errno (ENOSYS);
return -1;
}
weak_alias (__futimes, futimes)
stub_warning (futimes)
#include <stub-tag.h>

35
sysdeps/generic/lutimes.c Normal file
View File

@ -0,0 +1,35 @@
/* lutimes -- change access and modification times of a symlink. Stub version.
Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <sys/time.h>
#include <errno.h>
#include <stddef.h>
/* Change the access time of FILE to TVP[0] and
the modification time of FILE to TVP[1], but do not follow symlinks. */
int
__lutimes (const char *file, const struct timeval tvp[2])
{
__set_errno (ENOSYS);
return -1;
}
weak_alias (__lutimes, lutimes)
stub_warning (lutimes)
#include <stub-tag.h>

View File

@ -0,0 +1,47 @@
/* futimes -- change access and modification times of open file. Hurd version.
Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <sys/time.h>
#include <errno.h>
#include <stddef.h>
#include <hurd.h>
#include <hurd/fd.h>
/* Change the access time of FD to TVP[0] and
the modification time of FD to TVP[1]. */
int
__futimes (int fd, const struct timeval tvp[2])
{
struct timeval timevals[2];
error_t err;
if (tvp == NULL)
{
/* Setting the number of microseconds to `-1' tells the
underlying filesystems to use the current time. */
timevals[1].tv_usec = timevals[0].tv_usec = (time_t)-1;
tvp = timevals;
}
err = HURD_DPORT_USE (fd, __file_utimes (port,
*(time_value_t *) &tvp[0],
*(time_value_t *) &tvp[1]));
return err ? __hurd_dfail (fd, err) : 0;
}
weak_alias (__futimes, futimes)

View File

@ -27,7 +27,6 @@
static inline void
__ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd)
{
struct ifconf ifc;
file_t server;
server = _hurd_socket_server (PF_INET, 0);
@ -49,7 +48,7 @@ __ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd)
server = _hurd_socket_server (PF_INET, 1);
if (server == MACH_PORT_NULL)
goto out;
err = __pfinet_siocgifconf (server, -1, ifreqs, &len);
err = __pfinet_siocgifconf (server, -1, (data_t *) ifreqs, &len);
}
if (err)
goto out;
@ -70,5 +69,5 @@ __ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd)
static inline void
__if_freereq (struct ifreq *ifreqs, int num_ifs)
{
munmap (ifreqs, num_ifs * sizeof (struct ifreq))
__munmap (ifreqs, num_ifs * sizeof (struct ifreq));
}

View File

@ -0,0 +1,53 @@
/* lutimes -- change access and modification times of a symlink. Hurd version.
Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <sys/time.h>
#include <errno.h>
#include <stddef.h>
#include <hurd.h>
#include <fcntl.h>
/* Change the access time of FILE to TVP[0] and
the modification time of FILE to TVP[1]. */
int
__lutimes (const char *file, const struct timeval tvp[2])
{
struct timeval timevals[2];
error_t err;
file_t port;
if (tvp == NULL)
{
/* Setting the number of microseconds to `-1' tells the
underlying filesystems to use the current time. */
timevals[1].tv_usec = timevals[0].tv_usec = (time_t)-1;
tvp = timevals;
}
port = __file_name_lookup (file, O_NOLINK, 0);
if (port == MACH_PORT_NULL)
return -1;
err = __file_utimes (port,
*(time_value_t *) &tvp[0], *(time_value_t *) &tvp[1]);
__mach_port_deallocate (__mach_task_self (), port);
if (err)
return __hurd_fail (err);
return 0;
}
weak_alias (__lutimes, lutimes)

View File

@ -1,4 +1,5 @@
/* Copyright (C) 1991-1994,96,97,98,99,2000,2001 Free Software Foundation, Inc.
/* Copyright (C) 1991-1994,96,97,98,99,2000,01,02
Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -132,11 +133,21 @@ extern int setitimer (__itimer_which_t __which,
__const struct itimerval *__restrict __new,
struct itimerval *__restrict __old) __THROW;
/* Change the access time of FILE to TVP[0] and
the modification time of FILE to TVP[1]. */
/* Change the access time of FILE to TVP[0] and the modification time of
FILE to TVP[1]. If TVP is a null pointer, use the current time instead.
Returns 0 on success, -1 on errors. */
extern int utimes (__const char *__file, __const struct timeval __tvp[2])
__THROW;
#ifdef __USE_BSD
/* Same as `utimes', but does not follow symbolic links. */
extern int lutimes (__const char *__file, __const struct timeval __tvp[2])
__THROW;
/* Same as `utimes', but takes an open file descriptor instead of a name. */
extern int futimes (int fd, __const struct timeval __tvp[2]) __THROW;
#endif
#ifdef __USE_BSD
/* Convenience macros for operations on timevals.