diff options
author | Gonzalo Paniagua Javier <gonzalo.mono@gmail.com> | 2005-12-08 23:56:14 +0300 |
---|---|---|
committer | Gonzalo Paniagua Javier <gonzalo.mono@gmail.com> | 2005-12-08 23:56:14 +0300 |
commit | c064f9f178339e54686526a3dd8bfd0ae7b64006 (patch) | |
tree | 42280f688c4bc88daa16e2c25661b55eb6518ee4 | |
parent | 5237044b7f7fdb612a168a45dd71c366540e14e5 (diff) |
from headmono-1-1-10-1mono-1-1-10
svn path=/branches/mono-1-1-10/mcs/; revision=54125
-rw-r--r-- | mcs/class/System/System.IO/ChangeLog | 7 | ||||
-rw-r--r-- | mcs/class/System/System.IO/FAMWatcher.cs | 78 | ||||
-rw-r--r-- | mcs/class/System/System.IO/FileSystemWatcher.cs | 18 |
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); |