[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [microblaze-uclinux] [PATCH] Add inotify userspace headers



Hi Arun,

Thanks for that. I'll see about folding them in, although it probably is time for a uClibc version upgrade in the Petalinuc distribution / tools anyway.

Regards,

John

Arun Bhanu wrote:
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 */

___________________________
microblaze-uclinux mailing list
microblaze-uclinux@xxxxxxxxxxxxxx
Project Home Page : http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux
Mailing List Archive : http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/