Hi Phil,

Well, my patch was slightly different (attached) but works, at least 
until I get:

N...         0  mjh/.google/gadgets/ggl-host-socket
16:30:54.213 ci__nondir[commit.c:489] invalid/unknown file type 0140755
Segmentation fault

But back to FUSE for a moment...
Note that you actually get an EACCES not an EPERM here.

I have a (probably bad) reputation for designing in too much 
flexibility, but I would have the user able to configure what they would 
want fsvs to do with each event, so a config file with a syntax like:

permission_denied: log, continue

etc., would cover all likely eventualities (!).

Mark.



P.Marek wrote:
> Hello Mark!
>
>   
>> I stopped using fsvs back in the days of 1.1.12 or so because one of the
>> systems on which I was using it acquired a .gvfs FUSE mount point in
>> user home directories.
>>     
> ...
>   
>> This is despite every permutation of "ignore" I can think of:
>>     
> ...
>   
>> So I've tried again with 1.1.17, and the problem still persists.
>> Looking at the code, the lstat in question will always cause a stop on
>> permission denied.
>> I was wondering if anyone has a neat workaround for this problem?
>>     
> Does this (untested) patch help you?
> It should cause files that return EPERM on lstat to be ignored.
>
> I'm not sure whether I should do that for FSVS globally; but in your use-case 
> it might
> help.
>
>
> Regards,
>
> Phil
>
>

------------------------------------------------------
http://fsvs.tigris.org/ds/viewMessage.do?dsForumId=3928&dsMessageId=2352924

To unsubscribe from this discussion, e-mail: 
[[email protected]].
--- fsvs-1.1.17/src/direnum.c	2008-10-02 18:41:42.000000000 +0100
+++ fsvs-1.1.17-mjh/src/direnum.c	2009-05-22 16:12:16.000000000 +0100
@@ -583,17 +583,26 @@
 	{
 		sts=this->by_inode[i];
 		sts->parent=this;
 		sts->repos_rev=SVN_INVALID_REVNUM;
-		status=hlp__lstat(sts->name, &(sts->st));
-		if (status == ENOENT)
+		status = hlp__lstat(sts->name, &(sts->st));
+		switch(status) 
 		{
+		    case 0:
+		        break;
+
+  		    case ENOENT:
 			STOPIF( wa__warn(WRN__LOCAL_VANISHED, status,
 				"Entry \"%s\" not found anymore!", sts->name), NULL);
 			sts->to_be_ignored=1;
-		}
-		else
-			STOPIF( status, "lstat(%s)", sts->name);
+			break;
 
+		    case EACCES:
+			sts->to_be_ignored=1;
+			break;
+
+		    default:
+			STOPIF( status, "lstat(%s)", sts->name);
+		}
 		/* New entries get that set, because they're "updated". */
 		sts->updated_mode=sts->st.mode;
 	}

Reply via email to