[haiku-commits] haiku: hrev51556 - src/system/libroot/posix/sys src/libs/bsd headers/compatibility/bsd/sys headers/posix/sys

  • From: kallisti5@xxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 17 Nov 2017 21:30:27 +0100 (CET)

hrev51556 adds 1 changeset to branch 'master'
old head: 015b5dd659e2751c67c6e91d7aa93e1e25b03140
new head: 1d3d336a97538125e6d7884229d2d0cd2076aa85
overview: 
http://cgit.haiku-os.org/haiku/log/?qt=range&q=1d3d336a9753+%5E015b5dd659e2

----------------------------------------------------------------------------

1d3d336a9753: libbsd: Move lutimes to bsd compat
  
  * Rework be149e8ccf9 since lutimes isn't posix

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev51556
Commit:      1d3d336a97538125e6d7884229d2d0cd2076aa85
URL:         http://cgit.haiku-os.org/haiku/commit/?id=1d3d336a9753
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Thu Nov 16 14:00:48 2017 UTC

----------------------------------------------------------------------------

5 files changed, 61 insertions(+), 25 deletions(-)
headers/compatibility/bsd/sys/time.h  | 29 ++++++++++++++++++++++++++++
headers/posix/sys/time.h              |  1 -
src/libs/bsd/Jamfile                  |  1 +
src/libs/bsd/lutimes.c                | 23 ++++++++++++++++++++++
src/system/libroot/posix/sys/utimes.c | 32 ++++++++-----------------------

----------------------------------------------------------------------------

diff --git a/headers/compatibility/bsd/sys/time.h 
b/headers/compatibility/bsd/sys/time.h
new file mode 100644
index 0000000..6e71a66
--- /dev/null
+++ b/headers/compatibility/bsd/sys/time.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2016-2017 Haiku, Inc. All Rights Reserved.
+ * Distributed under the terms of the MIT License.
+ */
+#ifndef _BSD_SYS_TIME_H_
+#define _BSD_SYS_TIME_H_
+
+
+#include_next <sys/time.h>
+
+
+#ifdef _BSD_SOURCE
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int  lutimes(const char *path, const struct timeval times[2]);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
+
+
+#endif  /* _BSD_SYS_TIME_H_ */
diff --git a/headers/posix/sys/time.h b/headers/posix/sys/time.h
index bb1277d..dfa8d8c 100644
--- a/headers/posix/sys/time.h
+++ b/headers/posix/sys/time.h
@@ -44,7 +44,6 @@ extern int    setitimer(int which, const struct itimerval 
*value, struct itimerval
 extern int     gettimeofday(struct timeval *tv, void *tz);
 
 extern int     utimes(const char *path, const struct timeval times[2]);
-extern int     lutimes(const char *path, const struct timeval times[2]);
        /* legacy */
 
 #ifdef __cplusplus
diff --git a/src/libs/bsd/Jamfile b/src/libs/bsd/Jamfile
index d8e6c60..810ae74 100644
--- a/src/libs/bsd/Jamfile
+++ b/src/libs/bsd/Jamfile
@@ -16,6 +16,7 @@ for architectureObject in [ MultiArchSubDirSetup ] {
                        fgetln.c
                        getpass.c
                        issetugid.c
+                       lutimes.c
                        progname.c
                        pty.cpp
                        signal.c
diff --git a/src/libs/bsd/lutimes.c b/src/libs/bsd/lutimes.c
new file mode 100644
index 0000000..f43bbf8
--- /dev/null
+++ b/src/libs/bsd/lutimes.c
@@ -0,0 +1,23 @@
+/*
+ * Copyright, 2016-2017 Haiku, Inc. All rights reserved.
+ * Released under the terms of the MIT license.
+ *
+ * Authors:
+ *             Alexander von Gluck IV, kallisti5@xxxxxxxxxxx
+ */
+
+
+#include <sys/time.h>
+
+#include <OS.h>
+
+
+extern int _utimes(const char* path, const struct timeval times[2],
+       bool traverseLink);
+
+
+int
+lutimes(const char* path, const struct timeval times[2])
+{
+       return _utimes(path, times, false);
+}
diff --git a/src/system/libroot/posix/sys/utimes.c 
b/src/system/libroot/posix/sys/utimes.c
index 09794ea..ad844a9 100644
--- a/src/system/libroot/posix/sys/utimes.c
+++ b/src/system/libroot/posix/sys/utimes.c
@@ -17,7 +17,10 @@
 
 
 int
-utimes(const char* path, const struct timeval times[2])
+_utimes(const char* path, const struct timeval times[2], bool traverseLink);
+
+extern int
+_utimes(const char* path, const struct timeval times[2], bool traverseLink)
 {
        struct stat stat;
        status_t status;
@@ -35,36 +38,17 @@ utimes(const char* path, const struct timeval times[2])
        }
 
        // traverseLeafLink == true
-       status = _kern_write_stat(-1, path, true, &stat, sizeof(struct stat),
-               B_STAT_MODIFICATION_TIME | B_STAT_ACCESS_TIME);
+       status = _kern_write_stat(-1, path, traverseLink, &stat,
+               sizeof(struct stat), B_STAT_MODIFICATION_TIME | 
B_STAT_ACCESS_TIME);
 
        RETURN_AND_SET_ERRNO(status);
 }
 
 
 int
-lutimes(const char* path, const struct timeval times[2])
+utimes(const char* path, const struct timeval times[2])
 {
-       struct stat stat;
-       status_t status;
-
-       if (times != NULL) {
-               stat.st_atim.tv_sec = times[0].tv_sec;
-               stat.st_atim.tv_nsec = times[0].tv_usec * 1000;
-
-               stat.st_mtim.tv_sec = times[1].tv_sec;
-               stat.st_mtim.tv_nsec = times[1].tv_usec * 1000;
-       } else {
-               bigtime_t now = real_time_clock_usecs();
-               stat.st_atim.tv_sec = stat.st_mtim.tv_sec = now / 1000000;
-               stat.st_atim.tv_nsec = stat.st_mtim.tv_nsec = (now % 1000000) * 
1000;
-       }
-
-       // traverseLeafLink == false
-       status = _kern_write_stat(-1, path, false, &stat, sizeof(struct stat),
-               B_STAT_MODIFICATION_TIME | B_STAT_ACCESS_TIME);
-
-       RETURN_AND_SET_ERRNO(status);
+       return _utimes(path, times, true);
 }
 
 


Other related posts:

  • » [haiku-commits] haiku: hrev51556 - src/system/libroot/posix/sys src/libs/bsd headers/compatibility/bsd/sys headers/posix/sys - kallisti5