components/gamin/patches/gamin-01-all.patch
author Vladimir Marek <Vladimir.Marek@oracle.com>
Wed, 19 Aug 2015 10:12:59 +0200
changeset 4805 ad8cc19e4aec
child 4981 2da2d7a85ba2
permissions -rw-r--r--
21036504 Move libgamin from Desktop to Userland consolidation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4805
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     1
Solaris FEN support in Gamin
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     2
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     3
https://bugzilla.gnome.org/show_bug.cgi?id=730679
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     4
http://osdyson.org/issues/172
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     5
http://hg.osdyson.org/solaris-desktop-spec-files/raw-file/8f7c0cd200a9/patches/gamin-01-all.diff
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     6
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     7
diff --git a/configure.in b/configure.in
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     8
index e4b684e..5836bb7 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     9
--- a/configure.in
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    10
+++ b/configure.in
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    11
@@ -42,6 +42,12 @@ if test -z "$ENV_CFLAGS"; then
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    12
 	CFLAGS=""
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    13
 fi
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    14
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    15
+dnl If the user set no CFLAGS, then don't assume the autotools defaults of
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    16
+dnl "-g -O2". We set default CFLAGS later based on the --disable-debug flag.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    17
+if test -z "$ENV_CFLAGS"; then
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    18
+	CFLAGS=""
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    19
+fi
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    20
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    21
 dnl for the spec file
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    22
 RELDATE=`date +'%a %b %e %Y'`
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    23
 AC_SUBST(RELDATE)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    24
@@ -279,6 +285,43 @@ if test x$kqueue = xtrue; then
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    25
 	backends="${backends}, kqueue"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    26
 fi
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    27
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    28
+case "$os" in
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    29
+    solaris*)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    30
+	AM_CONDITIONAL(ON_SOLARIS, true)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    31
+	AC_COMPILE_IFELSE([
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    32
+		#include <port.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    33
+		#ifndef PORT_SOURCE_FILE
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    34
+		#error "Please upgrade to Nevada 72 or above to suppoert FEN"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    35
+		#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    36
+		int main() { return 0; }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    37
+		],[have_fen=1],)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    38
+	if test x$have_fen = x1 ; then
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    39
+            AC_ARG_ENABLE(fen,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    40
+		AC_HELP_STRING([--disable-fen], [Disable the FEN backend]),
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    41
+                       [fen="${enableval}"], [fen=true])
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    42
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    43
+		if test x$fen = xyes; then
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    44
+                       fen=true
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    45
+		elif test x$fen = xno; then
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    46
+                       fen=false
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    47
+		elif test x$fen != xtrue; then
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    48
+                       AC_MSG_ERROR(bad value ${enableval} for --disable-fen)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    49
+		fi
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    50
+	fi
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    51
+	break;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    52
+	;;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    53
+    *)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    54
+	fen=false
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    55
+	break;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    56
+	;;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    57
+esac
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    58
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    59
+AM_CONDITIONAL(ENABLE_FEN, test x$fen = xtrue)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    60
+if test x$fen = xtrue; then
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    61
+	AC_DEFINE(ENABLE_FEN,1,[Use Solaris FEN as backend])
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    62
+	backends="${backends}, FEN"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    63
+fi
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    64
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    65
 dnl pthread support for reentrance of the client library.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    66
 AC_ARG_WITH(threads,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    67
 [  --with-threads          add multithread support(on)])
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    68
@@ -387,6 +430,14 @@ if test x$dbus_have_struct_cmsgcred = xyes; then
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    69
     AC_DEFINE(HAVE_CMSGCRED,1,[Have cmsgcred structure])
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    70
 fi
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    71
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    72
+dnl Check for getpeerucred support - Solaris
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    73
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    74
+AC_CHECK_HEADER(ucred.h,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    75
+    AC_CHECK_LIB(c, getpeerucred,[
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    76
+        AC_DEFINE([HAVE_GETPEERUCRED],[],[Define if has getpeerucred])
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    77
+        AC_DEFINE([HAVE_UCRED_H],[],[Define if <ucred.h> exists])]))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    78
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    79
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    80
 #### Abstract sockets
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    81
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    82
 AC_MSG_CHECKING(abstract socket namespace)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    83
@@ -531,6 +582,16 @@ AC_SUBST(PYTHON_VERSION)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    84
 AC_SUBST(PYTHON_INCLUDES)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    85
 AC_SUBST(PYTHON_SITE_PACKAGES)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    86
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    87
+dnl Check for -lsocket -lnsl
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    88
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    89
+AC_CHECK_FUNC(gethostent, , AC_CHECK_LIB(nsl, gethostent))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    90
+AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    91
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    92
+dnl Check for <sys/mnttab.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    93
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    94
+AC_CHECK_HEADER(sys/mnttab.h,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    95
+	AC_DEFINE([HAVE_SYS_MNTTAB_H], [], [Define if <sys/mnttab.h> is there]))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    96
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    97
 dnl After all config-related tweaking of CFLAGS, set it to its "build" value
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    98
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    99
 AC_MSG_CHECKING(for more compiler warnings)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   100
diff --git a/libgamin/Makefile.am b/libgamin/Makefile.am
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   101
index 35aa740..4f725a2 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   102
--- a/libgamin/Makefile.am
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   103
+++ b/libgamin/Makefile.am
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   104
@@ -39,13 +39,24 @@ CLEANFILES=gam_error.c gam_event.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   105
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   106
 libgamin_1_la_LIBADD =
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   107
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   108
+if ON_SOLARIS
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   109
+libgamin_1_la_LDFLAGS = -Wl,-M$(srcdir)/gamin_sym.version \
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   110
+                        -version-info @GAMIN_VERSION_INFO@ @THREAD_LIBS@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   111
+else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   112
 libgamin_1_la_LDFLAGS = -Wl,--version-script=$(srcdir)/gamin_sym.version \
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   113
                         -version-info @GAMIN_VERSION_INFO@ @THREAD_LIBS@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   114
+endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   115
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   116
 libfam_la_SOURCES = $(libgamin_1_la_SOURCES)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   117
 libfam_la_LIBADD = $(libgamin_1_la_LIBADD)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   118
-libfam_la_LDFLAGS = -Wl,--version-script=$(srcdir)/gamin_sym.version	\
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   119
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   120
+if ON_SOLARIS
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   121
+libfam_la_LDFLAGS = -Wl,-M$(srcdir)/gamin_sym.version	\
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   122
                     -version-info @FAM_VERSION_INFO@ @THREAD_LIBS@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   123
+else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   124
+libfam_la_LDFLAGS = -Wl,--version-script=$(srcdir)/gamin_sym.version   \
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   125
+                    -version-info @FAM_VERSION_INFO@ @THREAD_LIBS@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   126
+endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   127
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   128
 #
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   129
 # Compile a program locally to check
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   130
diff --git a/libgamin/gam_api.c b/libgamin/gam_api.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   131
index 4e87e63..3630213 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   132
--- a/libgamin/gam_api.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   133
+++ b/libgamin/gam_api.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   134
@@ -14,6 +14,12 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   135
 #include <sys/socket.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   136
 #include <sys/un.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   137
 #include <sys/uio.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   138
+#if defined(sun)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   139
+#include <string.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   140
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   141
+#if defined(HAVE_UCRED_H)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   142
+#include <ucred.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   143
+#endif defined(HAVE_UCRED_H)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   144
 #include "fam.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   145
 #include "gam_protocol.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   146
 #include "gam_data.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   147
@@ -660,6 +666,10 @@ gamin_check_cred(GAMDataPtr conn, int fd)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   148
     } cmsg;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   149
 #endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   150
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   151
+#if defined(HAVE_GETPEERUCRED)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   152
+    ucred_t *creds;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   153
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   154
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   155
     s_uid = getuid();
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   156
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   157
 #if defined(LOCAL_CREDS) && defined(HAVE_CMSGCRED)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   158
@@ -726,11 +736,25 @@ retry:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   159
                       fd, cr_len, (int) sizeof(cr));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   160
             goto failed;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   161
         }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   162
