Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGonzalo Paniagua Javier <gonzalo.mono@gmail.com>2005-12-08 23:56:14 +0300
committerGonzalo Paniagua Javier <gonzalo.mono@gmail.com>2005-12-08 23:56:14 +0300
commitc064f9f178339e54686526a3dd8bfd0ae7b64006 (patch)
tree42280f688c4bc88daa16e2c25661b55eb6518ee4
parent5237044b7f7fdb612a168a45dd71c366540e14e5 (diff)
svn path=/branches/mono-1-1-10/mcs/; revision=54125
-rw-r--r--mcs/class/System/System.IO/ChangeLog7
-rw-r--r--mcs/class/System/System.IO/FAMWatcher.cs78
-rw-r--r--mcs/class/System/System.IO/FileSystemWatcher.cs18
3 files changed, 87 insertions, 16 deletions
diff --git a/mcs/class/System/System.IO/ChangeLog b/mcs/class/System/System.IO/ChangeLog
index 961c84255cb..59d661f1d08 100644
--- a/mcs/class/System/System.IO/ChangeLog
+++ b/mcs/class/System/System.IO/ChangeLog
@@ -1,3 +1,10 @@
+2005-12-01 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+ * FAMWatcher.cs:
+ * FileSystemWatcher.cs: use libgamin-1.so.0 instead of libfam.so.0 when
+ the runtime finds libgamin. On SUSE libgamin and libfam are not the same
+ libraries (on debian, they are just the same and there's no fam-server).
+
2005-06-25 Gonzalo Paniagua Javier <gonzalo@ximian.com>
* FAMWatcher.cs: reverting my patch. Seems that something got
diff --git a/mcs/class/System/System.IO/FAMWatcher.cs b/mcs/class/System/System.IO/FAMWatcher.cs
index c2998f3fcec..0eef6370dca 100644
--- a/mcs/class/System/System.IO/FAMWatcher.cs
+++ b/mcs/class/System/System.IO/FAMWatcher.cs
@@ -77,13 +77,14 @@ namespace System.IO {
static FAMConnection conn;
static Thread thread;
static bool stop;
+ static bool use_gamin;
private FAMWatcher ()
{
}
// Locked by caller
- public static bool GetInstance (out IFileWatcher watcher)
+ public static bool GetInstance (out IFileWatcher watcher, bool gamin)
{
if (failed == true) {
watcher = null;
@@ -95,6 +96,7 @@ namespace System.IO {
return true;
}
+ use_gamin = gamin;
watches = Hashtable.Synchronized (new Hashtable ());
requests = Hashtable.Synchronized (new Hashtable ());
if (FAMOpen (out conn) == -1) {
@@ -335,25 +337,79 @@ namespace System.IO {
FAMClose (ref conn);
}
- [DllImport ("libfam.so.0")]
- extern static int FAMOpen (out FAMConnection fc);
+ static int FAMOpen (out FAMConnection fc)
+ {
+ if (use_gamin)
+ return gamin_Open (out fc);
+ return fam_Open (out fc);
+ }
+
+ static int FAMClose (ref FAMConnection fc)
+ {
+ if (use_gamin)
+ return gamin_Close (ref fc);
+ return fam_Close (ref fc);
+ }
+
+ static int FAMMonitorDirectory (ref FAMConnection fc, string filename, out FAMRequest fr, IntPtr user_data)
+ {
+ if (use_gamin)
+ return gamin_MonitorDirectory (ref fc, filename, out fr, user_data);
+ return fam_MonitorDirectory (ref fc, filename, out fr, user_data);
+ }
+
+ static int FAMCancelMonitor (ref FAMConnection fc, ref FAMRequest fr)
+ {
+ if (use_gamin)
+ return gamin_CancelMonitor (ref fc, ref fr);
+ return fam_CancelMonitor (ref fc, ref fr);
+ }
+
+ static int FAMPending (ref FAMConnection fc)
+ {
+ if (use_gamin)
+ return gamin_Pending (ref fc);
+ return fam_Pending (ref fc);
+ }
+
+
+
+ [DllImport ("libfam.so.0", EntryPoint="FAMOpen")]
+ extern static int fam_Open (out FAMConnection fc);
+
+ [DllImport ("libfam.so.0", EntryPoint="FAMClose")]
+ extern static int fam_Close (ref FAMConnection fc);
- [DllImport ("libfam.so.0")]
- extern static int FAMClose (ref FAMConnection fc);
+ [DllImport ("libfam.so.0", EntryPoint="FAMMonitorDirectory")]
+ extern static int fam_MonitorDirectory (ref FAMConnection fc, string filename,
+ out FAMRequest fr, IntPtr user_data);
+
+ [DllImport ("libfam.so.0", EntryPoint="FAMCancelMonitor")]
+ extern static int fam_CancelMonitor (ref FAMConnection fc, ref FAMRequest fr);
+
+ [DllImport ("libfam.so.0", EntryPoint="FAMPending")]
+ extern static int fam_Pending (ref FAMConnection fc);
- [DllImport ("libfam.so.0")]
- extern static int FAMMonitorDirectory (ref FAMConnection fc, string filename,
+ [DllImport ("libgamin-1.so.0", EntryPoint="FAMOpen")]
+ extern static int gamin_Open (out FAMConnection fc);
+
+ [DllImport ("libgamin-1.so.0", EntryPoint="FAMClose")]
+ extern static int gamin_Close (ref FAMConnection fc);
+
+ [DllImport ("libgamin-1.so.0", EntryPoint="FAMMonitorDirectory")]
+ extern static int gamin_MonitorDirectory (ref FAMConnection fc, string filename,
out FAMRequest fr, IntPtr user_data);
- [DllImport ("libfam.so.0")]
- extern static int FAMCancelMonitor (ref FAMConnection fc, ref FAMRequest fr);
+ [DllImport ("libgamin-1.so.0", EntryPoint="FAMCancelMonitor")]
+ extern static int gamin_CancelMonitor (ref FAMConnection fc, ref FAMRequest fr);
+
+ [DllImport ("libgamin-1.so.0", EntryPoint="FAMPending")]
+ extern static int gamin_Pending (ref FAMConnection fc);
[MethodImplAttribute(MethodImplOptions.InternalCall)]
extern static int InternalFAMNextEvent (ref FAMConnection fc, out string filename,
out int code, out int reqnum);
- [DllImport ("libfam.so.0")]
- extern static int FAMPending (ref FAMConnection fc);
}
}
diff --git a/mcs/class/System/System.IO/FileSystemWatcher.cs b/mcs/class/System/System.IO/FileSystemWatcher.cs
index d3d421ccc21..c23400daefe 100644
--- a/mcs/class/System/System.IO/FileSystemWatcher.cs
+++ b/mcs/class/System/System.IO/FileSystemWatcher.cs
@@ -115,13 +115,21 @@ namespace System.IO {
mode = InternalSupportsFSW ();
bool ok = false;
- if (mode == 3)
- ok = KeventWatcher.GetInstance (out watcher);
- else if (mode == 2)
- ok = FAMWatcher.GetInstance (out watcher);
- else if (mode == 1)
+ switch (mode) {
+ case 1: // windows
ok = DefaultWatcher.GetInstance (out watcher);
//ok = WindowsWatcher.GetInstance (out watcher);
+ break;
+ case 2: // libfam
+ ok = FAMWatcher.GetInstance (out watcher, false);
+ break;
+ case 3: // kevent
+ ok = KeventWatcher.GetInstance (out watcher);
+ break;
+ case 4: // libgamin
+ ok = FAMWatcher.GetInstance (out watcher, true);
+ break;
+ }
if (mode == 0 || !ok)
DefaultWatcher.GetInstance (out watcher);