Hi John
uClibc-0.9.27 in petalinux-v0.30-rc1 does not have inotify userspace
headers. These headers were added in uClibc-0.9.29.
Attached patch is backported from uClibc-0.9.29 with a trivial
modification to the Makefile. The revision number of this patch in
uClibc subversion repository is 15450.
If you have plans to move to uClibc-0.9.29 anytime soon this patch is
not required. If not, please consider applying.
-Arun
------------------------------------------------------------------------
From: Arun Bhanu <arun@xxxxxxxxx>
Date: Wed, 4 Jun 2008 14:09:48 +0800
Subject: [PATCH] Add inotify support to uClibc 0.9.27
Signed-off-by: Arun Bhanu <arun@xxxxxxxxx>
---
uClibc/libc/sysdeps/linux/common/Makefile | 2 +-
uClibc/libc/sysdeps/linux/common/inotify.c | 24 ++++++
uClibc/libc/sysdeps/linux/common/sys/inotify.h | 92 ++++++++++++++++++++++++
3 files changed, 117 insertions(+), 1 deletions(-)
create mode 100644 uClibc/libc/sysdeps/linux/common/inotify.c
create mode 100644 uClibc/libc/sysdeps/linux/common/sys/inotify.h
diff --git a/uClibc/libc/sysdeps/linux/common/Makefile b/uClibc/libc/sysdeps/linux/common/Makefile
index b5ea8d2..0ee14ff 100644
--- a/uClibc/libc/sysdeps/linux/common/Makefile
+++ b/uClibc/libc/sysdeps/linux/common/Makefile
@@ -31,7 +31,7 @@ CSRC= __rt_sigtimedwait.c __socketcall.c __syscall_fcntl.c \
getgid.c getgroups.c gethstnm.c getitimer.c getpagesize.c \
getpgid.c getpgrp.c getpid.c getppid.c getpriority.c getresgid.c \
getresuid.c getrlimit.c getrlimit64.c getrusage.c getsid.c \
- gettimeofday.c getuid.c init_module.c ioctl.c ioperm.c iopl.c \
+ gettimeofday.c getuid.c init_module.c inotify.c ioctl.c ioperm.c iopl.c \
kill.c klogctl.c lchown.c link.c llseek.c longjmp.c lseek.c lstat.c \
lstat64.c madvise.c mkdir.c mkfifo.c mincore.c mknod.c mlock.c \
mlockall.c mmap.c mmap64.c modify_ldt.c mount.c mprotect.c \
diff --git a/uClibc/libc/sysdeps/linux/common/inotify.c b/uClibc/libc/sysdeps/linux/common/inotify.c
new file mode 100644
index 0000000..87cf4d7
--- /dev/null
+++ b/uClibc/libc/sysdeps/linux/common/inotify.c
@@ -0,0 +1,24 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * inotify interface for uClibc
+ *
+ * Copyright (C) 2006 Austin Morgan <admorgan@xxxxxxxxxxxxxxxxxxx>
+ * Copyright (C) 2006 by Erik Andersen <andersen@xxxxxxxxxxxx>
+ *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+#include "syscalls.h"
+#include <sys/inotify.h>
+
+#ifdef __NR_inotify_init
+_syscall0(int, inotify_init);
+#endif
+
+#ifdef __NR_inotify_add_watch
+_syscall3(int, inotify_add_watch, int, fd, const char *, path, uint32_t, mask);
+#endif
+
+#ifdef __NR_inotify_rm_watch
+_syscall2(int, inotify_rm_watch, int, fd, uint32_t, wd);
+#endif
diff --git a/uClibc/libc/sysdeps/linux/common/sys/inotify.h b/uClibc/libc/sysdeps/linux/common/sys/inotify.h
new file mode 100644
index 0000000..0131db9
--- /dev/null
+++ b/uClibc/libc/sysdeps/linux/common/sys/inotify.h
@@ -0,0 +1,92 @@
+/* Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#ifndef _SYS_INOTIFY_H
+#define _SYS_INOTIFY_H 1
+
+#include <stdint.h>
+
+
+/* Structure describing an inotify event. */
+struct inotify_event
+{
+ int wd; /* Watch descriptor. */
+ uint32_t mask; /* Watch mask. */
+ uint32_t cookie; /* Cookie to synchronize two events. */
+ uint32_t len; /* Length (including NULs) of name. */
+ char name __flexarr; /* Name. */
+};
+
+
+/* Supported events suitable for MASK parameter of INOTIFY_ADD_WATCH. */
+#define IN_ACCESS 0x00000001 /* File was accessed. */
+#define IN_MODIFY 0x00000002 /* File was modified. */
+#define IN_ATTRIB 0x00000004 /* Metadata changed. */
+#define IN_CLOSE_WRITE 0x00000008 /* Writtable file was closed. */
+#define IN_CLOSE_NOWRITE 0x00000010 /* Unwrittable file closed. */
+#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close. */
+#define IN_OPEN 0x00000020 /* File was opened. */
+#define IN_MOVED_FROM 0x00000040 /* File was moved from X. */
+#define IN_MOVED_TO 0x00000080 /* File was moved to Y. */
+#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* Moves. */
+#define IN_CREATE 0x00000100 /* Subfile was created. */
+#define IN_DELETE 0x00000200 /* Subfile was deleted. */
+#define IN_DELETE_SELF 0x00000400 /* Self was deleted. */
+#define IN_MOVE_SELF 0x00000800 /* Self was moved. */
+
+/* Events sent by the kernel. */
+#define IN_UNMOUNT 0x00002000 /* Backing fs was unmounted. */
+#define IN_Q_OVERFLOW 0x00004000 /* Event queued overflowed. */
+#define IN_IGNORED 0x00008000 /* File was ignored. */
+
+/* Helper events. */
+#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close. */
+#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* Moves. */
+
+/* Special flags. */
+#define IN_ONLYDIR 0x01000000 /* Only watch the path if it is a
+ directory. */
+#define IN_DONT_FOLLOW 0x02000000 /* Do not follow a sym link. */
+#define IN_MASK_ADD 0x20000000 /* Add to the mask of an already
+ existing watch. */
+#define IN_ISDIR 0x40000000 /* Event occurred against dir. */
+#define IN_ONESHOT 0x80000000 /* Only send event once. */
+
+/* All events which a program can wait on. */
+#define IN_ALL_EVENTS (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE \
+ | IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM \
+ | IN_MOVED_TO | IN_CREATE | IN_DELETE \
+ | IN_DELETE_SELF | IN_MOVE_SELF)
+
+
+__BEGIN_DECLS
+
+/* Create and initialize inotify instance. */
+extern int inotify_init (void) __THROW;
+
+/* Add watch of object NAME to inotify instance FD. Notify about
+ events specified by MASK. */
+extern int inotify_add_watch (int __fd, const char *__name, uint32_t __mask)
+ __THROW;
+
+/* Remove the watch specified by WD from the inotify instance FD. */
+extern int inotify_rm_watch (int __fd, uint32_t __wd) __THROW;
+
+__END_DECLS
+
+#endif /* sys/inotify.h */