+#elif defined(HAVE_GETPEERUCRED)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   163
+        if ((creds = (ucred_t *)malloc(ucred_size()))==(ucred_t *)NULL){
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   164
+            GAM_DEBUG(DEBUG_INFO,"Malloc failed for ucreds");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   165
+            goto failed;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   166
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   167
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   168
+        if (getpeerucred(fd, &creds)!=0){
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   169
+            GAM_DEBUG(DEBUG_INFO,"getpeerucred call failed");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   170
+            goto failed;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   171
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   172
+        c_uid = ucred_getruid(creds);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   173
+        c_gid = ucred_getrgid(creds);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   174
+        c_pid = ucred_getpid(creds);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   175
+        ucred_free(creds);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   176
 #elif defined(HAVE_CMSGCRED)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   177
         c_pid = cmsg.cred.cmcred_pid;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   178
         c_uid = cmsg.cred.cmcred_euid;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   179
         c_gid = cmsg.cred.cmcred_groups[0];
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   180
-#else /* !SO_PEERCRED && !HAVE_CMSGCRED */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   181
+#else /* !SO_PEERCRED && !HAVE_CMSGCRED && !HAVE_GETPEERUCRED */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   182
         GAM_DEBUG(DEBUG_INFO,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   183
                   "Socket credentials not supported on this OS\n");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   184
         goto failed;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   185
diff --git a/libgamin/gamin_sym.version b/libgamin/gamin_sym.version
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   186
index dba5f20..5c6d661 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   187
--- a/libgamin/gamin_sym.version
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   188
+++ b/libgamin/gamin_sym.version
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   189
@@ -2,8 +2,6 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   190
    global:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   191
        FAMCancelMonitor;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   192
        FAMClose;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   193
-       FAMDebugLevel;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   194
-       FAMDebug;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   195
        FamErrlist;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   196
        FAMErrno;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   197
        FAMMonitorCollection;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   198
diff --git a/server/Makefile.am b/server/Makefile.am
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   199
index 37aed8b..7964d17 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   200
--- a/server/Makefile.am
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   201
+++ b/server/Makefile.am
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   202
@@ -10,7 +10,7 @@ INCLUDES =						\
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   203
 	-DG_DISABLE_DEPRECATED				
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   204
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   205
 if GAMIN_DEBUG
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   206
-INCLUDES += -DGAM_DEBUG_ENABLED
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   207
+INCLUDES += -DGAM_DEBUG_ENABLED -g
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   208
 endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   209
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   210
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   211
@@ -68,6 +68,18 @@ if ENABLE_KQUEUE
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   212
 gam_server_SOURCES += gam_kqueue.c gam_kqueue.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   213
 endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   214
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   215
+if ENABLE_FEN
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   216
+gam_server_SOURCES += gam_fen.c gam_fen.h		\
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   217
+	fen-dump.c		\
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   218
+	fen-dump.h		\
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   219
+	fen-kernel.c 		\
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   220
+	fen-kernel.h 		\
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   221
+	fen-helper.c 		\
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   222
+	fen-helper.h		\
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   223
+	fen-node.c		\
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   224
+	fen-node.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   225
+endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   226
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   227
 if ENABLE_HURD_MACH_NOTIFY
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   228
 gam_server_SOURCES += gam_hurd_mach_notify.c gam_hurd_mach_notify.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   229
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   230
diff --git a/server/fen-dump.c b/server/fen-dump.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   231
new file mode 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   232
index 0000000..98d20eb
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   233
--- /dev/null
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   234
+++ b/server/fen-dump.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   235
@@ -0,0 +1,77 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   236
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   237
+/* vim:set expandtab ts=4 shiftwidth=4: */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   238
+/* 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   239
+ * Copyright (c) 2008, 2010 Oracle and/or its affiliates, Inc. All rights
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   240
+ * reserved.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   241
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   242
+ * This library is free software; you can redistribute it and/or
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   243
+ * modify it under the terms of the GNU Lesser General Public
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   244
+ * License as published by the Free Software Foundation; either
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   245
+ * version 2 of the License, or (at your option) any later version.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   246
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   247
+ * This library is distributed in the hope that it will be useful,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   248
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   249
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   250
+ * Lesser General Public License for more details.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   251
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   252
+ * You should have received a copy of the GNU Lesser General
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   253
+ * Public License along with this library; if not, write to the
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   254
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   255
+ * Boston, MA 02111-1307, USA.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   256
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   257
+ * Authors: Lin Ma <[email protected]>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   258
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   259
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   260
+#include "config.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   261
+#include <glib.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   262
+#include <glib/gprintf.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   263
+#include "fen-node.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   264
+#include "fen-dump.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   265
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   266
+G_LOCK_EXTERN (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   267
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   268
+/*-------------------- node ------------------*/
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   269
+static void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   270
+dump_node (node_t* node, gpointer data)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   271
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   272
+    g_printf ("n:0x%p ds:0x%p s:0x%p %s\n", node, node->dir_subs, node->subs, NODE_NAME(node));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   273
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   274
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   275
+static void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   276
+dump_tree (node_t* node)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   277
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   278
+    if (G_TRYLOCK (fen_lock)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   279
+        node_traverse(NULL, dump_node, NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   280
+        G_UNLOCK (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   281
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   282
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   283
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   284
+/* ------------------ fdata port hash --------------------*/
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   285
+void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   286
+dump_hash_cb (gpointer key,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   287
+  gpointer value,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   288
+  gpointer user_data)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   289
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   290
+    g_printf ("k:0x%p v:0x%p >\n", key, value);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   291
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   292
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   293
+gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   294
+dump_hash (GHashTable* hash, gpointer user_data)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   295
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   296
+    if (G_TRYLOCK (fen_lock)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   297
+        if (g_hash_table_size (hash) > 0) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   298
+            g_hash_table_foreach (hash, dump_hash_cb, user_data);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   299
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   300
+        G_UNLOCK (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   301
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   302
+    return TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   303
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   304
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   305
+/* ------------------ event --------------------*/
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   306
+void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   307
+dump_event (node_event_t* ev, gpointer user_data)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   308
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   309
+    node_t* node = ev->user_data;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   310
+    g_printf ("ne:0x%p e:%p n:0x%p ds:0x%p s:0x%p s\n", ev, ev->e, node, node->dir_subs, node->subs, NODE_NAME(node));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   311
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   312
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   313
diff --git a/server/fen-dump.h b/server/fen-dump.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   314
new file mode 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   315
index 0000000..ffac822
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   316
--- /dev/null
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   317
+++ b/server/fen-dump.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   318
@@ -0,0 +1,29 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   319
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   320
+/* vim:set expandtab ts=4 shiftwidth=4: */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   321
+/* 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   322
+ * Copyright (c) 2008, 2010 Oracle and/or its affiliates, Inc. All rights
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   323
+ * reserved.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   324
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   325
+ * This library is free software; you can redistribute it and/or
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   326
+ * modify it under the terms of the GNU Lesser General Public
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   327
+ * License as published by the Free Software Foundation; either
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   328
+ * version 2 of the License, or (at your option) any later version.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   329
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   330
+ * This library is distributed in the hope that it will be useful,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   331
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   332
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   333
+ * Lesser General Public License for more details.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   334
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   335
+ * You should have received a copy of the GNU Lesser General
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   336
+ * Public License along with this library; if not, write to the
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   337
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   338
+ * Boston, MA 02111-1307, USA.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   339
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   340
+ * Authors: Lin Ma <[email protected]>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   341
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   342
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   343
+#ifndef _FEN_DUMP_H_
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   344
+#define _FEN_DUMP_H_
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   345
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   346
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   347
+#endif /* _FEN_DUMP_H_ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   348
diff --git a/server/fen-helper.c b/server/fen-helper.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   349
new file mode 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   350
index 0000000..e68e7c3
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   351
--- /dev/null
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   352
+++ b/server/fen-helper.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   353
@@ -0,0 +1,197 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   354
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   355
+/* vim:set expandtab ts=4 shiftwidth=4: */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   356
+/* 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   357
+ * Copyright (c) 2008, 2010 Oracle and/or its affiliates, Inc. All rights
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   358
+ * reserved.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   359
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   360
+ * This library is free software; you can redistribute it and/or
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   361
+ * modify it under the terms of the GNU Lesser General Public
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   362
+ * License as published by the Free Software Foundation; either
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   363
+ * version 2 of the License, or (at your option) any later version.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   364
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   365
+ * This library is distributed in the hope that it will be useful,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   366
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   367
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   368
+ * Lesser General Public License for more details.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   369
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   370
+ * You should have received a copy of the GNU Lesser General
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   371
+ * Public License along with this library; if not, write to the
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   372
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   373
+ * Boston, MA 02111-1307, USA.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   374
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   375
+ * Authors: Lin Ma <[email protected]>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   376
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   377
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   378
+#include "config.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   379
+#include <glib.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   380
+#include "fen-helper.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   381
+#include "fen-kernel.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   382
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   383
+#include "gfilemonitor.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   384
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   385
+#include "gam_event.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   386
+#include "gam_server.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   387
+#include "gam_protocol.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   388
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   389
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   390
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   391
+#define FH_W if (fh_debug_enabled) g_debug
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   392
+static gboolean fh_debug_enabled = FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   393
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   394
+#include "gam_error.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   395
+#define FH_W(...) GAM_DEBUG(DEBUG_INFO, __VA_ARGS__)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   396
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   397
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   398
+G_LOCK_EXTERN (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   399
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   400
+/* misc */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   401
+static void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   402
+scan_children_init(node_t *f, gpointer sub)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   403
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   404
+    gboolean emit;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   405
+    gint event;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   406
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   407
+    FH_W ("%s %s [0x%p]\n", __func__, NODE_NAME(f), f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   408
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   409
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   410
+    emit = FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   411
+    event = G_FILE_MONITOR_EVENT_CREATED;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   412
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   413
+    emit = TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   414
+    event = GAMIN_EVENT_EXISTS;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   415
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   416
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   417
+    if (!NODE_HAS_FLAG(f, NODE_FLAG_SNAPSHOT_UPDATED)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   418
+        /* TODO snapshot should also compare to the sub created timestamp. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   419
+        /* GIO initially doesn't emit created/existed events. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   420
+        node_create_children_snapshot(f, event, emit);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   421
+    } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   422
+        GHashTableIter iter;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   423
+        gpointer value;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   424
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   425
+        g_hash_table_iter_init (&iter, f->children);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   426
+        while (g_hash_table_iter_next (&iter, NULL, &value)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   427
+            node_t *child = (node_t *)value;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   428
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   429
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   430
+            /* GIO initially doesn't emit created/existed events. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   431
+            /* g_file_monitor_emit_event(G_FILE_MONITOR(sub), child->gfile, NULL, event); */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   432
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   433
+            gam_server_emit_one_event(NODE_NAME(child), gam_subscription_is_dir(sub), event, sub, 1);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   434
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   435
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   436
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   437
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   438
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   439
+/**
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   440
+ * fen_add
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   441
+ * 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   442
+ * Won't hold a ref, we have a timout callback to clean unused node_t.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   443
+ * If there is no value for a key, add it and return it; else return the old
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   444
+ * one.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   445
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   446
+void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   447
+fen_add (const gchar *filename, gpointer sub, gboolean is_mondir)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   448
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   449
+	node_t* f;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   450
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   451
+    g_assert (filename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   452
+    g_assert (sub);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   453
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   454
+    G_LOCK (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   455
+	f = node_find(NULL, filename, TRUE);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   456
+    FH_W ("%s 0x%p sub[0x%p] %s\n", __func__, f, sub, filename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   457
+    g_assert (f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   458
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   459
+    /* Update timestamp, the events in global queue will compare itself to this
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   460
+     * timestamp to decide if be emitted. TODO, timestamp should be per sub.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   461
+     */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   462
+    if (!NODE_IS_ACTIVE(f)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   463
+        g_get_current_time(&f->atv);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   464
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   465
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   466
+    if (is_mondir) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   467
+        f->dir_subs = g_list_prepend(f->dir_subs, sub);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   468
+    } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   469
+        f->subs = g_list_prepend(f->subs, sub);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   470
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   471
+    
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   472
+    if (NODE_HAS_STATE(f, NODE_STATE_ASSOCIATED) ||
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   473
+      (node_lstat(f) == 0 && port_add(f) == 0)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   474
+#ifndef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   475
+        gam_server_emit_one_event (NODE_NAME(f),
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   476
+          gam_subscription_is_dir (sub), GAMIN_EVENT_EXISTS, sub, 1);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   477
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   478
+        if (is_mondir) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   479
+            scan_children_init (f, sub);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   480
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   481
+    } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   482
+#ifndef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   483
+        gam_server_emit_one_event (NODE_NAME(f),
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   484
+          gam_subscription_is_dir (sub), GAMIN_EVENT_DELETED, sub, 1);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   485
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   486
+        node_adjust_deleted (f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   487
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   488
+#ifndef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   489
+    gam_server_emit_one_event (NODE_NAME(f),
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   490
+      gam_subscription_is_dir (sub), GAMIN_EVENT_ENDEXISTS, sub, 1);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   491
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   492
+    G_UNLOCK (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   493
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   494
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   495
+void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   496
+fen_remove (const gchar *filename, gpointer sub, gboolean is_mondir)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   497
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   498
+    node_t* f;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   499
+    
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   500
+    g_assert (filename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   501
+    g_assert (sub);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   502
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   503
+    G_LOCK (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   504
+	f = node_find(NULL, filename, FALSE);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   505
+    FH_W ("%s 0x%p sub[0x%p] %s\n", __func__, f, sub, filename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   506
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   507
+    if (f) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   508
+        if (is_mondir) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   509
+            f->dir_subs = g_list_remove(f->dir_subs, sub);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   510
+        } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   511
+            f->subs = g_list_remove(f->subs, sub);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   512
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   513
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   514
+        if (!NODE_IS_ACTIVE(f)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   515
+            node_try_delete (f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   516
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   517
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   518
+    G_UNLOCK (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   519
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   520
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   521
+/**
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   522
+ * fen_init:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   523
+ * 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   524
+ * FEN subsystem initializing.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   525
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   526
+gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   527
+fen_init ()
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   528
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   529
+    static gboolean initialized = FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   530
+    static gboolean result = FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   531
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   532
+    G_LOCK (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   533
+    if (initialized) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   534
+        G_UNLOCK (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   535
+        return result;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   536
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   537
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   538
+    result = node_class_init();
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   539
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   540
+    if (!result) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   541
+        G_UNLOCK (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   542
+        return result;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   543
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   544
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   545
+    initialized = TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   546
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   547
+    G_UNLOCK (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   548
+    return result;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   549
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   550
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   551
diff --git a/server/fen-helper.h b/server/fen-helper.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   552
new file mode 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   553
index 0000000..25df38f
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   554
--- /dev/null
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   555
+++ b/server/fen-helper.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   556
@@ -0,0 +1,33 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   557
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   558
+/* vim:set expandtab ts=4 shiftwidth=4: */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   559
+/* 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   560
+ * Copyright (c) 2008, 2010 Oracle and/or its affiliates, Inc. All rights
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   561
+ * reserved.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   562
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   563
+ * This library is free software; you can redistribute it and/or
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   564
+ * modify it under the terms of the GNU Lesser General Public
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   565
+ * License as published by the Free Software Foundation; either
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   566
+ * version 2 of the License, or (at your option) any later version.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   567
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   568
+ * This library is distributed in the hope that it will be useful,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   569
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   570
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   571
+ * Lesser General Public License for more details.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   572
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   573
+ * You should have received a copy of the GNU Lesser General
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   574
+ * Public License along with this library; if not, write to the
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   575
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   576
+ * Boston, MA 02111-1307, USA.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   577
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   578
+ * Authors: Lin Ma <[email protected]>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   579
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   580
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   581
+#ifndef _FEN_HELPER_H_
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   582
+#define _FEN_HELPER_H_
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   583
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   584
+void fen_add (const gchar *filename, gpointer sub, gboolean is_mondir);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   585
+void fen_remove (const gchar *filename, gpointer sub, gboolean is_mondir);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   586
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   587
+gboolean fen_init ();
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   588
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   589
+#endif /* _FEN_HELPER_H_ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   590
diff --git a/server/fen-kernel.c b/server/fen-kernel.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   591
new file mode 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   592
index 0000000..8b9c58b
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   593
--- /dev/null
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   594
+++ b/server/fen-kernel.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   595
@@ -0,0 +1,557 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   596
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   597
+/* vim:set expandtab ts=4 shiftwidth=4: */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   598
+/* 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   599
+ * Copyright (c) 2008, 2010 Oracle and/or its affiliates, Inc. All rights
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   600
+ * reserved.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   601
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   602
+ * This library is free software; you can redistribute it and/or
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   603
+ * modify it under the terms of the GNU Lesser General Public
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   604
+ * License as published by the Free Software Foundation; either
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   605
+ * version 2 of the License, or (at your option) any later version.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   606
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   607
+ * This library is distributed in the hope that it will be useful,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   608
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   609
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   610
+ * Lesser General Public License for more details.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   611
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   612
+ * You should have received a copy of the GNU Lesser General
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   613
+ * Public License along with this library; if not, write to the
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   614
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   615
+ * Boston, MA 02111-1307, USA.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   616
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   617
+ * Authors: Lin Ma <[email protected]>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   618
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   619
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   620
+#include "config.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   621
+#include <rctl.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   622
+#include <strings.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   623
+#include <stdio.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   624
+#include <stdlib.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   625
+#include <unistd.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   626
+#include <glib.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   627
+#include "fen-kernel.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   628
+#include "fen-dump.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   629
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   630
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   631
+#define FK_W if (fk_debug_enabled) g_debug
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   632
+static gboolean fk_debug_enabled = FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   633
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   634
+#include "gam_error.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   635
+#define FK_W(...) GAM_DEBUG(DEBUG_INFO, __VA_ARGS__)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   636
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   637
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   638
+G_GNUC_INTERNAL G_LOCK_DEFINE (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   639
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   640
+static ulong max_port_events = 512;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   641
+static GList *pn_visible_list;	/* the queue of ports which don't have the max objs */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   642
+static GQueue *g_eventq = NULL;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   643
+static timespec_t zero_wait;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   644
+static void (*user_process_events_cb) (gpointer, node_event_t*);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   645
+static port_event_t *pevents = NULL;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   646
+static gint PE_ALLOC = 2048;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   647
+static GHashTable *renamed_hash = NULL; /* <parent node, ev> */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   648
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   649
+typedef struct _PSource {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   650
+    GSource  source;            /* Inherit from GSource, must be the first. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   651
+    GPollFD  gfd;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   652
+    gboolean pending;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   653
+    uint_t   event_growing_factor;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   654
+    uint_t   pending_events;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   655
+} PSource;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   656
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   657
+#define PGPFD(s)             (&((PSource *)(s))->gfd)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   658
+#define SLEEP_BASE_TIME      10	/* in milliseconds */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   659
+#define EXPECT_INC_EVENTS(pn)  (1 << (pn->event_growing_factor))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   660
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   661
+#define RENAME_EVENTS_INTERVAL 500 /* in milliseconds */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   662
+#define PROCESS_PORT_EVENTS_TIME 1000 /* in milliseconds */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   663
+guint process_port_event_id = 0;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   664
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   665
+static gchar* _event_strings(int event);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   666
+static const gchar* _event_string (int event);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   667
+static GSource *psource_new();
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   668
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   669
+static gboolean port_prepare(GSource *source, gint *timeout_);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   670
+static gboolean port_check(GSource *source);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   671
+static gboolean port_dispatch(GSource *source, GSourceFunc callback, gpointer user_data);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   672
+static GSourceFuncs fen_source_func = {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   673
+    port_prepare,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   674
+    port_check,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   675
+    port_dispatch,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   676
+    NULL
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   677
+};
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   678
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   679
+static gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   680
+port_prepare(GSource *source, gint *timeout_)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   681
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   682
+    return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   683
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   684
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   685
+static gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   686
+port_check(GSource *source)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   687
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   688
+	PSource *pn = (PSource *)source;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   689
+    uint_t nget;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   690
+    
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   691
+    if (pn->pending) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   692
+        pn->pending = FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   693
+        g_source_add_poll(source, PGPFD(source));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   694
+        g_source_unref(source);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   695
+        return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   696
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   697
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   698
+    if (!(PGPFD(pn)->revents & G_IO_IN))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   699
+        return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   700
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   701
+    if (port_getn(PGPFD(source)->fd, NULL, 0, &nget, 0) == 0) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   702
+        if (nget - pn->pending_events > EXPECT_INC_EVENTS(pn)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   703
+            /* Sleep for a while. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   704
+            pn->pending_events = nget;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   705
+            pn->event_growing_factor ++;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   706
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   707
+            pn->pending = TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   708
+            g_source_ref(source);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   709
+            g_source_remove_poll(source, PGPFD(source));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   710
+            g_timeout_add(SLEEP_BASE_TIME,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   711
+              (GSourceFunc)port_check,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   712
+              (gpointer)pn);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   713
+            return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   714
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   715
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   716
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   717
+    pn->pending_events = 0;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   718
+    pn->event_growing_factor = 0;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   719
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   720
+    return TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   721
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   722
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   723
+static gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   724
+port_dispatch(GSource *source, GSourceFunc callback, gpointer user_data)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   725
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   726
+    node_t *f;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   727
+	uint_t nget = 0;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   728
+	uint_t total = 0;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   729
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   730
+    FK_W ("%s 0x%p fd %d\n", __func__, source, PGPFD(source)->fd);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   731
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   732
+    G_LOCK (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   733
+    do {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   734
+        nget = 1;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   735
+        if (port_getn(PGPFD(source)->fd, pevents, PE_ALLOC, &nget, &zero_wait) == 0) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   736
+            int i;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   737
+            for (i = 0; i < nget; i++) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   738
+                f = (node_t *)pevents[i].portev_user;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   739
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   740
+                if (pevents[i].portev_source == PORT_SOURCE_FILE) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   741
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   742
+                    NODE_CLE_STATE(f, NODE_STATE_ASSOCIATED);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   743
+                    NODE_SET_STATE(f, NODE_STATE_HAS_EVENTS);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   744
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   745
+                    if (HAS_NO_EXCEPTION_EVENTS(pevents[i].portev_events)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   746
+                        /* If the events do not show it's deleted, update
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   747
+                         * file timestamp to avoid missing events next time.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   748
+                         */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   749
+                        if (node_lstat(f) != 0 /* || port_add(f) != 0 */) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   750
+                            /* Included deleted event. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   751
+                            pevents[i].portev_events |= FILE_DELETE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   752
+                        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   753
+                    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   754
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   755
+                    /* Queue it and waiting for processing. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   756
+                    g_queue_push_tail(g_eventq,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   757
+                      node_event_new(pevents[i].portev_events, (gpointer)f));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   758
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   759
+                } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   760
+                    FK_W ("[kernel] unknown portev_source %d\n", pevents[i].portev_source);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   761
+                }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   762
+            }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   763
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   764
+            total += nget;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   765
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   766
+        } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   767
+            FK_W ("[kernel] port_getn %s\n", g_strerror (errno));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   768
+            break;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   769
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   770
+    } while (nget == PE_ALLOC);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   771
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   772
+    G_UNLOCK (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   773
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   774
+    if (total > 0 && callback) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   775
+        FK_W ("[kernel] get total %ld events\n", total);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   776
+        return callback (user_data);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   777
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   778
+    return TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   779
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   780
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   781
+static gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   782
+process_renamed_hash_cb(gpointer key, gpointer value, gpointer user_data)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   783
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   784
+    node_event_t *ev = value;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   785
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   786
+#if 0
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   787
+    node_add_event(ev->user_data, ev);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   788
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   789
+    user_process_events_cb(ev->user_data, ev);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   790
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   791
+    /* Always delete self from hash. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   792
+    return TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   793
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   794
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   795
+static gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   796
+port_events_process_cb(gpointer user_data)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   797
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   798
+    node_event_t *ev;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   799
+    
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   800
+    G_LOCK (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   801
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   802
+	/* Processing g_eventq */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   803
+    while ((ev = (node_event_t*)g_queue_pop_head (g_eventq)) != NULL) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   804
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   805
+        /* FK_W ("[%s] 0x%p %s\n", __func__, ev, _event_string (ev->e)); */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   806
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   807
+        {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   808
+            gchar *log = _event_strings(ev->e);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   809
+            FK_W ("%s %s %s\n", __func__, NODE_NAME(ev->user_data), log);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   810
+            g_free(log);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   811
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   812
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   813
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   814
+        /* Use the parent node as a hash, because only the dir_subs in the
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   815
+         * parent node should receive MOVE event.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   816
+         */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   817
+        if (NODE_PARENT(ev->user_data)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   818
+            if (ev->e == FILE_RENAME_TO) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   819
+                g_hash_table_insert(renamed_hash, NODE_PARENT(ev->user_data), ev);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   820
+                g_time_val_add(&ev->rename_tv, RENAME_EVENTS_INTERVAL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   821
+                continue;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   822
+            }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   823
+            if (ev->e == FILE_RENAME_FROM) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   824
+                node_event_t *pair_ev;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   825
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   826
+                pair_ev = g_hash_table_lookup(renamed_hash, NODE_PARENT(ev->user_data));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   827
+                if (pair_ev && node_timeval_lt(&ev->ctv, &pair_ev->rename_tv)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   828
+                    g_hash_table_remove(renamed_hash, NODE_PARENT(ev->user_data));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   829
+                    pair_ev->pair_data = ev->user_data;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   830
+                    /* Free ev, exchange pair_ev and ev. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   831
+                    node_event_delete(ev);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   832
+                    ev = pair_ev;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   833
+                }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   834
+            }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   835
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   836
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   837
+    
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   838
+#if 0
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   839
+        node_add_event(ev->user_data, ev);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   840
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   841
+        user_process_events_cb(ev->user_data, ev);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   842
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   843
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   844
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   845
+    /* Processing the events in renamed_hash. TODO we should delay it and wait
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   846
+     * for more possible pair.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   847
+     */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   848
+    g_hash_table_foreach_remove(renamed_hash, process_renamed_hash_cb, NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   849
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   850
+    G_UNLOCK (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   851
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   852
+    process_port_event_id = 0;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   853
+    return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   854
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   855
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   856
+static gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   857
+port_events_read_cb(gpointer user_data)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   858
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   859
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   860
+    if (process_port_event_id == 0) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   861
+        process_port_event_id = g_timeout_add(PROCESS_PORT_EVENTS_TIME,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   862
+          port_events_process_cb,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   863
+          NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   864
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   865
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   866
+	return TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   867
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   868
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   869
+/*
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   870
+ * malloc PSource and port_create, start thread at pnode_ref.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   871
+ * if psource_new succeeded, the PSource will never
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   872
+ * be freed. So PSource can be freed only in psource_new.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   873
+ * Note pnode_monitor_remove_all can also free PSource, but currently no one
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   874
+ * invork it.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   875
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   876
+static GSource*
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   877
+psource_new()
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   878
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   879
+    GSource *source = NULL;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   880
+    int fd;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   881
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   882
+    if ((fd = port_create()) >= 0) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   883
+        source = g_source_new(&fen_source_func, sizeof(PSource));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   884
+        PGPFD(source)->fd = fd;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   885
+        PGPFD(source)->events = G_IO_IN | G_IO_HUP | G_IO_ERR;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   886
+        g_source_set_callback(source, port_events_read_cb, NULL, NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   887
+        g_source_attach(source, NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   888
+        g_source_unref(source);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   889
+        g_source_add_poll(source, PGPFD(source));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   890
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   891
+        FK_W ("%s 0x%p fd %d\n", __func__, source, PGPFD(source)->fd);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   892
+    } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   893
+        FK_W ("PORT_CREATE %s\n", g_strerror(errno));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   894
+        g_return_val_if_reached(NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   895
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   896
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   897
+	return source;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   898
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   899
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   900
+/**
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   901
+ * port_add:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   902
+ * @f:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   903
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   904
+ * Unsafe, need lock fen_lock.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   905
+ * port_add will associate a GSource to @f->source
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   906
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   907
+gint
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   908
+port_add(node_t *f)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   909
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   910
+	GSource *source = f->source;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   911
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   912
+    FK_W ("%s [0x%p] %s\n", __func__, f, NODE_NAME(f));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   913
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   914
+    g_assert(f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   915
+    g_assert(NODE_HAS_FLAG(f, NODE_FLAG_STAT_UPDATED));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   916
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   917
+    /* if (!NODE_HAS_FLAG(f, NODE_FLAG_STAT_DONE)) { */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   918
+    /*     if (NODE_STAT(f) != 0) { */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   919
+    /*         return errno; */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   920
+    /*     } */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   921
+    /* } */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   922
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   923
+    /* Try re-use f->pn. f->pn may be used by other request, e.g. f is deleted
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   924
+     * for a long time. So if pn is full, we try to open a new one.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   925
+     */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   926
+    if (!source) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   927
+start_over:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   928
+        /* Try the next visible source. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   929
+        if (pn_visible_list) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   930
+            source = (GSource *)pn_visible_list->data;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   931
+        } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   932
+            if ((source = psource_new()) != NULL) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   933
+                g_assert (g_list_find (pn_visible_list, source) == NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   934
+                pn_visible_list = g_list_prepend (pn_visible_list, source);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   935
+            }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   936
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   937
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   938
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   939
+    if (port_associate(PGPFD(source)->fd, PORT_SOURCE_FILE, (uintptr_t)FILE_OBJECT(f),
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   940
+        CONCERNED_EVENTS,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   941
+        (void *)f) == 0) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   942
+        f->source = source;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   943
+        NODE_SET_STATE(f, NODE_STATE_ASSOCIATED);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   944
+        NODE_CLE_FLAG(f, NODE_FLAG_STAT_UPDATED);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   945
+        FK_W ("PORT_ASSOCIATE 0x%p OK\n", f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   946
+        return 0;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   947
+    } else if (errno == EAGAIN) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   948
+        /* Full, remove it. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   949
+        pn_visible_list = g_list_remove (pn_visible_list, source);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   950
+        /* Re-add to port */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   951
+        goto start_over;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   952
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   953
+    } else if (errno == ENOENT) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   954
+        /* File is not exist */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   955
+    } else if (errno == ENOTSUP) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   956
+        /* FS is not supported. Currently we think it no longer make sense to
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   957
+         * monitor it, so clean the stat info and return 0 to ignore this
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   958
+         * node. If there are requirement, we can consider to add polling
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   959
+         * method.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   960
+         */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   961
+        NODE_CLE_FLAG(f, NODE_FLAG_STAT_UPDATED);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   962
+        return 0;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   963
+    } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   964
+        FK_W ("PORT_ASSOCIATE 0x%p %s\n", f, g_strerror (errno));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   965
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   966
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   967
+    /* No matter if associated successfully, stat info is out-of-date, so clean it. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   968
+    NODE_CLE_FLAG(f, NODE_FLAG_STAT_UPDATED);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   969
+    return errno;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   970
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   971
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   972
+/**
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   973
+ * port_remove
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   974
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   975
+ * < private >
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   976
+ * Unsafe, need lock fen_lock.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   977
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   978
+void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   979
+port_remove (node_t *f)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   980
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   981
+    /* g_assert(f->source); */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   982
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   983
+    if (NODE_HAS_STATE(f, NODE_STATE_ASSOCIATED)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   984
+        /* Mark unregisted. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   985
+        if (port_dissociate(PGPFD(f->source)->fd, PORT_SOURCE_FILE, (uintptr_t)FILE_OBJECT(f)) == 0) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   986
+            /*
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   987
+             * Note, we can run foode_delete if dissociating is failed,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   988
+             * because there may be some pending events (mostly like
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   989
+             * FILE_DELETE) in the port_get. If we delete the foode
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   990
+             * the fnode may be deleted, then port_get will run on an invalid
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   991
+             * address.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   992
+             */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   993
+            NODE_CLE_STATE(f, NODE_STATE_ASSOCIATED);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   994
+            FK_W ("PORT_DISSOCIATE 0x%p OK\n", f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   995
+        } else if (errno == ENOENT) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   996
+            /* The file has been removed from port, after port_get or before
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   997
+             * port_get but DELETED event has been generated.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   998
+             * Ignored. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   999
+        } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1000
+            FK_W ("PORT_DISSOCIATE 0x%p %s\n", f, g_strerror (errno));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1001
+            g_return_if_reached();
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1002
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1003
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1004
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1005
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1006
+/**
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1007
+ * Get Solaris resouce values.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1008
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1009
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1010
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1011
+extern gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1012
+port_class_init (void (*user_process_events_callback) (gpointer, node_event_t*))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1013
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1014
+	rctlblk_t *rblk;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1015
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1016
+	if ((rblk = malloc (rctlblk_size ())) == NULL) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1017
+        FK_W ("[kernel] rblk malloc %s\n", g_strerror (errno));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1018
+		return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1019
+	}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1020
+	if (getrctl ("process.max-port-events", NULL, rblk, RCTL_FIRST) == -1) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1021
+        FK_W ("[kernel] getrctl %s\n", g_strerror (errno));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1022
+        free (rblk);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1023
+        return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1024
+	} else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1025
+        max_port_events = rctlblk_get_value(rblk);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1026
+		FK_W ("max_port_events = %u\n", max_port_events);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1027
+        free (rblk);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1028
+	}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1029
+    renamed_hash = g_hash_table_new_full(g_direct_hash, g_direct_equal,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1030
+      NULL, NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1031
+    if (renamed_hash == NULL) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1032
+		FK_W ("[kernel] FEN global renamed queue initializing faild\n");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1033
+        return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1034
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1035
+    if ((g_eventq = g_queue_new ()) == NULL) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1036
+		FK_W ("[kernel] FEN global event queue initializing faild\n");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1037
+        return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1038
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1039
+    if (user_process_events_callback == NULL) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1040
+		FK_W ("[kernel] FEN global no user_process_events_callback\n");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1041
+        return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1042
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1043
+    user_process_events_cb = user_process_events_callback;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1044
+    memset (&zero_wait, 0, sizeof (timespec_t));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1045
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1046
+    pevents = g_malloc(PE_ALLOC * sizeof(port_event_t));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1047
+    if (pevents == NULL) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1048
+		FK_W ("[kernel] FEN global alloc pevents failed\n");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1049
+        return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1050
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1051
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1052
+	return TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1053
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1054
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1055
+static gchar*
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1056
+printevent (const char *pname, int event, const char *tag)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1057
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1058
+    static gchar	*event_string = NULL;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1059
+    GString			*str;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1060
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1061
+    if (event_string) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1062
+        g_free(event_string);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1063
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1064
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1065
+    str = g_string_new ("");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1066
+    g_string_printf (str, "[%s] [%-20s]", tag, pname);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1067
+    if (event & FILE_ACCESS) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1068
+        str = g_string_append (str, " ACCESS");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1069
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1070
+    if (event & FILE_MODIFIED) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1071
+        str = g_string_append (str, " MODIFIED");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1072
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1073
+    if (event & FILE_ATTRIB) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1074
+        str = g_string_append (str, " ATTRIB");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1075
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1076
+    if (event & FILE_DELETE) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1077
+        str = g_string_append (str, " DELETE");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1078
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1079
+    if (event & FILE_RENAME_TO) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1080
+        str = g_string_append (str, " RENAME_TO");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1081
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1082
+    if (event & FILE_RENAME_FROM) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1083
+        str = g_string_append (str, " RENAME_FROM");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1084
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1085
+    if (event & UNMOUNTED) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1086
+        str = g_string_append (str, " UNMOUNTED");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1087
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1088
+    if (event & MOUNTEDOVER) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1089
+        str = g_string_append (str, " MOUNTEDOVER");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1090
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1091
+    event_string = str->str;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1092
+    g_string_free (str, FALSE);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1093
+    return event_string;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1094
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1095
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1096
+static gchar *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1097
+_event_strings(int event)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1098
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1099
+    GString *str = g_string_sized_new(80);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1100
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1101
+    if (event & FILE_DELETE)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1102
+        g_string_append(str, " FILE_DELETE");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1103
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1104
+    if (event & FILE_RENAME_FROM)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1105
+        g_string_append(str, " FILE_RENAME_FROM");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1106
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1107
+    if (event & FILE_MODIFIED)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1108
+        g_string_append(str, " FILE_MODIFIED");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1109
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1110
+    if (event & FILE_RENAME_TO)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1111
+        g_string_append(str, " FILE_RENAME_TO");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1112
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1113
+    if (event & MOUNTEDOVER)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1114
+        g_string_append(str, " MOUNTEDOVER");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1115
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1116
+    if (event & FILE_ATTRIB)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1117
+        g_string_append(str, " FILE_ATTRIB");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1118
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1119
+    if (event & UNMOUNTED)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1120
+        g_string_append(str, " UNMOUNTED");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1121
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1122
+    if (event & FILE_ACCESS)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1123
+        g_string_append(str, " FILE_ACCESS");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1124
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1125
+    return g_string_free(str, FALSE);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1126
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1127
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1128
+static const gchar *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1129
+_event_string (int event)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1130
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1131
+    switch (event) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1132
+    case FILE_DELETE:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1133
+        return "FILE_DELETE";
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1134
+    case FILE_RENAME_FROM:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1135
+        return "FILE_RENAME_FROM";
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1136
+    case FILE_MODIFIED:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1137
+        return "FILE_MODIFIED";
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1138
+    case FILE_RENAME_TO:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1139
+        return "FILE_RENAME_TO";
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1140
+    case MOUNTEDOVER:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1141
+        return "MOUNTEDOVER";
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1142
+    case FILE_ATTRIB:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1143
+        return "FILE_ATTRIB";
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1144
+    case UNMOUNTED:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1145
+        return "UNMOUNTED";
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1146
+    case FILE_ACCESS:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1147
+        return "FILE_ACCESS";
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1148
+    default:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1149
+        return "EVENT_UNKNOWN";
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1150
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1151
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1152
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1153
diff --git a/server/fen-kernel.h b/server/fen-kernel.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1154
new file mode 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1155
index 0000000..6d2c49b
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1156
--- /dev/null
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1157
+++ b/server/fen-kernel.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1158
@@ -0,0 +1,43 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1159
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1160
+/* vim:set expandtab ts=4 shiftwidth=4: */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1161
+/* 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1162
+ * Copyright (c) 2008, 2010 Oracle and/or its affiliates, Inc. All rights
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1163
+ * reserved.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1164
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1165
+ * This library is free software; you can redistribute it and/or
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1166
+ * modify it under the terms of the GNU Lesser General Public
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1167
+ * License as published by the Free Software Foundation; either
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1168
+ * version 2 of the License, or (at your option) any later version.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1169
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1170
+ * This library is distributed in the hope that it will be useful,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1171
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1172
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1173
+ * Lesser General Public License for more details.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1174
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1175
+ * You should have received a copy of the GNU Lesser General
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1176
+ * Public License along with this library; if not, write to the
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1177
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1178
+ * Boston, MA 02111-1307, USA.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1179
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1180
+ * Authors: Lin Ma <[email protected]>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1181
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1182
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1183
+#include <sys/types.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1184
+#include <errno.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1185
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1186
+#include "fen-node.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1187
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1188
+#ifndef _FEN_KERNEL_H_
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1189
+#define _FEN_KERNEL_H_
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1190
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1191
+#define CONCERNED_EVENTS (FILE_MODIFIED | FILE_ATTRIB | FILE_NOFOLLOW)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1192
+#define EXCEPTION_EVENTS (FILE_DELETE | FILE_RENAME_FROM)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1193
+#define HAS_EXCEPTION_EVENTS(e) ((e & EXCEPTION_EVENTS) != 0)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1194
+#define HAS_NO_EXCEPTION_EVENTS(e) ((e & EXCEPTION_EVENTS) == 0)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1195
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1196
+gint port_add (node_t* f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1197
+void port_remove (node_t *f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1198
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1199
+gboolean port_class_init ();
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1200
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1201
+#endif /* _FEN_KERNEL_H_ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1202
diff --git a/server/fen-node.c b/server/fen-node.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1203
new file mode 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1204
index 0000000..d4d7ddb
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1205
--- /dev/null
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1206
+++ b/server/fen-node.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1207
@@ -0,0 +1,642 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1208
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1209
+/* vim:set expandtab ts=4 shiftwidth=4: */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1210
+/* 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1211
+ * Copyright (c) 2008, 2010 Oracle and/or its affiliates, Inc. All rights
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1212
+ * reserved.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1213
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1214
+ * This library is free software; you can redistribute it and/or
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1215
+ * modify it under the terms of the GNU Lesser General Public
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1216
+ * License as published by the Free Software Foundation; either
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1217
+ * version 2 of the License, or (at your option) any later version.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1218
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1219
+ * This library is distributed in the hope that it will be useful,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1220
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1221
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1222
+ * Lesser General Public License for more details.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1223
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1224
+ * You should have received a copy of the GNU Lesser General
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1225
+ * Public License along with this library; if not, write to the
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1226
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1227
+ * Boston, MA 02111-1307, USA.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1228
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1229
+ * Authors: Lin Ma <[email protected]>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1230
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1231
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1232
+#include "config.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1233
+#include <sys/stat.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1234
+#include <errno.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1235
+#include <strings.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1236
+#include <glib.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1237
+#include "fen-kernel.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1238
+#include "fen-node.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1239
+#include "fen-dump.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1240
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1241
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1242
+#include "gfilemonitor.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1243
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1244
+#include "gam_event.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1245
+#include "gam_server.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1246
+#include "gam_protocol.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1247
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1248
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1249
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1250
+#define FN_W if (fn_debug_enabled) g_debug
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1251
+static gboolean fn_debug_enabled = FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1252
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1253
+#include "gam_error.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1254
+#define FN_W(...) GAM_DEBUG(DEBUG_INFO, __VA_ARGS__)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1255
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1256
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1257
+G_LOCK_EXTERN (fen_lock);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1258
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1259
+/* Must continue monitoring if:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1260
+ * 1) I'm subscribed,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1261
+ * 2) The subscribed children (one of the children has subs) are missing,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1262
+ * 3) my parent is subscribed (monitoring directory).
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1263
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1264
+#define NODE_NEED_MONITOR(f)                                            \
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1265
+    (NODE_IS_ACTIVE(f) || node_children_num(f) > 0 || NODE_IS_REQUIRED_BY_PARENT(f))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1266
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1267
+static int concern_events[] = {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1268
+    FILE_DELETE,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1269
+    FILE_RENAME_FROM,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1270
+    UNMOUNTED,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1271
+    MOUNTEDOVER,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1272
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1273
+    FILE_MODIFIED,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1274
+    FILE_ATTRIB,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1275
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1276
+    FILE_MODIFIED | FILE_ATTRIB,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1277
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1278
+    FILE_RENAME_TO,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1279
+};
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1280
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1281
+node_t *ROOT = NULL;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1282
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1283
+static void node_emit_one_event(node_t *f, GList *subs, node_t *other, int event);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1284
+static void node_emit_events(node_t *f, const node_event_t *ne);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1285
+static int node_event_translate(int event, gboolean pair);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1286
+static void node_add_event (node_t *f, node_event_t *ev);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1287
+static node_t* node_new (node_t* parent, const gchar* basename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1288
+static void node_delete (node_t* parent);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1289
+static node_t* node_get_child (node_t *f, const gchar *basename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1290
+static void children_add (node_t *p, node_t *f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1291
+static void children_remove (node_t *p, node_t *f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1292
+static gboolean children_remove_cb (gpointer key, gpointer value, gpointer user_data);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1293
+static guint node_children_num (node_t *f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1294
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1295
+gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1296
+node_timeval_lt(const GTimeVal *val1, const GTimeVal *val2)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1297
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1298
+    if (val1->tv_sec < val2->tv_sec)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1299
+        return TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1300
+  
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1301
+    if (val1->tv_sec > val2->tv_sec)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1302
+        return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1303
+  
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1304
+    /* val1->tv_sec == val2->tv_sec */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1305
+    if (val1->tv_usec < val2->tv_usec)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1306
+        return TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1307
+  
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1308
+    return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1309
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1310
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1311
+void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1312
+node_traverse (node_t* node, void(*traverse_cb)(node_t*, gpointer), gpointer user_data)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1313
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1314
+    GHashTableIter iter;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1315
+    gpointer value;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1316
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1317
+    g_assert(traverse_cb);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1318
+    if (node == NULL) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1319
+        node = ROOT;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1320
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1321
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1322
+    if (node) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1323
+        traverse_cb(node, user_data);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1324
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1325
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1326
+    g_hash_table_iter_init (&iter, node->children);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1327
+    while (g_hash_table_iter_next (&iter, NULL, &value)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1328
+        node_traverse((node_t *)value, traverse_cb, user_data);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1329
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1330
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1331
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1332
+node_t*
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1333
+node_find(node_t* node, const gchar* filename, gboolean create_on_missing)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1334
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1335
+    gchar* str;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1336
+    gchar* token;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1337
+    gchar* lasts;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1338
+    node_t* parent;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1339
+    node_t* child;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1340
+    
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1341
+    g_assert (filename && filename[0] == '/');
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1342
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1343
+    if (node == NULL) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1344
+        node = ROOT;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1345
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1346
+    
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1347
+    FN_W ("%s %s\n", __func__, filename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1348
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1349
+    parent = child = node;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1350
+    str = g_strdup (filename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1351
+    
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1352
+    for (token = strtok_r (str, G_DIR_SEPARATOR_S, &lasts);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1353
+         token != NULL && child != NULL;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1354
+         token = strtok_r (NULL, G_DIR_SEPARATOR_S, &lasts)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1355
+        FN_W ("%s %s + %s\n", __func__, NODE_NAME(parent), token);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1356
+        child = node_get_child(parent, token);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1357
+        if (child) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1358
+            parent = child;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1359
+        } else if (create_on_missing) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1360
+            child = node_new (parent, token);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1361
+            if (child) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1362
+                children_add (parent, child);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1363
+                parent = child;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1364
+                continue;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1365
+            } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1366
+                FN_W ("%s create %s failed", __func__, token);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1367
+            }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1368
+        } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1369
+            break;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1370
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1371
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1372
+    
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1373
+    g_free (str);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1374
+    return child;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1375
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1376
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1377
+gint
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1378
+node_lstat(node_t *f)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1379
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1380
+    struct stat buf;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1381
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1382
+    g_assert(!NODE_HAS_STATE(f, NODE_STATE_ASSOCIATED));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1383
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1384
+    if (lstat(NODE_NAME(f), &buf) == 0) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1385
+        FN_W ("%s %s\n", __func__, NODE_NAME(f));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1386
+        FILE_OBJECT(f)->fo_atime = buf.st_atim;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1387
+        FILE_OBJECT(f)->fo_mtime = buf.st_mtim;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1388
+        FILE_OBJECT(f)->fo_ctime = buf.st_ctim;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1389
+        NODE_SET_FLAG(f, NODE_FLAG_STAT_UPDATED |
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1390
+          (S_ISDIR (buf.st_mode) ? NODE_FLAG_DIR : NODE_FLAG_NONE));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1391
+        return 0;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1392
+    } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1393
+        FN_W ("%s(lstat) %s %s\n", __func__, NODE_NAME(f), g_strerror (errno));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1394
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1395
+    return errno;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1396
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1397
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1398
+void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1399
+node_create_children_snapshot(node_t *f, gint created_event, gboolean emit)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1400
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1401
+	GDir *dir;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1402
+	GError *err = NULL;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1403
+    
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1404
+    FN_W ("%s %s [0x%p]\n", __func__, NODE_NAME(f), f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1405
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1406
+    dir = g_dir_open (NODE_NAME(f), 0, &err);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1407
+    if (dir) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1408
+        const char *basename;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1409
+        node_t *child = NULL;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1410
+        
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1411
+        while ((basename = g_dir_read_name (dir))) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1412
+            node_t* data;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1413
+            GList *idx;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1414
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1415
+            child = node_get_child (f, basename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1416
+            if (child == NULL) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1417
+                gchar *filename;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1418
+            
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1419
+                child = node_new (f, basename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1420
+                children_add (f, child);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1421
+            }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1422
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1423
+            if (f->dir_subs) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1424
+                /* We need monitor the new children, or the existed child which
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1425
+                 * is in the DELETED mode.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1426
+                 */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1427
+                if (!NODE_HAS_STATE(child, NODE_STATE_ASSOCIATED) &&
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1428
+                  node_lstat(child) == 0 && port_add(child) == 0) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1429
+                    if (emit) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1430
+                        /* Emit the whatever event for the new found file. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1431
+                        node_emit_one_event(child, child->dir_subs, NULL, created_event);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1432
+                        node_emit_one_event(child, child->subs, NULL, created_event);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1433
+                        node_emit_one_event(child, f->dir_subs, NULL, created_event);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1434
+                        node_emit_one_event(child, f->subs, NULL, created_event);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1435
+                    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1436
+                }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1437
+                /* else ignore, because it may be deleted. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1438
+            }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1439
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1440
+        g_dir_close (dir);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1441
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1442
+        /* We have finished children snapshot. Any other new added subs should
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1443
+         * directory iterate the snapshot instead of scan directory again.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1444
+         */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1445
+        NODE_SET_FLAG(f, NODE_FLAG_SNAPSHOT_UPDATED);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1446
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1447
+    } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1448
+        FN_W (err->message);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1449
+        g_error_free (err);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1450
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1451
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1452
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1453
+/**
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1454
+ * If all active children nodes are ported, then cancel monitor the parent
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1455
+ * node. If we know how many children are created, then we can stop accordingly.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1456
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1457
+ * Unsafe, need lock. 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1458
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1459
+static void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1460
+foreach_known_children_scan(gpointer key, gpointer value, gpointer user_data)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1461
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1462
+    node_t* f = (node_t*)value;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1463
+    
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1464
+    FN_W ("%s 0x%p %s\n", __func__, f, NODE_NAME(f));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1465
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1466
+    if (!NODE_HAS_STATE(f, NODE_STATE_ASSOCIATED)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1467
+        if (node_lstat(f) == 0 && port_add(f) == 0) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1468
+            node_emit_one_event(f, f->dir_subs, NULL, FN_EVENT_CREATED);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1469
+            node_emit_one_event(f, f->subs, NULL, FN_EVENT_CREATED);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1470
+            if (NODE_PARENT(f)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1471
+                node_emit_one_event(f, NODE_PARENT(f)->dir_subs, NULL, FN_EVENT_CREATED);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1472
+                node_emit_one_event(f, NODE_PARENT(f)->subs, NULL, FN_EVENT_CREATED);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1473
+            }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1474
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1475
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1476
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1477
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1478
+gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1479
+node_try_delete(node_t* node)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1480
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1481
+    g_assert (node);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1482
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1483
+    FN_W ("%s 0x%p %s\n", __func__, node, NODE_NAME(node));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1484
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1485
+    /* Try clean children */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1486
+    if (node_children_num (node) > 0) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1487
+        g_hash_table_foreach_remove(node->children, children_remove_cb, NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1488
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1489
+    if (!NODE_NEED_MONITOR(node)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1490
+        /* Clean some flags. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1491
+        /* NODE_CLE_FLAG(node, NODE_FLAG_HAS_SNAPSHOT | NODE_FLAG_STAT_DONE); */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1492
+        node->flag = 0;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1493
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1494
+        /* Now we handle the state. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1495
+        if (NODE_HAS_STATE(node, NODE_STATE_ASSOCIATED)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1496
+            port_remove(node);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1497
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1498
+        /* Actually ignore the ROOT node. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1499
+        if (node->state == 0 && NODE_PARENT(node)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1500
+            children_remove(NODE_PARENT(node), node);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1501
+            /* Do clean instead of returning TRUE. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1502
+            node_delete (node);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1503
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1504
+        /* else, we have events, clean event queue? */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1505
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1506
+    return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1507
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1508
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1509
+static node_t*
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1510
+node_new (node_t* parent, const gchar* basename)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1511
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1512
+	node_t *f = NULL;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1513
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1514
+    g_assert (basename && basename[0]);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1515
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1516
+    if ((f = g_new0(node_t, 1)) != NULL) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1517
+        if (parent) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1518
+            NODE_NAME(f) = g_build_filename(NODE_NAME(parent), basename, NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1519
+        } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1520
+            NODE_NAME(f) = g_strdup(G_DIR_SEPARATOR_S);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1521
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1522
+        f->basename = g_strdup (basename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1523
+        /* f->children = g_hash_table_new_full (g_str_hash, g_str_equal, */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1524
+        /*   NULL, (GDestroyNotify)node_delete); */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1525
+        f->children = g_hash_table_new_full (g_str_hash, g_str_equal,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1526
+          NULL, NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1527
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1528
+        f->gfile = g_file_new_for_path (NODE_NAME(f));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1529
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1530
+        FN_W ("%s 0x%p %s\n", __func__, f, NODE_NAME(f));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1531
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1532
+	return f;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1533
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1534
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1535
+static void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1536
+node_delete (node_t *f)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1537
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1538
+    FN_W ("%s 0x%p %s\n", __func__, f, NODE_NAME(f));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1539
+    g_assert(f->state == 0);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1540
+    g_assert(!NODE_IS_ACTIVE(f));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1541
+    g_assert(g_hash_table_size (f->children) == 0);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1542
+    g_assert(NODE_PARENT(f) == NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1543
+    g_hash_table_unref(f->children);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1544
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1545
+    g_object_unref (f->gfile);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1546
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1547
+    g_free(f->basename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1548
+    g_free(NODE_NAME(f));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1549
+    g_free (f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1550
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1551
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1552
+static void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1553
+children_add (node_t *p, node_t *f)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1554
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1555
+    FN_W ("%s %s %s\n", __func__, NODE_NAME(p), f->basename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1556
+    g_hash_table_insert (p->children, f->basename, f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1557
+    NODE_PARENT(f) = p;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1558
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1559
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1560
+static void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1561
+children_remove (node_t *p, node_t *f)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1562
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1563
+    FN_W ("%s %s %s\n", __func__, NODE_NAME(p), f->basename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1564
+    g_hash_table_steal (p->children, f->basename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1565
+    NODE_PARENT(f) = NULL;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1566
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1567
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1568
+static node_t *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1569
+node_get_child (node_t *f, const gchar *basename)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1570
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1571
+    if (f->children) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1572
+        return (node_t *) g_hash_table_lookup (f->children, (gpointer)basename);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1573
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1574
+    return NULL;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1575
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1576
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1577
+static guint
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1578
+node_children_num (node_t *f)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1579
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1580
+    return g_hash_table_size (f->children);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1581
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1582
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1583
+/**
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1584
+ * depth first delete recursively
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1585
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1586
+static gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1587
+children_remove_cb (gpointer key, gpointer value, gpointer user_data)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1588
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1589
+    return node_try_delete ((node_t*)value);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1590
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1591
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1592
+gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1593
+node_class_init()
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1594
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1595
+    ROOT = node_new (NULL, G_DIR_SEPARATOR_S);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1596
+    if (ROOT == NULL) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1597
+        FN_W ("[node] Create ROOT node failed.\n");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1598
+        return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1599
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1600
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1601
+    return port_class_init (node_add_event);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1602
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1603
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1604
+/**
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1605
+ * Adjust self on failing to Port
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1606
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1607
+void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1608
+node_adjust_deleted(node_t* f)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1609
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1610
+    node_t *ancestor;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1611
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1612
+    FN_W ("%s %s\n", __func__, NODE_NAME(f));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1613
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1614
+    for (ancestor = NODE_PARENT(f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1615
+         ancestor != NULL;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1616
+         ancestor = NODE_PARENT(ancestor)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1617
+        /* Stop if we find a node which been already associated or is existed
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1618
+         * and can be associated.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1619
+         */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1620
+        if (NODE_HAS_STATE(ancestor, NODE_STATE_ASSOCIATED) ||
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1621
+          (node_lstat(ancestor) == 0 && port_add(ancestor) == 0)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1622
+            break;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1623
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1624
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1625
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1626
+    /* We assume we shouldn't reach here, because Root is always existed and
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1627
+     * associated. But given bugster#6955199, if PORT FS has problems on root,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1628
+     * we may reach here. So just return ROOT and the whole GIO fen backend will
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1629
+     * fail.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1630
+     */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1631
+    /* g_assert(ancestor != NULL); */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1632
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1633
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1634
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1635
+static void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1636
+node_emit_events(node_t *f, const node_event_t *ne)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1637
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1638
+    gsize num = sizeof(concern_events)/sizeof(int);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1639
+    gint i;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1640
+    int translated_e;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1641
+    node_t *p;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1642
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1643
+    if (node_timeval_lt(&f->atv, &ne->ctv)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1644
+        int event = ne->e;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1645
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1646
+        /* Emit DELETED on the pair_data */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1647
+        if (ne->pair_data) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1648
+            node_t *from = ne->pair_data;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1649
+            node_emit_one_event(from, from->dir_subs, NULL, node_event_translate(FILE_DELETE, FALSE));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1650
+            node_emit_one_event(from, from->subs, NULL, node_event_translate(FILE_DELETE, FALSE));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1651
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1652
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1653
+        for (i = 0; i < num; i++) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1654
+            if (event & concern_events[i]) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1655
+                translated_e = node_event_translate(concern_events[i], FALSE);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1656
+                /* Neither GIO or gamin cares about modified events on a
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1657
+                 * directory.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1658
+                 */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1659
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1660
+                if ((concern_events[i] & FILE_MODIFIED) == 0) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1661
+                    node_emit_one_event(f, f->dir_subs, NULL, translated_e);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1662
+                }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1663
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1664
+                /* Gamin doesn't care about attrib changed events on a directory
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1665
+                 * either.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1666
+                 */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1667
+                if ((concern_events[i] & (FILE_MODIFIED | FILE_ATTRIB)) == 0) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1668
+                    node_emit_one_event(f, f->dir_subs, NULL, translated_e);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1669
+                }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1670
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1671
+                node_emit_one_event(f, f->subs, NULL, translated_e);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1672
+            }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1673
+            event &= ~concern_events[i];
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1674
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1675
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1676
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1677
+    p = NODE_PARENT(f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1678
+    if (p != NULL && node_timeval_lt(&p->atv, &ne->ctv)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1679
+        int event = ne->e;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1680
+        for (i = 0; i < num; i++) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1681
+            if (event & concern_events[i]) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1682
+                translated_e = node_event_translate(concern_events[i], ne->pair_data != NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1683
+                node_emit_one_event(f, p->dir_subs, ne->pair_data, translated_e);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1684
+                node_emit_one_event(f, p->subs, ne->pair_data, translated_e);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1685
+            }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1686
+            event &= ~concern_events[i];
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1687
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1688
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1689
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1690
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1691
+/**
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1692
+ * node_add_event:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1693
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1694
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1695
+static void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1696
+node_add_event (node_t *f, node_event_t *ev)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1697
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1698
+    FN_W ("%s %d\n", __func__, ev->e);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1699
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1700
+    /* Clean the events flag early, because all received events need be
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1701
+     * processed in this function.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1702
+     */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1703
+    NODE_CLE_STATE(f, NODE_STATE_HAS_EVENTS);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1704
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1705
+    /*
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1706
+     * Node the node has been created, so we can delete create event in
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1707
+     * optimizing. To reduce the statings, we add it to Port on discoving
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1708
+     * it then emit CREATED event. So we don't need to do anything here.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1709
+     */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1710
+    if (NODE_NEED_MONITOR(f)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1711
+        if (HAS_NO_EXCEPTION_EVENTS(ev->e)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1712
+            if (NODE_HAS_STATE(f, NODE_STATE_ASSOCIATED) || port_add(f) == 0) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1713
+                if ((ev->e & FILE_MODIFIED) && NODE_HAS_FLAG(f, NODE_FLAG_DIR)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1714
+                    if (f->dir_subs) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1715
+                        node_create_children_snapshot(f, FN_EVENT_CREATED, TRUE);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1716
+                    } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1717
+                        g_hash_table_foreach(f->children, foreach_known_children_scan, NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1718
+                    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1719
+                }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1720
+            } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1721
+                /* Emit delete event */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1722
+                ev->e |= FILE_DELETE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1723
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1724
+                node_adjust_deleted(f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1725
+            }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1726
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1727
+        } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1728
+            node_adjust_deleted(f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1729
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1730
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1731
+        /* Send events to clients. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1732
+        node_emit_events (f, ev);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1733
+        
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1734
+    } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1735
+        /* Send events to clients. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1736
+        node_emit_events (f, ev);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1737
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1738
+        node_try_delete(f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1739
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1740
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1741
+    if (ev->pair_data) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1742
+        node_t *from = ev->pair_data;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1743
+        g_assert(ev->e == FILE_RENAME_TO);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1744
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1745
+        if (NODE_NEED_MONITOR(from)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1746
+            /* Clean the events flag, since it may block free this node. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1747
+            NODE_CLE_STATE(from, NODE_STATE_HAS_EVENTS);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1748
+            node_adjust_deleted(from);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1749
+        } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1750
+            node_try_delete(from);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1751
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1752
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1753
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1754
+    node_event_delete (ev);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1755
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1756
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1757
+static void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1758
+node_emit_one_event(node_t *f, GList *subs, node_t *other, int event)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1759
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1760
+    GList* idx;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1761
+    
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1762
+    FN_W ("%s %s %d\n", __func__, NODE_NAME(f), event);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1763
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1764
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1765
+    for (idx = subs; idx; idx = idx->next) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1766
+        g_file_monitor_emit_event(G_FILE_MONITOR(idx->data), f->gfile,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1767
+          (other == NULL ? NULL : other->gfile), event);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1768
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1769
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1770
+    for (idx = subs; idx; idx = idx->next) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1771
+        gam_server_emit_one_event(NODE_NAME(f), gam_subscription_is_dir(idx->data), event, idx->data, 1);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1772
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1773
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1774
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1775
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1776
+static int
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1777
+node_event_translate(int event, gboolean pair)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1778
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1779
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1780
+    switch (event) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1781
+    case FILE_DELETE:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1782
+    case FILE_RENAME_FROM:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1783
+        return G_FILE_MONITOR_EVENT_DELETED;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1784
+    case UNMOUNTED:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1785
+        return G_FILE_MONITOR_EVENT_UNMOUNTED;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1786
+    case FILE_ATTRIB:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1787
+        return G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1788
+    case MOUNTEDOVER:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1789
+    case FILE_MODIFIED:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1790
+        return G_FILE_MONITOR_EVENT_CHANGED;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1791
+    case FILE_RENAME_TO:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1792
+        if (pair) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1793
+            return G_FILE_MONITOR_EVENT_MOVED;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1794
+        } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1795
+            return G_FILE_MONITOR_EVENT_CREATED;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1796
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1797
+    default:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1798
+        /* case FILE_ACCESS: */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1799
+        g_assert_not_reached ();
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1800
+        return -1;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1801
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1802
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1803
+    switch (event) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1804
+    case FILE_DELETE:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1805
+    case FILE_RENAME_FROM:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1806
+        return GAMIN_EVENT_DELETED;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1807
+    case MOUNTEDOVER:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1808
+    case UNMOUNTED:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1809
+        return GAMIN_EVENT_CHANGED;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1810
+    case FILE_RENAME_TO:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1811
+        if (pair) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1812
+            return GAMIN_EVENT_MOVED;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1813
+        } else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1814
+            return GAMIN_EVENT_CREATED;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1815
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1816
+    default:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1817
+        if (event & (FILE_ATTRIB | FILE_MODIFIED)) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1818
+            return GAMIN_EVENT_CHANGED;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1819
+        }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1820
+        /* case FILE_ACCESS: */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1821
+        g_assert_not_reached ();
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1822
+        return -1;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1823
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1824
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1825
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1826
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1827
+node_event_t*
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1828
+node_event_new (int event, gpointer user_data)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1829
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1830
+    node_event_t *ev;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1831
+    
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1832
+    if ((ev = g_new (node_event_t, 1)) != NULL) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1833
+        g_assert (ev);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1834
+        ev->e = event;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1835
+        ev->user_data = user_data;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1836
+        ev->pair_data = NULL;   /* For renamed file. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1837
+        /* Created timestamp */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1838
+        g_get_current_time(&ev->ctv);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1839
+        ev->rename_tv = ev->ctv;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1840
+    }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1841
+    return ev;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1842
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1843
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1844
+void
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1845
+node_event_delete (node_event_t* ev)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1846
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1847
+    g_free (ev);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1848
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1849
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1850
diff --git a/server/fen-node.h b/server/fen-node.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1851
new file mode 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1852
index 0000000..7e99032
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1853
--- /dev/null
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1854
+++ b/server/fen-node.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1855
@@ -0,0 +1,104 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1856
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1857
+/* vim:set expandtab ts=4 shiftwidth=4: */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1858
+/* 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1859
+ * Copyright (c) 2008, 2010 Oracle and/or its affiliates, Inc. All rights
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1860
+ * reserved.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1861
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1862
+ * This library is free software; you can redistribute it and/or
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1863
+ * modify it under the terms of the GNU Lesser General Public
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1864
+ * License as published by the Free Software Foundation; either
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1865
+ * version 2 of the License, or (at your option) any later version.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1866
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1867
+ * This library is distributed in the hope that it will be useful,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1868
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1869
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1870
+ * Lesser General Public License for more details.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1871
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1872
+ * You should have received a copy of the GNU Lesser General
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1873
+ * Public License along with this library; if not, write to the
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1874
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1875
+ * Boston, MA 02111-1307, USA.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1876
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1877
+ * Authors: Lin Ma <[email protected]>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1878
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1879
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1880
+#include <port.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1881
+#include <gio/gio.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1882
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1883
+#ifndef _FEN_NODE_H_
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1884
+#define _FEN_NODE_H_
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1885
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1886
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1887
+#define FN_EVENT_CREATED G_FILE_MONITOR_EVENT_CREATED
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1888
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1889
+#define FN_EVENT_CREATED GAMIN_EVENT_CREATED
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1890
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1891
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1892
+#define NODE_STATE_NONE       0x00000000
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1893
+#define NODE_STATE_ASSOCIATED 0x00000001 /* This is a confilct to NODE_FLAG_STAT_DONE */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1894
+#define NODE_STATE_HAS_EVENTS 0x00000002
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1895
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1896
+#define NODE_FLAG_NONE             0x00000000
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1897
+#define NODE_FLAG_SNAPSHOT_UPDATED 0x00000001
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1898
+#define NODE_FLAG_DIR              0x00000002
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1899
+#define NODE_FLAG_STAT_UPDATED     0x00000004
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1900
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1901
+#define	NODE_CLE_STATE(f, st)  (f->state &= ~(st))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1902
+#define	NODE_SET_STATE(f, st)  (f->state = ((f->state & ~(st)) | (st)))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1903
+#define	NODE_HAS_STATE(f, st)  (f->state & (st))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1904
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1905
+#define	NODE_CLE_FLAG(f, fl)  (f->flag &= ~(fl))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1906
+#define	NODE_SET_FLAG(f, fl)  (f->flag = ((f->flag & ~(fl)) | (fl)))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1907
+#define	NODE_HAS_FLAG(f, fl)  (f->flag & (fl))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1908
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1909
+typedef struct node node_t;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1910
+struct node
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1911
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1912
+    file_obj_t  fobj;           /* Inherit from file_obj_t, must be the first. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1913
+    GSource    *source;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1914
+    gchar      *basename;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1915
+    guint32     state;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1916
+	guint32     flag;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1917
+    GTimeVal    atv;            /* Timestamp for the first added sub. */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1918
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1919
+	/* the parent and children of node */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1920
+    node_t *parent;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1921
+    GHashTable *children; /* children in basename */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1922
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1923
+	/* List of subscriptions monitoring this fdata/path */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1924
+	GList *subs;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1925
+	GList *dir_subs;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1926
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1927
+#ifdef GIO_COMPILATION
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1928
+    GFile* gfile;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1929
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1930
+};
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1931
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1932
+#define FILE_OBJECT(f)                ((file_obj_t *)(f))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1933
+#define NODE_NAME(f)                  (FILE_OBJECT(f)->fo_name)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1934
+#define NODE_PARENT(f)                (((node_t *)f)->parent)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1935
+#define	NODE_IS_ACTIVE(f)             (f->dir_subs || f->subs)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1936
+#define	NODE_IS_REQUIRED_BY_PARENT(f) (NODE_PARENT(f) && NODE_PARENT(f)->dir_subs)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1937
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1938
+gboolean node_timeval_lt(const GTimeVal *val1, const GTimeVal *val2);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1939
+gboolean node_try_delete(node_t* node);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1940
+void     node_traverse(node_t* node, void(*traverse_cb)(node_t*, gpointer), gpointer user_data);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1941
+node_t*  node_find(node_t* node, const gchar* filename, gboolean create_on_missing);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1942
+gint     node_lstat(node_t *f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1943
+void     node_create_children_snapshot(node_t *f, gint created_event, gboolean emit);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1944
+void     node_adjust_deleted(node_t *f);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1945
+gboolean node_class_init();
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1946
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1947
+typedef struct node_event
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1948
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1949
+    int e;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1950
+    gpointer user_data;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1951
+    gpointer pair_data;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1952
+    GTimeVal ctv;               /* Created timestamp */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1953
+    GTimeVal rename_tv;         /* Possible rename timestamp */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1954
+} node_event_t;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1955
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1956
+node_event_t* node_event_new (int event, gpointer user_data);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1957
+void node_event_delete (node_event_t* ev);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1958
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1959
+#endif /* _FEN_NODE_H_ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1960
diff --git a/server/gam_channel.c b/server/gam_channel.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1961
index 56c3ea7..6db1692 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1962
--- a/server/gam_channel.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1963
+++ b/server/gam_channel.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1964
@@ -7,6 +7,12 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1965
 #include <sys/stat.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1966
 #include <sys/un.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1967
 #include <sys/uio.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1968
+#if defined(sun)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1969
+#include <string.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1970
+#endif 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1971
+#if defined(HAVE_UCRED_H)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1972
+#include <ucred.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1973
+#endif defined(HAVE_UCRED_H)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1974
 #include "gam_error.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1975
 #include "gam_connection.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1976
 #include "gam_channel.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1977
@@ -101,6 +107,10 @@ gam_client_conn_check_cred(GIOChannel * source, int fd,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1978
     } cmsg;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1979
 #endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1980
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1981
+#if defined(HAVE_GETPEERUCRED)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1982
+    ucred_t *creds;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1983
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1984
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1985
     s_uid = getuid();
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1986
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1987
 #if defined(LOCAL_CREDS) && defined(HAVE_CMSGCRED)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1988
@@ -167,11 +177,25 @@ gam_client_conn_check_cred(GIOChannel * source, int fd,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1989
                       fd, cr_len, (int) sizeof(cr));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1990
             goto failed;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1991
         }
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1992
+#elif defined(HAVE_GETPEERUCRED)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1993
+	if ((creds = (ucred_t *)malloc(ucred_size()))==(ucred_t *)NULL){
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1994
+            GAM_DEBUG(DEBUG_INFO,"Malloc failed for ucreds");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1995
+	    goto failed;  
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1996
+	}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1997
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1998
+	if (getpeerucred(fd, &creds)!=0){
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  1999
+            GAM_DEBUG(DEBUG_INFO,"getpeerucred call failed");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2000
+	    goto failed;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2001
+	}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2002
+	c_uid = ucred_getruid(creds);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2003
+	c_gid = ucred_getrgid(creds);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2004
+	c_pid = ucred_getpid(creds);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2005
+	ucred_free(creds);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2006
 #elif defined(HAVE_CMSGCRED)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2007
 	c_pid = cmsg.cred.cmcred_pid;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2008
 	c_uid = cmsg.cred.cmcred_euid;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2009
 	c_gid = cmsg.cred.cmcred_groups[0];
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2010
-#else /* !SO_PEERCRED && !HAVE_CMSGCRED */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2011
+#else /* !SO_PEERCRED && !HAVE_CMSGCRED && !HAVE_GETPEERUCRED */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2012
         GAM_DEBUG(DEBUG_INFO,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2013
                   "Socket credentials not supported on this OS\n");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2014
         goto failed;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2015
diff --git a/server/gam_fen.c b/server/gam_fen.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2016
new file mode 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2017
index 0000000..21476e1
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2018
--- /dev/null
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2019
+++ b/server/gam_fen.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2020
@@ -0,0 +1,140 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2021
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2022
+/* vim:set expandtab ts=4 shiftwidth=4: */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2023
+/* 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2024
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2025
+ * Use is subject to license terms.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2026
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2027
+ * This library is free software; you can redistribute it and/or
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2028
+ * modify it under the terms of the GNU Lesser General Public
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2029
+ * License as published by the Free Software Foundation; either
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2030
+ * version 2 of the License, or (at your option) any later version.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2031
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2032
+ * This library is distributed in the hope that it will be useful,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2033
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2034
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2035
+ * Lesser General Public License for more details.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2036
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2037
+ * You should have received a copy of the GNU Lesser General
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2038
+ * Public License along with this library; if not, write to the
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2039
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2040
+ * Boston, MA 02111-1307, USA.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2041
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2042
+ * Authors: Lin Ma <[email protected]>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2043
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2044
+/*
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2045
+ * Design:
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2046
+ * A Solaris port has a resource limit of events (port_max_events) which 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2047
+ * limits the number of objects (fds) that can be actively associated objects
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2048
+ * whith the port. The default is (65536), but can be changed.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2049
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2050
+ * project.max-port-ids identify the max number of ports
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2051
+ * process.max-port-events identify the max objs of a port
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2052
+ * process.max-file-descriptor identify the max fds of a process
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2053
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2054
+ * For a user server process, process.max-file-descriptor seems a bottleneck.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2055
+ * I will use a port list for monitor fds to avoid process.max-file-descriptor
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2056
+ * is greater than process.max-port-events.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2057
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2058
+#include "config.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2059
+#include "gam_error.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2060
+#include "gam_fen.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2061
+#include "gam_event.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2062
+#include "gam_server.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2063
+#include "gam_protocol.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2064
+#include <glib.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2065
+#include "fen-helper.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2066
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2067
+/**
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2068
+ * Initializes the FEN system.  This must be called before
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2069
+ * any other functions in this module.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2070
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2071
+ * @returns TRUE if initialization succeeded, FALSE otherwise
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2072
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2073
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2074
+gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2075
+gam_fen_init (void)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2076
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2077
+    if (!fen_init ())
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2078
+        return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2079
+	
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2080
+	gam_server_install_kernel_hooks (GAMIN_K_FEN,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2081
+      gam_fen_add_subscription,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2082
+      gam_fen_remove_subscription,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2083
+      gam_fen_remove_all_for,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2084
+      NULL, NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2085
+	return TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2086
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2087
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2088
+/**
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2089
+ * Adds a subscription to be monitored.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2090
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2091
+ * @param sub a #GamSubscription to be polled
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2092
+ * @returns TRUE if adding the subscription succeeded, FALSE otherwise
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2093
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2094
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2095
+gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2096
+gam_fen_add_subscription (GamSubscription *sub)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2097
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2098
+    g_debug ("[ %s ] sub[0x%p]\n", __func__, sub);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2099
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2100
+	gam_listener_add_subscription (gam_subscription_get_listener (sub), sub);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2101
+    fen_add (gam_subscription_get_path(sub),
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2102
+      sub,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2103
+      gam_subscription_is_dir (sub));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2104
+	return TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2105
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2106
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2107
+/**
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2108
+ * Removes a subscription which was being monitored.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2109
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2110
+ * @param sub a #GamSubscription to remove
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2111
+ * @returns TRUE if removing the subscription succeeded, FALSE otherwise
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2112
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2113
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2114
+gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2115
+gam_fen_remove_subscription (GamSubscription *sub)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2116
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2117
+    g_debug ("[ %s ] sub[0x%p]\n", __func__, sub);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2118
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2119
+    fen_remove (gam_subscription_get_path(sub),
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2120
+      sub,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2121
+      gam_subscription_is_dir (sub));
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2122
+	/* free subscription */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2123
+    gam_subscription_cancel(sub);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2124
+	gam_subscription_free(sub);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2125
+	return TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2126
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2127
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2128
+/**
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2129
+ * Stop monitoring all subscriptions for a given listener.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2130
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2131
+ * @param listener a #GamListener
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2132
+ * @returns TRUE if removing the subscriptions succeeded, FALSE otherwise
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2133
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2134
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2135
+gboolean
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2136
+gam_fen_remove_all_for (GamListener *listener)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2137
+{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2138
+	GList *subs;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2139
+	GList *idx;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2140
+	gboolean success = TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2141
+	
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2142
+	subs = gam_listener_get_subscriptions (listener);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2143
+	
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2144
+	if (subs == NULL)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2145
+		return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2146
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2147
+	for (idx = subs; idx != NULL; idx = idx->next) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2148
+		GamSubscription *sub = (GamSubscription *)idx->data;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2149
+		g_assert (sub);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2150
+		if (!gam_fen_remove_subscription (sub))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2151
+			success = FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2152
+	}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2153
+	
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2154
+	if (subs) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2155
+		g_list_free (subs);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2156
+		return TRUE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2157
+	} else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2158
+		return FALSE;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2159
+	}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2160
+}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2161
diff --git a/server/gam_fen.h b/server/gam_fen.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2162
new file mode 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2163
index 0000000..47e952d
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2164
--- /dev/null
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2165
+++ b/server/gam_fen.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2166
@@ -0,0 +1,40 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2167
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2168
+/* vim:set expandtab ts=4 shiftwidth=4: */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2169
+/* 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2170
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2171
+ * Use is subject to license terms.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2172
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2173
+ * This library is free software; you can redistribute it and/or
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2174
+ * modify it under the terms of the GNU Lesser General Public
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2175
+ * License as published by the Free Software Foundation; either
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2176
+ * version 2 of the License, or (at your option) any later version.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2177
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2178
+ * This library is distributed in the hope that it will be useful,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2179
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2180
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2181
+ * Lesser General Public License for more details.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2182
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2183
+ * You should have received a copy of the GNU Lesser General
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2184
+ * Public License along with this library; if not, write to the
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2185
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2186
+ * Boston, MA 02111-1307, USA.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2187
+ *
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2188
+ * Authors: Lin Ma <[email protected]>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2189
+ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2190
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2191
+#ifndef __GAM_FEN_H__
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2192
+#define __GAM_FEN_H__
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2193
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2194
+#include <glib.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2195
+#include "gam_subscription.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2196
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2197
+G_BEGIN_DECLS
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2198
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2199
+gboolean gam_fen_init (void);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2200
+gboolean gam_fen_add_subscription (GamSubscription *sub);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2201
+gboolean gam_fen_remove_subscription (GamSubscription *sub);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2202
+gboolean gam_fen_remove_all_for (GamListener *listener);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2203
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2204
+G_END_DECLS
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2205
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2206
+#endif /* __GAM_FEN_H__ */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2207
diff --git a/server/gam_fs.c b/server/gam_fs.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2208
index c8ca704..1d2f2c8 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2209
--- a/server/gam_fs.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2210
+++ b/server/gam_fs.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2211
@@ -7,9 +7,20 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2212
 #include <string.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2213
 #include <errno.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2214
 #include <glib.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2215
+#ifdef HAVE_SYS_MNTTAB_H
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2216
+#include <sys/mnttab.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2217
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2218
 #include "gam_error.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2219
 #include "gam_fs.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2220
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2221
+#ifdef HAVE_SYS_MNTTAB_H
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2222
+#define MTAB	MNTTAB
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2223
+#define MTABDEL	"\t"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2224
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2225
+#define MTAB	"/etc/mtab"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2226
+#define MTABDEL	"\t"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2227
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2228
+
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2229
 #define DEFAULT_POLL_TIMEOUT 0
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2230
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2231
 typedef struct _gam_fs_properties {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2232
@@ -119,7 +130,7 @@ gam_fs_scan_mtab (void)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2233
 	gam_fs *fs = NULL;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2234
 	int i;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2235
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2236
-	g_file_get_contents ("/etc/mtab", &contents, &len, NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2237
+	g_file_get_contents (MTAB, &contents, &len, NULL);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2238
 	if (contents == NULL)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2239
 		return;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2240
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2241
@@ -133,7 +144,7 @@ gam_fs_scan_mtab (void)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2242
 			if (line[0] == '\0')
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2243
 				continue;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2244
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2245
-			words = g_strsplit (line, " ", 0);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2246
+			words = g_strsplit (line, MTABDEL, 0);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2247
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2248
 			if (words == NULL)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2249
 				continue;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2250
@@ -176,19 +187,25 @@ gam_fs_init (void)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2251
 		gam_fs_set ("ext2", GFS_MT_DEFAULT, 0);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2252
 		gam_fs_set ("reiser4", GFS_MT_DEFAULT, 0);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2253
 		gam_fs_set ("reiserfs", GFS_MT_DEFAULT, 0);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2254
+		gam_fs_set ("zfs", GFS_MT_DEFAULT, 0);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2255
+		gam_fs_set ("ufs", GFS_MT_DEFAULT, 0);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2256
 		gam_fs_set ("novfs", GFS_MT_POLL, 30);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2257
+#ifdef ENABLE_FEN
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2258
+		gam_fs_set ("nfs", GFS_MT_DEFAULT, 0);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2259
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2260
 		gam_fs_set ("nfs", GFS_MT_POLL, 5);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2261
-		if (stat("/etc/mtab", &mtab_sbuf) != 0)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2262
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2263
+		if (stat(MTAB, &mtab_sbuf) != 0)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2264
 		{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2265
-			GAM_DEBUG(DEBUG_INFO, "Could not stat /etc/mtab\n");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2266
+			GAM_DEBUG(DEBUG_INFO, "Could not stat %s\n",MTAB);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2267
 		}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2268
 		gam_fs_scan_mtab ();
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2269
 	} else {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2270
 		struct stat sbuf;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2271
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2272
-		if (stat("/etc/mtab", &sbuf) != 0)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2273
+		if (stat(MTAB, &sbuf) != 0)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2274
 		{
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2275
-			GAM_DEBUG(DEBUG_INFO, "Could not stat /etc/mtab\n");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2276
+			GAM_DEBUG(DEBUG_INFO, "Could not stat %s\n",MTAB);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2277
 		}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2278
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2279
 		/* /etc/mtab has changed */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2280
diff --git a/server/gam_fs.h b/server/gam_fs.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2281
index bc2d538..94e70fd 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2282
--- a/server/gam_fs.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2283
+++ b/server/gam_fs.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2284
@@ -8,6 +8,7 @@ typedef enum {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2285
 #if !defined(ENABLE_DNOTIFY) && \
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2286
     !defined(ENABLE_INOTIFY) && \
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2287
     !defined(ENABLE_KQUEUE) && \
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2288
+    !defined(ENABLE_FEN) && \
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2289
     !defined(ENABLE_HURD_MACH_NOTIFY)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2290
 	GFS_MT_DEFAULT = GFS_MT_POLL,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2291
 #else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2292
diff --git a/server/gam_server.c b/server/gam_server.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2293
index f92a691..e5da29f 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2294
--- a/server/gam_server.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2295
+++ b/server/gam_server.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2296
@@ -45,6 +45,9 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2297
 #ifdef ENABLE_HURD_MACH_NOTIFY
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2298
 #include "gam_hurd_mach_notify.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2299
 #endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2300
+#ifdef ENABLE_FEN
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2301
+#include "gam_fen.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2302
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2303
 #include "gam_excludes.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2304
 #include "gam_fs.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2305
 #include "gam_conf.h" 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2306
@@ -162,6 +165,12 @@ gam_init_subscriptions(void)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2307
 			return(TRUE);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2308
 		}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2309
 #endif	
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2310
+#ifdef ENABLE_FEN
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2311
+		if (gam_fen_init()) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2312
+			GAM_DEBUG(DEBUG_INFO, "Using fen as backend\n");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2313
+			return(TRUE);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2314
+		}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2315
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2316
 	}
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2317
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2318
 	if (gam_poll_basic_init()) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2319
@@ -627,6 +636,10 @@ main(int argc, const char *argv[])
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2320
     signal(SIGQUIT, gam_exit);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2321
     signal(SIGTERM, gam_exit);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2322
     signal(SIGPIPE, SIG_IGN);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2323
+#ifdef ENABLE_FEN
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2324
+    signal(SIGUSR1, SIG_IGN);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2325
+    signal(SIGUSR2, SIG_IGN);
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2326
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2327
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2328
     if (!gam_init_subscriptions()) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2329
 	GAM_DEBUG(DEBUG_INFO, "Could not initialize the subscription system.\n");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2330
diff --git a/server/gam_server.h b/server/gam_server.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2331
index bc99e09..313dd84 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2332
--- a/server/gam_server.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2333
+++ b/server/gam_server.h
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2334
@@ -16,7 +16,8 @@ typedef enum {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2335
 	GAMIN_K_INOTIFY = 2,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2336
 	GAMIN_K_KQUEUE = 3,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2337
 	GAMIN_K_MACH = 4,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2338
-	GAMIN_K_INOTIFY2 = 5
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2339
+	GAMIN_K_INOTIFY2 = 5,
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2340
+	GAMIN_K_FEN = 6
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2341
 } GamKernelHandler;
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2342
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2343
 typedef enum {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2344
diff --git a/tests/testing.c b/tests/testing.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2345
index 9926c0a..4c08740 100644
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2346
--- a/tests/testing.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2347
+++ b/tests/testing.c
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2348
@@ -1,3 +1,4 @@
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2349
+#include "config.h"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2350
 #include <stdio.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2351
 #include <stdlib.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2352
 #include <unistd.h>
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2353
@@ -31,6 +32,11 @@ static struct testState {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2354
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2355
 #define IS_BLANK(p) ((*(p) == ' ') || (*(p) == '\t') ||		\
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2356
                      (*(p) == '\n') || (*(p) == '\r'))
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2357
+#ifdef ENABLE_FEN
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2358
+#define KILLCMD	"pkill"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2359
+#else
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2360
+#define KILLCMD	"killall"
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2361
+#endif
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2362
 
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2363
 static int
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2364
 scanCommand(char *line, char **command, char **arg, char **arg2)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2365
@@ -268,7 +274,7 @@ processCommand(char *line, int no)
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2366
          * okay, it's heavy but that's the simplest way since we do not have
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2367
          * the pid(s) of the servers running.
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2368
          */
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2369
-        ret = system("killall gam_server");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2370
+        ret = system(KILLCMD" gam_server");
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2371
         if (ret < 0) {
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2372
             fprintf(stderr, "kill line %d: failed to killall gam_server\n",
ad8cc19e4aec 21036504 Move libgamin from Desktop to Userland consolidation
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
  2373
                     no);