]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Y2038: add function __utime64
authorAlbert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Thu, 7 Sep 2017 22:42:06 +0000 (00:42 +0200)
committerAlbert ARIBAUD (3ADEV) <albert.aribaud@3adev.fr>
Wed, 24 Oct 2018 10:53:27 +0000 (12:53 +0200)
include/utime.h
io/Makefile
io/Versions
io/utime.c
sysdeps/posix/utime64.c [new file with mode: 0644]

index 504925131181c8e554ed607d127cae9408ad66d5..eb907f7472424c742a0b8943b580902caf419ebc 100644 (file)
@@ -6,4 +6,11 @@
 libc_hidden_proto (utime)
 #endif
 
+/* Structure describing file times, 64-bit time version.  */
+struct __utimbuf64
+  {
+    __time64_t actime;         /* Access time.  */
+    __time64_t modtime;                /* Modification time.  */
+  };
+
 #endif /* utime.h */
index ec5c6d7a2fb8791447e00952ca9c86a952bd941d..34075a83e4e5480589da59585fe5049da2caf877 100644 (file)
@@ -28,7 +28,7 @@ headers := sys/stat.h bits/stat.h sys/statfs.h bits/statfs.h sys/vfs.h \
           bits/statx.h utime.h ftw.h fts.h sys/sendfile.h
 
 routines :=                                                            \
-       utime                                                           \
+       utime utime64                                                   \
        mkfifo mkfifoat                                                 \
        stat fstat lstat stat64 fstat64 lstat64 fstatat fstatat64       \
        xstat fxstat lxstat xstat64 fxstat64 lxstat64 statx             \
index 90956fed00f3cc6713f1261f5b3610fb7e78b4fa..58dca727d9dd27e93becadd5de21366d703a3996 100644 (file)
@@ -137,6 +137,7 @@ libc {
     __xstat64_time64;
     __lxstat64_time64;
     __fxstatat64_time64;
+    __utime64;
   }
   GLIBC_PRIVATE {
     __libc_fcntl64;
index 3f3c03c92dc59fbbf8ae8e36247f80c5c69f3054..b33296b7eec2b6bb6dafb2c2ca130db7cf839020 100644 (file)
@@ -38,3 +38,19 @@ utime (const char *file, const struct utimbuf *times)
 libc_hidden_def (utime)
 
 stub_warning (utime)
+
+/* 64-bit time version */
+
+int
+__utime64 (const char *file, const struct __utimbuf64 *times)
+{
+  if (file == NULL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  __set_errno (ENOSYS);
+  return -1;
+}
+stub_warning (__utime64)
diff --git a/sysdeps/posix/utime64.c b/sysdeps/posix/utime64.c
new file mode 100644 (file)
index 0000000..1f043da
--- /dev/null
@@ -0,0 +1,46 @@
+/* Copyright (C) 1991-2018 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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+#include <errno.h>
+#include <utime.h>
+#include <time.h>
+#include <sys/types.h>
+#include <sys/time.h>
+
+
+/* Set the access and modification times of FILE to those given in TIMES.
+   If TIMES is NULL, set them to the current time.  */
+int
+__utime64 (const char *file, const struct __utimbuf64 *times)
+{
+  struct __timeval64 timevals[2];
+  struct __timeval64 *tvp;
+
+  if (times != NULL)
+    {
+      timevals[0].tv_sec = (time_t) times->actime;
+      timevals[0].tv_usec = 0L;
+      timevals[1].tv_sec = (time_t) times->modtime;
+      timevals[1].tv_usec = 0L;
+      tvp = timevals;
+    }
+  else
+    tvp = NULL;
+
+  return __utimes64 (file, tvp);
+}