aboutsummaryrefslogtreecommitdiffstats
path: root/devel/gamin
diff options
context:
space:
mode:
authormarcus <marcus@FreeBSD.org>2006-02-09 14:40:18 +0800
committermarcus <marcus@FreeBSD.org>2006-02-09 14:40:18 +0800
commit52f3d06fd827f4b3d0f13ff09d7349f281a470ae (patch)
tree37a59b507a85dbf224499ae42463a709e70064c6 /devel/gamin
parent738ba5afc393571b734c746ad531520212acd986 (diff)
downloadfreebsd-ports-gnome-52f3d06fd827f4b3d0f13ff09d7349f281a470ae.tar.gz
freebsd-ports-gnome-52f3d06fd827f4b3d0f13ff09d7349f281a470ae.tar.zst
freebsd-ports-gnome-52f3d06fd827f4b3d0f13ff09d7349f281a470ae.zip
* Update to 0.1.7, and add support for file system type detection (currently,
only UFS file systems are handled by kqueue, but this might change in the future if kqueue on NFS proves stable) [1] * Switch py-gamin to use USE_FAM+WANT_FAM_SYSTEM * Switch test target to regression-test so that pointyhat will run tests automatically Submitted by: ale [1]
Diffstat (limited to 'devel/gamin')
-rw-r--r--devel/gamin/Makefile10
-rw-r--r--devel/gamin/distinfo6
-rw-r--r--devel/gamin/files/patch-libgamin_gam_api.c41
-rw-r--r--devel/gamin/files/patch-libgamin_gam_data.c11
-rw-r--r--devel/gamin/files/patch-python_Makefile.in6
-rw-r--r--devel/gamin/files/patch-server_gam_channel.c128
-rw-r--r--devel/gamin/files/patch-server_gam_fs.c123
-rw-r--r--devel/gamin/files/patch-server_gam_kqueue.c67
-rw-r--r--devel/gamin/files/patch-server_gam_node.c10
-rw-r--r--devel/gamin/files/patch-server_gam_pidname.c13
-rw-r--r--devel/gamin/files/patch-server_gam_poll_basic.c14
-rw-r--r--devel/gamin/files/patch-server_gam_server.c67
-rw-r--r--devel/gamin/files/patch-tests_testing.c6
13 files changed, 304 insertions, 198 deletions
diff --git a/devel/gamin/Makefile b/devel/gamin/Makefile
index 091be3877e0c..b3bcdf34d15b 100644
--- a/devel/gamin/Makefile
+++ b/devel/gamin/Makefile
@@ -6,8 +6,8 @@
#
PORTNAME= gamin
-PORTVERSION= 0.1.5
-PORTREVISION?= 3
+PORTVERSION= 0.1.7
+PORTREVISION?= 0
CATEGORIES?= devel
MASTER_SITES= http://www.gnome.org/~veillard/gamin/sources/
@@ -17,7 +17,7 @@ COMMENT?= A file and directory monitoring system
USE_GMAKE= yes
USE_GNOME?= gnomehack glib20
INSTALLS_SHLIB= yes
-CONFIGURE_ARGS?=--disable-gtk-doc --with-html-dir=${PREFIX}/share/doc \
+CONFIGURE_ARGS?=--with-html-dir=${PREFIX}/share/doc \
--without-python
CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include ${PTHREAD_CFLAGS}" \
LDFLAGS="-L${LOCALBASE}/lib ${PTHREAD_LIBS}"
@@ -31,10 +31,10 @@ USE_AUTOTOOLS= libtool:15:inc
.endif
post-patch:
- @${FIND} ${WRKSRC} -type f | ${XARGS} ${TOUCH} -f
+ @${REINPLACE_CMD} "s|/etc|${PREFIX}/etc|g" ${WRKSRC}/server/gam_conf.c
.if !defined(GAMIN_SLAVE)
-tests: build
+regression-test: build
@${ECHO_MSG} "===> Running gamin regression tests"
@(cd ${WRKSRC}/tests && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} \
Makefile ${MAKE_ARGS} tests)
diff --git a/devel/gamin/distinfo b/devel/gamin/distinfo
index ec079a71e1a8..2cba0d5a05a4 100644
--- a/devel/gamin/distinfo
+++ b/devel/gamin/distinfo
@@ -1,3 +1,3 @@
-MD5 (gamin-0.1.5.tar.gz) = 0fad3fce44466bbb5a5d0450b4700e05
-SHA256 (gamin-0.1.5.tar.gz) = 9c12e6a179617a0b45a398f437adc6ea6e1c58cae82673ad67f3d431dac518b9
-SIZE (gamin-0.1.5.tar.gz) = 531603
+MD5 (gamin-0.1.7.tar.gz) = 1a1991ffa749b7dc2cc0573d6a2867b8
+SHA256 (gamin-0.1.7.tar.gz) = 8272c64356e1310353f2411b2cabd211468edbf8ce312d58aeef55889e79361a
+SIZE (gamin-0.1.7.tar.gz) = 542061
diff --git a/devel/gamin/files/patch-libgamin_gam_api.c b/devel/gamin/files/patch-libgamin_gam_api.c
index 296cd00014ae..7c46e93354a3 100644
--- a/devel/gamin/files/patch-libgamin_gam_api.c
+++ b/devel/gamin/files/patch-libgamin_gam_api.c
@@ -1,5 +1,5 @@
---- libgamin/gam_api.c.orig Sun Jul 17 16:48:54 2005
-+++ libgamin/gam_api.c Sun Jul 17 16:53:58 2005
+--- libgamin/gam_api.c.orig Tue Feb 7 17:49:07 2006
++++ libgamin/gam_api.c Tue Feb 7 17:49:13 2006
@@ -14,6 +14,7 @@
#include <sys/socket.h>
#include <sys/un.h>
@@ -8,7 +8,7 @@
#include "fam.h"
#include "gam_protocol.h"
#include "gam_data.h"
-@@ -421,10 +422,10 @@ gamin_write_credential_byte(int fd)
+@@ -421,10 +422,10 @@
{
char data[2] = { 0, 0 };
int written;
@@ -22,7 +22,7 @@
} cmsg;
struct iovec iov;
struct msghdr msg;
-@@ -436,16 +437,16 @@ gamin_write_credential_byte(int fd)
+@@ -436,16 +437,16 @@
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
@@ -43,7 +43,7 @@
written = sendmsg(fd, &msg, 0);
#else
written = write(fd, &data[0], 1);
-@@ -647,15 +648,16 @@ gamin_check_cred(GAMDataPtr conn, int fd
+@@ -647,15 +648,16 @@
gid_t c_gid;
#ifdef HAVE_CMSGCRED
@@ -63,7 +63,7 @@
/* Set the socket to receive credentials on the next message */
{
int on = 1;
-@@ -676,8 +678,8 @@ gamin_check_cred(GAMDataPtr conn, int fd
+@@ -676,8 +678,8 @@
#ifdef HAVE_CMSGCRED
memset(&cmsg, 0, sizeof(cmsg));
@@ -74,27 +74,46 @@
#endif
retry:
-@@ -694,7 +696,8 @@ retry:
+@@ -694,7 +696,7 @@
goto failed;
}
#ifdef HAVE_CMSGCRED
- if (cmsg.hdr.cmsg_len < sizeof(cmsg) || cmsg.hdr.cmsg_type != SCM_CREDS) {
-+ if (cmsg.hdr.cmsg_len < CMSG_LEN (sizeof (struct cmsgcred))
-+ || cmsg.hdr.cmsg_type != SCM_CREDS) {
++ if (cmsg.hdr.cmsg_len < CMSG_LEN (sizeof (struct cmsgcred)) || cmsg.hdr.cmsg_type != SCM_CREDS) {
GAM_DEBUG(DEBUG_INFO,
"Message from recvmsg() was not SCM_CREDS\n");
goto failed;
-@@ -720,9 +723,10 @@ retry:
+@@ -720,9 +722,10 @@
goto failed;
}
#elif defined(HAVE_CMSGCRED)
- c_pid = cmsg.cred.cmcred_pid;
- c_uid = cmsg.cred.cmcred_euid;
- c_gid = cmsg.cred.cmcred_groups[0];
-+ cred = (struct cmsgcred *) CMSG_DATA (&cmsg);
++ cred = (struct cmsgcred *) CMSG_DATA (&cmsg);
+ c_pid = cred->cmcred_pid;
+ c_uid = cred->cmcred_euid;
+ c_gid = cred->cmcred_groups[0];
#else /* !SO_PEERCRED && !HAVE_CMSGCRED */
GAM_DEBUG(DEBUG_INFO,
"Socket credentials not supported on this OS\n");
+@@ -1283,14 +1286,17 @@
+
+ // FIXME: drop and reacquire lock while blocked?
+ gamin_data_lock(conn);
+- if (!gamin_data_event_ready(conn)) {
++ while ((ret = gamin_data_event_ready(conn)) == 0) {
+ if (gamin_read_data(conn, fc->fd, 1) < 0) {
+ gamin_try_reconnect(conn, fc->fd);
+ FAMErrno = FAM_CONNECT;
+ return (-1);
+ }
+ }
+- ret = gamin_data_read_event(conn, fe);
++
++ if (ret > 0)
++ ret = gamin_data_read_event(conn, fe);
++
+ gamin_data_unlock(conn);
+
+ if (ret < 0) {
diff --git a/devel/gamin/files/patch-libgamin_gam_data.c b/devel/gamin/files/patch-libgamin_gam_data.c
deleted file mode 100644
index 7a54719ff2c0..000000000000
--- a/devel/gamin/files/patch-libgamin_gam_data.c
+++ /dev/null
@@ -1,11 +0,0 @@
---- libgamin/gam_data.c.orig Thu May 19 20:55:27 2005
-+++ libgamin/gam_data.c Thu May 19 20:55:45 2005
-@@ -471,7 +471,7 @@
- }
- if (is_threaded > 0) {
- pthread_mutexattr_init(&attr);
-- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
-+ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
- pthread_mutex_init(&ret->lock, &attr);
- pthread_mutexattr_destroy(&attr);
- }
diff --git a/devel/gamin/files/patch-python_Makefile.in b/devel/gamin/files/patch-python_Makefile.in
index d27f81e98ec4..3cc568b4e851 100644
--- a/devel/gamin/files/patch-python_Makefile.in
+++ b/devel/gamin/files/patch-python_Makefile.in
@@ -1,5 +1,5 @@
---- python/Makefile.in.orig Thu May 19 20:43:35 2005
-+++ python/Makefile.in Thu May 19 20:44:30 2005
+--- python/Makefile.in.orig Mon Feb 6 23:00:32 2006
++++ python/Makefile.in Tue Feb 7 08:10:46 2006
@@ -59,7 +59,7 @@
pythonLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(python_LTLIBRARIES)
@@ -9,7 +9,7 @@
@WITH_PYTHON_TRUE@_gamin_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am___gamin_la_SOURCES_DIST = gamin.c
@WITH_PYTHON_TRUE@am__gamin_la_OBJECTS = gamin.lo
-@@ -237,9 +237,9 @@
+@@ -239,9 +239,9 @@
gamin.c \
gamin.py
diff --git a/devel/gamin/files/patch-server_gam_channel.c b/devel/gamin/files/patch-server_gam_channel.c
index 8482e3408578..b87f2543dbcc 100644
--- a/devel/gamin/files/patch-server_gam_channel.c
+++ b/devel/gamin/files/patch-server_gam_channel.c
@@ -1,6 +1,14 @@
--- server/gam_channel.c.orig Tue Aug 9 18:17:39 2005
-+++ server/gam_channel.c Fri Oct 21 07:55:31 2005
-@@ -30,10 +30,10 @@
++++ server/gam_channel.c Wed Feb 8 11:23:26 2006
+@@ -7,6 +7,7 @@
+ #include <sys/stat.h>
+ #include <sys/un.h>
+ #include <sys/uio.h>
++#include <string.h>
+ #include "gam_error.h"
+ #include "gam_connection.h"
+ #include "gam_channel.h"
+@@ -30,10 +31,10 @@
{
char data[2] = { 0, 0 };
int written;
@@ -14,7 +22,7 @@
} cmsg;
struct iovec iov;
struct msghdr msg;
-@@ -45,16 +45,16 @@
+@@ -45,16 +46,16 @@
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
@@ -35,7 +43,7 @@
written = sendmsg(fd, &msg, 0);
#else
written = write(fd, &data[0], 1);
-@@ -95,15 +95,16 @@
+@@ -95,15 +96,16 @@
gid_t c_gid;
#ifdef HAVE_CMSGCRED
@@ -55,7 +63,7 @@
/* Set the socket to receive credentials on the next message */
{
int on = 1;
-@@ -124,8 +125,8 @@
+@@ -124,8 +126,8 @@
#ifdef HAVE_CMSGCRED
memset(&cmsg, 0, sizeof(cmsg));
@@ -66,13 +74,12 @@
#endif
retry:
-@@ -142,7 +143,8 @@
+@@ -142,7 +144,7 @@
goto failed;
}
#ifdef HAVE_CMSGCRED
- if (cmsg.hdr.cmsg_len < sizeof(cmsg) || cmsg.hdr.cmsg_type != SCM_CREDS) {
-+ if (cmsg.hdr.cmsg_len < CMSG_LEN (sizeof (struct cmsgcred))
-+ || cmsg.hdr.cmsg_type != SCM_CREDS) {
++ if (cmsg.hdr.cmsg_len < CMSG_LEN (sizeof (struct cmsgcred)) || cmsg.hdr.cmsg_type != SCM_CREDS) {
GAM_DEBUG(DEBUG_INFO,
"Message from recvmsg() was not SCM_CREDS\n");
goto failed;
@@ -90,103 +97,18 @@
#else /* !SO_PEERCRED && !HAVE_CMSGCRED */
GAM_DEBUG(DEBUG_INFO,
"Socket credentials not supported on this OS\n");
-@@ -513,66 +516,6 @@
- g_free(dir);
- return(FALSE);
- }
--
--/**
-- * gam_check_secure_path:
-- * @path: path to the (possibly abstract) socket
-- *
-- * Tries to create or ensure that the socket used for communicating with
-- * the clients are in a safe directory to avoid possible attacks.
-- *
-- * Returns the socket file descriptor or -1 in case of error.
-- */
--static gboolean
--gam_check_secure_path(const char *path)
--{
-- struct stat st;
-- int ret;
--
-- if (!gam_check_secure_dir())
-- return(FALSE);
-- /*
-- * Check the existing socket if any
-- */
-- ret = stat(path, &st);
-- if (ret < 0)
-- return(TRUE);
--
-- if (st.st_uid != getuid()) {
-- gam_error(DEBUG_INFO,
-- "Socket %s has different owner\n",
-- path);
-- goto cleanup;
-- }
--#ifdef S_ISSOCK
-- if (!S_ISSOCK (st.st_mode)) {
-- gam_error(DEBUG_INFO, "Socket path %s is not a socket\n",
-- path);
-- goto cleanup;
-- }
--#endif
-- if (st.st_mode & (S_IRWXG|S_IRWXO)) {
-- gam_error(DEBUG_INFO,
-- "Socket %s has wrong permissions\n",
-- path);
-- goto cleanup;
-- }
+@@ -557,11 +560,9 @@
+ path);
+ goto cleanup;
+ }
- /*
- * Looks good though binding may fail due to an existing server
- */
- return(TRUE);
-
--cleanup:
-- /*
-- * the existing file at the socket location seems strange, try to remove it
-- */
-- ret = unlink(path);
-- if (ret < 0) {
-- gam_error(DEBUG_INFO, "Failed to remove %s\n", path);
-- return(FALSE);
-- }
-- return(TRUE);
--}
- #endif /* ! HAVE_ABSTRACT_SOCKETS */
-
- /************************************************************************
-@@ -620,6 +563,7 @@
- {
- int fd;
- struct sockaddr_un addr;
-+ struct stat st;
-
- fd = socket(PF_UNIX, SOCK_STREAM, 0);
- if (fd < 0) {
-@@ -635,13 +579,18 @@
- addr.sun_path[0] = '\0';
- strncpy(&addr.sun_path[1], path, (sizeof(addr) - 4) - 2);
- #else
-- /*
-- * if the socket is exposed at the filesystem level we need to take
-- * some extra protection checks. Also make sure the socket is created
-- * with restricted mode
-- */
-- if (!gam_check_secure_path(path)) {
-+ if (! gam_check_secure_dir()) {
-+ close(fd);
-+ return (-1);
-+ }
-+
-+ if (stat(path, &st) == 0) {
-+ /* bind() will fail if the socket already exists */
-+ if (unlink(path) < 0) {
-+ GAM_DEBUG(DEBUG_INFO, "Failed to remove %s\n", path);
-+ close(fd);
- return (-1);
-+ }
- }
- strncpy(&addr.sun_path[0], path, (sizeof(addr) - 4) - 1);
- umask(0077);
++ gam_error(DEBUG_INFO,
++ "Maybe there is another server listening on socket %s\n",
++ path);
+ cleanup:
+ /*
+ * the existing file at the socket location seems strange, try to remove it
diff --git a/devel/gamin/files/patch-server_gam_fs.c b/devel/gamin/files/patch-server_gam_fs.c
new file mode 100644
index 000000000000..5039c65931ad
--- /dev/null
+++ b/devel/gamin/files/patch-server_gam_fs.c
@@ -0,0 +1,123 @@
+--- server/gam_fs.c.orig Sat Aug 6 00:31:46 2005
++++ server/gam_fs.c Wed Feb 8 15:05:24 2006
+@@ -7,6 +7,11 @@
+ #include <string.h>
+ #include <errno.h>
+ #include <glib.h>
++#ifdef __FreeBSD__
++#include <sys/param.h>
++#include <sys/ucred.h>
++#include <sys/mount.h>
++#endif
+ #include "gam_error.h"
+ #include "gam_fs.h"
+
+@@ -26,7 +31,9 @@
+ static gboolean initialized = FALSE;
+ static GList *filesystems = NULL;
+ static GList *fs_props = NULL;
++#ifdef __linux__
+ static struct stat mtab_sbuf;
++#endif
+
+ static void
+ gam_fs_free_filesystems (void)
+@@ -110,6 +117,7 @@
+ return strlen(fsb->path) - strlen (fsa->path);
+ }
+
++#ifdef __linux__
+ static void
+ gam_fs_scan_mtab (void)
+ {
+@@ -165,10 +173,40 @@
+ gam_fs_free_filesystems ();
+ filesystems = g_list_sort (new_filesystems, gam_fs_filesystem_sort_cb);
+ }
++#endif
++
++#ifdef __FreeBSD__
++static void
++gam_fs_getmntinfo (void)
++{
++ struct statfs *stat;
++ GList *new_filesystems = NULL;
++ gam_fs *fs = NULL;
++ int i, n;
++
++ n = getmntinfo(&stat, MNT_NOWAIT);
++ if (n == -1)
++ return;
++
++ for (i = 0; i < n; i++)
++ {
++ fs = g_new0 (gam_fs, 1);
++ fs->path = g_strdup (stat[i].f_mntonname);
++ fs->fsname = g_strdup (stat[i].f_fstypename);
++
++ new_filesystems = g_list_prepend (new_filesystems, fs);
++ }
++
++ /* Replace the old file systems list with the new one */
++ gam_fs_free_filesystems ();
++ filesystems = g_list_sort (new_filesystems, gam_fs_filesystem_sort_cb);
++}
++#endif
+
+ void
+ gam_fs_init (void)
+ {
++#if defined(__linux__)
+ if (initialized == FALSE)
+ {
+ initialized = TRUE;
+@@ -181,6 +219,7 @@
+ if (stat("/etc/mtab", &mtab_sbuf) != 0)
+ {
+ GAM_DEBUG(DEBUG_INFO, "Could not stat /etc/mtab\n");
++ return;
+ }
+ gam_fs_scan_mtab ();
+ } else {
+@@ -189,6 +228,7 @@
+ if (stat("/etc/mtab", &sbuf) != 0)
+ {
+ GAM_DEBUG(DEBUG_INFO, "Could not stat /etc/mtab\n");
++ return;
+ }
+
+ /* /etc/mtab has changed */
+@@ -199,6 +239,17 @@
+
+ mtab_sbuf = sbuf;
+ }
++#elif defined(__FreeBSD__)
++ if (initialized == FALSE)
++ {
++ initialized = TRUE;
++ gam_fs_set ("ufs", GFS_MT_KERNEL, 0);
++ gam_fs_set ("nfs", GFS_MT_POLL, 5);
++ gam_fs_set ("smbfs", GFS_MT_POLL, 5);
++ }
++ gam_fs_getmntinfo ();
++
++#endif
+ }
+
+ gam_fs_mon_type
+@@ -209,10 +260,11 @@
+
+ props = gam_fs_find_fs_props (path);
+
+- if (!props)
+- return GFS_MT_KERNEL;
+-
+- return props->mon_type;
++#if defined(ENABLE_INOTIFY) || defined(ENABLE_DNOTIFY) || defined(ENABLE_KQUEUE) || defined(ENABLE_HURD_MACH_NOTIFY)
++ if (props)
++ return props->mon_type;
++#endif
++ return GFS_MT_POLL;
+ }
+
+ int
diff --git a/devel/gamin/files/patch-server_gam_kqueue.c b/devel/gamin/files/patch-server_gam_kqueue.c
index 3531c6d6614d..dc0cece61eec 100644
--- a/devel/gamin/files/patch-server_gam_kqueue.c
+++ b/devel/gamin/files/patch-server_gam_kqueue.c
@@ -1,15 +1,37 @@
---- server/gam_kqueue.c.orig Mon Feb 6 18:00:49 2006
-+++ server/gam_kqueue.c Mon Feb 6 18:01:25 2006
-@@ -31,7 +31,7 @@
+--- server/gam_kqueue.c.orig Wed Aug 10 23:50:32 2005
++++ server/gam_kqueue.c Wed Feb 8 12:43:52 2006
+@@ -10,9 +10,8 @@
+ * FAM should do: we do not call g_dir_open() if the file is a
+ * symbolic link).
+ *
+- * * kqueue cannot monitor files residing on anything but a UFS
+- * file system. If kqueue cannot monitor a file, this backend
+- * will poll it periodically.
++ * * kqueue can only monitor files residing on a UFS file system.
++ * For other file systems, the basic poll backend will be used.
+ *
+ * * Monitoring a file with kqueue prevents the file system it
+ * resides on from being unmounted, because kqueue can only
+@@ -31,7 +30,8 @@
* - kqueue needs to be moved out the UFS code.
*
* Copyright (C) 2005 Joe Marcus Clarke <marcus@FreeBSD.org>
- * Copyright (C) 2005 Jean-Yves Lefort <jylefort@FreeBSD.org>
+ * Copyright (C) 2005, 2006 Jean-Yves Lefort <jylefort@FreeBSD.org>
++ * Copyright (C) 2006 Alex Dupre <ale@FreeBSD.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
-@@ -515,7 +515,7 @@
+@@ -63,7 +63,7 @@
+ #include "gam_kqueue.h"
+ #include "gam_event.h"
+ #include "gam_server.h"
+-#include "gam_poll.h"
++#include "gam_poll_basic.h"
+
+ /*** tunable constants, modify to tweak the backend aggressivity *************/
+
+@@ -516,7 +516,7 @@
return FALSE;
}
@@ -18,3 +40,40 @@
if (mon->fd < 0)
{
GAM_DEBUG(DEBUG_INFO, "cannot open %s (%s), falling back to poll\n", mon->pathname, g_strerror(errno));
+@@ -840,6 +840,8 @@
+ case GAMIN_EVENT_MOVED:
+ gam_kqueue_sub_monitor_set_missing(smon);
+ break;
++ default:
++ break;
+ }
+
+ gam_server_emit_event(mon->pathname, isdir, event, smon->subs, 1);
+@@ -981,6 +983,8 @@
+
+ gam_kqueue_hash_table_remove(fmon->smon->fmons, fmon);
+ break;
++ default:
++ break;
+ }
+ }
+
+@@ -1167,11 +1171,13 @@
+ channel = g_io_channel_unix_new(kq);
+ g_io_add_watch(channel, G_IO_IN, gam_kqueue_kevent_cb, NULL);
+
+-
+- gam_poll_set_kernel_handler(NULL, NULL, GAMIN_K_KQUEUE);
+- gam_backend_add_subscription = gam_kqueue_add_subscription;
+- gam_backend_remove_subscription = gam_kqueue_remove_subscription;
+- gam_backend_remove_all_for = gam_kqueue_remove_all_for;
++ gam_poll_basic_init ();
++ gam_server_install_kernel_hooks (GAMIN_K_KQUEUE,
++ gam_kqueue_add_subscription,
++ gam_kqueue_remove_subscription,
++ gam_kqueue_remove_all_for,
++ NULL,
++ NULL);
+
+ return TRUE;
+ }
diff --git a/devel/gamin/files/patch-server_gam_node.c b/devel/gamin/files/patch-server_gam_node.c
new file mode 100644
index 000000000000..dbf7f638be5b
--- /dev/null
+++ b/devel/gamin/files/patch-server_gam_node.c
@@ -0,0 +1,10 @@
+--- server/gam_node.c.orig Thu Feb 9 01:22:56 2006
++++ server/gam_node.c Thu Feb 9 01:23:03 2006
+@@ -23,6 +23,7 @@
+ #include "gam_event.h"
+ #include "gam_node.h"
+ #include "gam_error.h"
++#include "gam_server.h"
+
+ /**
+ * Create a new node
diff --git a/devel/gamin/files/patch-server_gam_pidname.c b/devel/gamin/files/patch-server_gam_pidname.c
deleted file mode 100644
index d81b870fa5f0..000000000000
--- a/devel/gamin/files/patch-server_gam_pidname.c
+++ /dev/null
@@ -1,13 +0,0 @@
---- server/gam_pidname.c.orig Wed Aug 10 00:00:18 2005
-+++ server/gam_pidname.c Wed Aug 10 00:00:47 2005
-@@ -7,9 +7,9 @@
-
- char *gam_get_pidname (int pid)
- {
-+ gchar *pidname = NULL;
- #ifdef HAVE_LINUX
- gchar *procname;
-- gchar *pidname = NULL;
- FILE *fp;
- #endif
-
diff --git a/devel/gamin/files/patch-server_gam_poll_basic.c b/devel/gamin/files/patch-server_gam_poll_basic.c
new file mode 100644
index 000000000000..7517b70fecc3
--- /dev/null
+++ b/devel/gamin/files/patch-server_gam_poll_basic.c
@@ -0,0 +1,14 @@
+--- server/gam_poll_basic.c.orig Mon Feb 6 22:55:40 2006
++++ server/gam_poll_basic.c Mon Feb 6 22:58:47 2006
+@@ -335,7 +335,11 @@
+ } else {
+ #ifdef VERBOSE_POLL
+ GAM_DEBUG(DEBUG_INFO, "Poll: poll_file %s unchanged\n", path);
++#ifdef ST_MTIM_NSEC
+ GAM_DEBUG(DEBUG_INFO, "%d %d : %d %d\n", node->sbuf.st_mtim.tv_sec, node->sbuf.st_mtim.tv_nsec, sbuf.st_mtim.tv_sec, sbuf.st_mtim.tv_nsec);
++#else
++ GAM_DEBUG(DEBUG_INFO, "%d : %d\n", node->sbuf.st_mtime, sbuf.st_mtime);
++#endif
+ #endif
+ }
+
diff --git a/devel/gamin/files/patch-server_gam_server.c b/devel/gamin/files/patch-server_gam_server.c
index 5a2dca9581cd..f593406a5fa9 100644
--- a/devel/gamin/files/patch-server_gam_server.c
+++ b/devel/gamin/files/patch-server_gam_server.c
@@ -1,46 +1,29 @@
---- server/gam_server.c.orig Wed Aug 10 00:01:21 2005
-+++ server/gam_server.c Wed Aug 10 00:03:41 2005
-@@ -170,9 +170,11 @@ gam_add_subscription(GamSubscription * s
- if (gam_exclude_check (path))
- {
- GAM_DEBUG(DEBUG_INFO, "g_a_s: %s excluded\n", path);
-+#ifdef ENABLE_INOTIFY
- if (gam_inotify_is_running())
- return gam_poll_add_subscription (sub);
- else
-+#endif
- return gam_backend_add_subscription(sub);
- } else {
- gam_fs_mon_type type;
-@@ -211,9 +213,11 @@ gam_remove_subscription(GamSubscription
-
- if (gam_exclude_check (path))
- {
-+#ifdef ENABLE_INOTIFY
- if (gam_inotify_is_running())
- return gam_poll_remove_subscription (sub);
- else
-+#endif
- return gam_backend_remove_subscription(sub);
- } else {
- gam_fs_mon_type type;
-@@ -300,15 +304,19 @@ gam_server_emit_one_event(const char *pa
-
- reqno = gam_subscription_get_reqno(sub);
+--- server/gam_server.c.orig Wed Sep 21 18:21:05 2005
++++ server/gam_server.c Tue Feb 7 13:12:02 2006
+@@ -32,7 +32,7 @@
+ #include "gam_server.h"
+ #include "gam_channel.h"
+ #include "gam_subscription.h"
+-#include "gam_poll_generic.h"
++#include "gam_poll_basic.h"
+ #ifdef ENABLE_INOTIFY
+ #include "gam_inotify.h"
+ #endif
+@@ -164,7 +164,7 @@
+ #endif
+ }
-+#ifdef ENABLE_INOTIFY
- if (gam_inotify_is_running())
- {
- gam_queue_event(conn, reqno, event, subpath, len);
- } else {
-+#endif
- if (gam_send_event(conn, reqno, event, subpath, len) < 0) {
- GAM_DEBUG(DEBUG_INFO, "Failed to send event to PID %d\n",
- gam_connection_get_pid(conn));
- }
-+#ifdef ENABLE_INOTIFY
+- if (gam_poll_generic_init()) {
++ if (gam_poll_basic_init()) {
+ GAM_DEBUG(DEBUG_INFO, "Using poll as backend\n");
+ return(TRUE);
}
-+#endif
+@@ -427,7 +427,7 @@
+ GamPollHandler
+ gam_server_get_poll_handler (void)
+ {
+- return __gam_kernel_handler;
++ return __gam_poll_handler;
}
- /**
+ gboolean
diff --git a/devel/gamin/files/patch-tests_testing.c b/devel/gamin/files/patch-tests_testing.c
index 0fde0c7e1fe7..3485162572c0 100644
--- a/devel/gamin/files/patch-tests_testing.c
+++ b/devel/gamin/files/patch-tests_testing.c
@@ -1,6 +1,6 @@
---- tests/testing.c.orig Fri Apr 8 15:09:45 2005
-+++ tests/testing.c Fri Apr 8 15:09:57 2005
-@@ -424,9 +424,9 @@
+--- tests/testing.c.orig Thu Oct 27 12:51:03 2005
++++ tests/testing.c Tue Feb 7 08:10:40 2006
+@@ -486,9 +486,9 @@
return (-1);
}
/*