Switch to side-by-side view

--- a/src/index/rclmonrcv.cpp
+++ b/src/index/rclmonrcv.cpp
@@ -33,17 +33,27 @@
  * to FAM or inotify and place events on the event queue.
  */
 
-/** A small virtual interface for monitors. Probably suitable to let
-    either of fam/gamin or raw imonitor hide behind */
+/** A small virtual interface for monitors. Lets
+ *  either fam/gamin or raw imonitor hide behind 
+ */
 class RclMonitor {
 public:
-    RclMonitor(){}
-    virtual ~RclMonitor() {}
+    RclMonitor()
+	: saved_errno(0)
+    {
+    }
+
+    virtual ~RclMonitor() 
+    {
+    }
     virtual bool addWatch(const string& path, bool isDir) = 0;
     virtual bool getEvent(RclMonEvent& ev, int msecs = -1) = 0;
     virtual bool ok() const = 0;
     // Does this monitor generate 'exist' events at startup?
     virtual bool generatesExist() const = 0; 
+
+    // Save significant errno after monitor calls
+    int saved_errno;
 };
 
 // Monitor factory. We only have one compiled-in kind at a time, no
@@ -94,8 +104,14 @@
 		    break;
 		}
 	    }
-	    if (!m_mon || !m_mon->ok() || !m_mon->addWatch(fn, true))
+	    if (!m_mon || !m_mon->ok())
 		return FsTreeWalker::FtwError;
+	    // We do nothing special if addWatch fails for a reasonable reason
+	    if (!m_mon->addWatch(fn, true)) {
+		if (m_mon->saved_errno != EACCES && 
+		    m_mon->saved_errno != ENOENT)
+		    return FsTreeWalker::FtwError;
+	    }
 	} else if (!m_mon->generatesExist() && 
 		   flg == FsTreeWalker::FtwRegular) {
 	    // Have to synthetize events for regular files existence
@@ -198,7 +214,8 @@
 		beaglequeuedir = path_tildexpand("~/.beagle/ToIndex/");
 	    if (!mon->addWatch(beaglequeuedir, true)) {
 		LOGERR(("rclMonRcvRun: addwatch (beaglequeuedit) failed\n"));
-		goto terminate;
+		if (mon->saved_errno != EACCES && mon->saved_errno != ENOENT)
+		    goto terminate;
 	    }
 	}
     }
@@ -593,7 +610,9 @@
 	;
     int wd;
     if ((wd = inotify_add_watch(m_fd, path.c_str(), mask)) < 0) {
-        LOGERR(("RclIntf::addWatch: inotify_add_watch failed\n"));
+	saved_errno = errno;
+        LOGERR(("RclIntf::addWatch: inotify_add_watch failed. errno %d\n",
+		   saved_errno));
 	return false;
     }
     m_idtopath[wd] = path;