aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Araps <dylan.araps@gmail.com>2026-03-01 09:18:26 +0200
committerDylan Araps <dylan.araps@gmail.com>2026-03-01 09:18:26 +0200
commit047718235df457cae482eb0f92b06697964f37a6 (patch)
treeeb63e295dd0cc1b12f4027f125c0415f6c66f803
parent4d9826548a8ea82a71cf70e9f60704909966d038 (diff)
dfm: add initial macOS support.
Thanks to Pinix for the report and necessary changes.
-rw-r--r--config.h.in6
-rw-r--r--dfm.c16
-rw-r--r--platform/apple.h65
-rw-r--r--platform/linux.h4
-rw-r--r--platform/posix.h6
5 files changed, 88 insertions, 9 deletions
diff --git a/config.h.in b/config.h.in
index d4f1218..933ce46 100644
--- a/config.h.in
+++ b/config.h.in
@@ -170,10 +170,14 @@
//
// OS specific flags.
//
-#ifdef __linux__
+#if defined(__linux__)
#define _GNU_SOURCE
#define _BSD_SOURCE
#define _POSIX_C_SOURCE 200809L
+
+#elif defined(__APPLE__)
+#define _DARWIN_C_SOURCE
+#define _POSIX_C_SOURCE 200809L
#endif
//
diff --git a/dfm.c b/dfm.c
index ba9acbf..630b05f 100644
--- a/dfm.c
+++ b/dfm.c
@@ -64,8 +64,10 @@
#include "lib/util.h"
#include "lib/vt.h"
-#ifdef __linux__
+#if defined(__linux__)
#include "platform/linux.h"
+#elif defined(__APPLE__)
+#include "platform/apple.h"
#else
#include "platform/posix.h"
#endif
@@ -421,7 +423,7 @@ ent_map_stat(u64 *e, const struct stat *s, u8 t)
e:
ent_set(e, TYPE, t);
ent_set(e, PERM, s->st_mode & 07777);
- ent_set(e, TIME, ent_time_encode(s->st_mtime));
+ ent_set(e, TIME, ent_time_encode(s->ST_MTIM));
}
static inline void
@@ -726,11 +728,11 @@ fm_file_type(mode_t m)
}
static inline void
-str_push_time(str *s, s64 tz, const struct timespec *ts)
+str_push_time(str *s, s64 tz, time_t ts)
{
s32 y; u32 m; u32 d;
u32 H; u32 M; u32 S;
- ut_to_date_time(tz, ts->tv_sec, &y, &m, &d, &H, &M, &S);
+ ut_to_date_time(tz, ts, &y, &m, &d, &H, &M, &S);
str_push_u32_p(s, y, '0', 2);
str_push_c(s, '-');
str_push_u32_p(s, m, '0', 2);
@@ -2779,15 +2781,15 @@ act_stat(struct fm *p)
STR_PUSH(&p->io, VT_CR VT_LF);
STR_PUSH(&p->io, "Access: ");
- str_push_time(&p->io, p->tz, &st.st_atim);
+ str_push_time(&p->io, p->tz, st.ST_ATIM);
STR_PUSH(&p->io, VT_CR VT_LF);
STR_PUSH(&p->io, "Modify: ");
- str_push_time(&p->io, p->tz, &st.st_mtim);
+ str_push_time(&p->io, p->tz, st.ST_MTIM);
STR_PUSH(&p->io, VT_CR VT_LF);
STR_PUSH(&p->io, "Change: ");
- str_push_time(&p->io, p->tz, &st.st_ctim);
+ str_push_time(&p->io, p->tz, st.ST_CTIM);
STR_PUSH(&p->io, VT_CR VT_LF);
STR_PUSH(&p->io, VT_CR VT_LF "Press any key...");
diff --git a/platform/apple.h b/platform/apple.h
new file mode 100644
index 0000000..180c4f6
--- /dev/null
+++ b/platform/apple.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2026 Dylan Araps
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#ifndef DFM_PLATFORM_APPLE_H
+#define DFM_PLATFORM_APPLE_H
+
+#include <stddef.h>
+
+#define ST_ATIM st_atimespec.tv_sec
+#define ST_MTIM st_mtimespec.tv_sec
+#define ST_CTIM st_ctimespec.tv_sec
+
+struct platform {
+ void *_pad;
+};
+
+static inline int
+fs_watch_init(struct platform *p)
+{
+ (void) p;
+ return 0;
+}
+
+static inline void
+fs_watch(struct platform *p, const char *s)
+{
+ (void) p;
+ (void) s;
+}
+
+static inline int
+fs_watch_pump(struct platform *p, const char **s, size_t *l)
+{
+ (void) p;
+ (void) s;
+ (void) l;
+ return 0;
+}
+
+static inline void
+fs_watch_free(struct platform *p)
+{
+ (void) p;
+}
+
+#endif // DFM_PLATFORM_APPLE_H
+
diff --git a/platform/linux.h b/platform/linux.h
index 09b972d..2fd6718 100644
--- a/platform/linux.h
+++ b/platform/linux.h
@@ -31,6 +31,10 @@
#include "../lib/util.h"
+#define ST_ATIM st_atim.tv_sec
+#define ST_MTIM st_mtim.tv_sec
+#define ST_CTIM st_ctim.tv_sec
+
struct platform {
int inotify_wd;
int inotify_fd;
diff --git a/platform/posix.h b/platform/posix.h
index d098030..611e569 100644
--- a/platform/posix.h
+++ b/platform/posix.h
@@ -24,6 +24,10 @@
#include <stddef.h>
+#define ST_ATIM(s) st_atime
+#define ST_MTIM(s) st_mtime
+#define ST_CTIM(s) st_ctime
+
struct platform {
void *_pad;
};
@@ -58,4 +62,4 @@ fs_watch_free(struct platform *p)
}
#endif // DFM_PLATFORM_POSIX_H
-
+