Created
November 17, 2017 17:59
-
-
Save kallisti5/d615b29bac9b5a36e64069a4f7426637 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 355e4ad4cef84f516e0e7c521ecc047b3146e73e Mon Sep 17 00:00:00 2001 | |
From: Alexander von Gluck IV <kallisti5@unixzen.com> | |
Date: Thu, 16 Nov 2017 08:00:48 -0600 | |
Subject: [PATCH] libbsd: Move lutimes to bsd compat | |
* Rework be149e8ccf9 since lutimes isn't posix | |
--- | |
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 | 31 ++++++------------------------- | |
5 files changed, 59 insertions(+), 26 deletions(-) | |
create mode 100644 headers/compatibility/bsd/sys/time.h | |
create mode 100644 src/libs/bsd/lutimes.c | |
diff --git a/headers/compatibility/bsd/sys/time.h b/headers/compatibility/bsd/sys/time.h | |
new file mode 100644 | |
index 0000000000..6e71a66813 | |
--- /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 bb1277ddfe..dfa8d8cf23 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 d8e6c604a9..810ae74933 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 0000000000..f43bbf8a83 | |
--- /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@unixzen.com | |
+ */ | |
+ | |
+ | |
+#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 09794ea3c4..b144b06351 100644 | |
--- a/src/system/libroot/posix/sys/utimes.c | |
+++ b/src/system/libroot/posix/sys/utimes.c | |
@@ -16,8 +16,8 @@ | |
#include <syscall_utils.h> | |
-int | |
-utimes(const char* path, const struct timeval times[2]) | |
+extern int | |
+_utimes(const char* path, const struct timeval times[2], bool traverseLink) | |
{ | |
struct stat stat; | |
status_t status; | |
@@ -35,36 +35,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); | |
} | |
-- | |
2.14.3 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment