The branch main has been updated by markj:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=245ff4c4b2c2728674121a5d9736a5e079bd00b2

commit 245ff4c4b2c2728674121a5d9736a5e079bd00b2
Author:     Mark Johnston <ma...@freebsd.org>
AuthorDate: 2025-07-03 20:08:59 +0000
Commit:     Mark Johnston <ma...@freebsd.org>
CommitDate: 2025-07-04 14:42:33 +0000

    libc: Add inotify support
    
    inotify_init() and inotify_init1() are implemented using __specialfd(2).
    inotify_add_watch() is implemented in terms of inotify_add_watch_at(2).
    
    Reviewed by:    kib
    MFC after:      3 months
    Sponsored by:   Klara, Inc.
    Differential Revision:  https://reviews.freebsd.org/D50315
---
 lib/libc/gen/Makefile.inc |  1 +
 lib/libc/gen/Symbol.map   |  3 +++
 lib/libc/gen/inotify.c    | 48 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 52 insertions(+)

diff --git a/lib/libc/gen/Makefile.inc b/lib/libc/gen/Makefile.inc
index ad13aaa65621..4d064d18d36e 100644
--- a/lib/libc/gen/Makefile.inc
+++ b/lib/libc/gen/Makefile.inc
@@ -89,6 +89,7 @@ SRCS+= \
        glob.c \
        glob-compat11.c \
        initgroups.c \
+       inotify.c \
        isatty.c \
        isinf.c \
        isnan.c \
diff --git a/lib/libc/gen/Symbol.map b/lib/libc/gen/Symbol.map
index 8faecf4b3048..50dbf3425964 100644
--- a/lib/libc/gen/Symbol.map
+++ b/lib/libc/gen/Symbol.map
@@ -464,6 +464,9 @@ FBSD_1.8 {
        fdscandir_b;
        fts_open_b;
        glob_b;
+       inotify_add_watch;
+       inotify_init;
+       inotify_init1;
        psiginfo;
        rtld_get_var;
        rtld_set_var;
diff --git a/lib/libc/gen/inotify.c b/lib/libc/gen/inotify.c
new file mode 100644
index 000000000000..7ce53aaccd58
--- /dev/null
+++ b/lib/libc/gen/inotify.c
@@ -0,0 +1,48 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2025 Klara, Inc.
+ */
+
+#include "namespace.h"
+#include <sys/fcntl.h>
+#include <sys/inotify.h>
+#include <sys/specialfd.h>
+#include "un-namespace.h"
+#include "libc_private.h"
+
+/*
+ * Provide compatibility with libinotify, which uses different values for these
+ * flags.
+ */
+#define        IN_NONBLOCK_OLD 0x80000
+#define        IN_CLOEXEC_OLD  0x00800
+
+int
+inotify_add_watch(int fd, const char *pathname, uint32_t mask)
+{
+       return (inotify_add_watch_at(fd, AT_FDCWD, pathname, mask));
+}
+
+int
+inotify_init1(int flags)
+{
+       struct specialfd_inotify args;
+
+       if ((flags & IN_NONBLOCK_OLD) != 0) {
+               flags &= ~IN_NONBLOCK_OLD;
+               flags |= IN_NONBLOCK;
+       }
+       if ((flags & IN_CLOEXEC_OLD) != 0) {
+               flags &= ~IN_CLOEXEC_OLD;
+               flags |= IN_CLOEXEC;
+       }
+       args.flags = flags;
+       return (__sys___specialfd(SPECIALFD_INOTIFY, &args, sizeof(args)));
+}
+
+int
+inotify_init(void)
+{
+       return (inotify_init1(0));
+}

Reply via email to