Author: gonzalo
Date: 2005-12-08 15:56:14 -0500 (Thu, 08 Dec 2005)
New Revision: 54125

Modified:
   branches/mono-1-1-10/mcs/class/System/System.IO/ChangeLog
   branches/mono-1-1-10/mcs/class/System/System.IO/FAMWatcher.cs
   branches/mono-1-1-10/mcs/class/System/System.IO/FileSystemWatcher.cs
Log:
from head

Modified: branches/mono-1-1-10/mcs/class/System/System.IO/ChangeLog
===================================================================
--- branches/mono-1-1-10/mcs/class/System/System.IO/ChangeLog   2005-12-08 
20:55:45 UTC (rev 54124)
+++ branches/mono-1-1-10/mcs/class/System/System.IO/ChangeLog   2005-12-08 
20:56:14 UTC (rev 54125)
@@ -1,3 +1,10 @@
+2005-12-01 Gonzalo Paniagua Javier <[EMAIL PROTECTED]>
+
+       * 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 <[EMAIL PROTECTED]>
 
        * FAMWatcher.cs: reverting my patch. Seems that something got

Modified: branches/mono-1-1-10/mcs/class/System/System.IO/FAMWatcher.cs
===================================================================
--- branches/mono-1-1-10/mcs/class/System/System.IO/FAMWatcher.cs       
2005-12-08 20:55:45 UTC (rev 54124)
+++ branches/mono-1-1-10/mcs/class/System/System.IO/FAMWatcher.cs       
2005-12-08 20:56:14 UTC (rev 54125)
@@ -77,13 +77,14 @@
                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 @@
                                return true;
                        }
 
+                       use_gamin = gamin;
                        watches = Hashtable.Synchronized (new Hashtable ());
                        requests = Hashtable.Synchronized (new Hashtable ());
                        if (FAMOpen (out conn) == -1) {
@@ -335,25 +337,79 @@
                        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);
+               }
 
-               [DllImport ("libfam.so.0")]
-               extern static int FAMClose (ref FAMConnection fc);
+               static int FAMClose (ref FAMConnection fc)
+               {
+                       if (use_gamin)
+                               return gamin_Close (ref fc);
+                       return fam_Close (ref fc);
+               }
 
-               [DllImport ("libfam.so.0")]
-               extern static int FAMMonitorDirectory (ref FAMConnection fc, 
string filename,
+               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", EntryPoint="FAMMonitorDirectory")]
+               extern static int fam_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 ("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 ("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 ("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);
        }
 }
 

Modified: branches/mono-1-1-10/mcs/class/System/System.IO/FileSystemWatcher.cs
===================================================================
--- branches/mono-1-1-10/mcs/class/System/System.IO/FileSystemWatcher.cs        
2005-12-08 20:55:45 UTC (rev 54124)
+++ branches/mono-1-1-10/mcs/class/System/System.IO/FileSystemWatcher.cs        
2005-12-08 20:56:14 UTC (rev 54125)
@@ -115,13 +115,21 @@
                                        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);

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to