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);
}