Skip to content

Instantly share code, notes, and snippets.

@kallisti5
Created November 17, 2017 17:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kallisti5/d615b29bac9b5a36e64069a4f7426637 to your computer and use it in GitHub Desktop.
Save kallisti5/d615b29bac9b5a36e64069a4f7426637 to your computer and use it in GitHub Desktop.
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