Yes! You are right on the money. The latest fixes got rid of the  
problem for me. I can see why MacFUSE would send a read only handle  
for the synthesized dot files.

Since my application depends on this fix, what is the recommended way  
for me to deploy this? Should I distribute a version of MacFUSE  
framework that I compile?

Thanks,

-David


On Apr 15, 2008, at 5:22 PM, ted bonkenburg wrote:

> On Tue, Apr 15, 2008 at 1:10 AM, David Zhao <[EMAIL PROTECTED]>  
> wrote:
>> Ted,
>>
>> Thanks for the quick response. My delegate implements both
>>
>> finderFlagsAtPath:
>> and
>> iconDataAtPath:
>
> Thanks, that is helpful. I think I know what the problem is, and I
> just checked a "fix" into the tree.  It is maybe more of a workaround
> than a fix, but let me describe the problem first.
>
> On 10.4, the custom resources (finderFlags / iconData) were mainly
> intended for read-only filesystems. If your file system's open doesn't
> handle the AppleDouble then It essentially synthesizes the AppleDouble
> files (._ prefix) for you and handles open/reading of these files. The
> problem occurs when the Finder creates a new file and wants to see if
> it should create or update the corresponding AppleDouble file. If the
> AppleDouble file does not exist, then the Finder will create and write
> some data to one. If it does exist, then the Finder will try to open
> the existing one read-write and update it (actually, it tries to
> unlink first, but it is ok for that to fail).
>
> I expect that what is going on is that you are indicating that the
> file has a custom icon, which causes GMUserFileSystem to claim that
> the AppleDouble file exists on your behalf. The Finder then tries to
> open that file read-write, but since your FS isn't handling the
> AppleDouble then GMUserFileSystem is falling back to the synthesized
> one, which is read-only.
>
> The change I just checked in will have GMUserFileSystem hand out a
> read-write fileDelegate for the synthesized AppleDouble file. Again,
> this happens only if your file system does not explicitly handle these
> files. In this case, the Finder can write whatever it wants and the
> operation succeeds. However, since it is writing to the synthesized
> AppleDouble, all the writes are lost. In practice this might be fine.
> If you aren't explicitly handling AppleDouble then you probably don't
> care about what the Finder wants to write there; you just want your
> custom icon to show up when it is read.
>
> Can you try out the latest version in svn and let me know if that
> fixes your problem?  You should be able to xcodebuild in
> "macfuse/core/sdk-objc/".
>
> ted
>
>>
>> My finderFlagsAtPath in turn calls attributesOfItemAtPath: on my  
>> delegate
>> to determine if a custom icon is necessary. Here's the log again  
>> with logs
>> from finderFlagsAtPath:
>>
>>
>> unique: 3, opcode: LOOKUP (1), nodeid: 1, insize: 56
>> LOOKUP /._Project.tmproj
>> 2008-04-15 01:04:43.459 MyLog:  
>> attributesOfItemAtPath: /._Project.tmproj
>> 2008-04-15 01:04:43.460 MyLog: Cannot find /._Project.tmproj: NSError
>> "POSIX error: No such file or directory" Domain=NSPOSIXErrorDomain  
>> Code=2
>> 2008-04-15 01:04:43.460 MyLog: attributesOfItemAtPath: / 
>> Project.tmproj
>> 2008-04-15 01:04:43.461 MyLog: finderFlagsAtPath: /Project.tmproj
>> 2008-04-15 01:04:43.461 MyLog: attributesOfItemAtPath: / 
>> Project.tmproj
>>   NODEID: 76
>>
>>   unique: 3, error: 0 (Unknown error: 0), outsize: 136
>> unique: 2, opcode: OPEN (14), nodeid: 76, insize: 48
>> 2008-04-15 01:04:43.465 MyLog: Failed to open /._Project.tmproj for  
>> read
>> write
>> 2008-04-15 01:04:43.465 MyLog: openFileAtPath /._Project.tmproj:  
>> (null)
>> 2008-04-15 01:04:43.465 MyLog: Error with open: NSError "POSIX  
>> error: No
>> such file or directory" Domain=NSPOSIXErrorDomain Code=2
>> 2008-04-15 01:04:43.465 MyLog: finderFlagsAtPath: /Project.tmproj
>> 2008-04-15 01:04:43.465 MyLog: attributesOfItemAtPath: / 
>> Project.tmproj
>>   unique: 2, error: 0 (Unknown error: 0), outsize: 32
>> OPEN[479047296] flags: 0x2 /._Project.tmproj
>> unique: 0, opcode: READ (15), nodeid: 76, insize: 64
>> READ[479047296] 4096 bytes from 0
>>   READ[479047296] 4096 bytes
>>   unique: 0, error: 0 (Unknown error: 0), outsize: 4112
>> unique: 1, opcode: READ (15), nodeid: 76, insize: 64
>>
>>
>>
>>
>>
>>
>> On Apr 15, 2008, at 12:47 AM, ted bonkenburg wrote:
>>
>>
>>> David,
>>>
>>> Can you tell me whether or not your delegate implements any of the
>>> following methods:
>>>
>>> finderFlagsAtPath:
>>> iconDataAtPath:
>>> URLOfWeblocAtPath:
>>>
>>> This might help me figure out what is going on.  Thanks.
>>>
>>> ted
>>>
>>> On Tue, Apr 15, 2008 at 12:27 AM, David Zhao  
>>> <[EMAIL PROTECTED]> wrote:
>>>
>>>>
>>>> Forgot to add that I'm using MacFUSE 1.3.0 from the website,  
>>>> running
>>>> on Tiger 10.4 with the latest updates.
>>>>
>>>> After the log excerpt below, macfuse attempted to open the file,  
>>>> I'm
>>>> going to post here in case it's related:
>>>>
>>>> unique: 3, opcode: OPEN (14), nodeid: 85, insize: 48
>>>> 2008-04-15 00:00:05.971 MyLog: Failed to open /._Project.tmproj for
>>>> read write
>>>> 2008-04-15 00:00:05.971 MyLog: Error with open: NSError "POSIX  
>>>> error:
>>>>
>>>> No such file or directory" Domain=NSPOSIXErrorDomain Code=2
>>>> 2008-04-15 00:00:05.971 MyLog: attributesOfItemAtPath: / 
>>>> Project.tmproj
>>>>  unique: 3, error: 0 (Unknown error: 0), outsize: 32
>>>> OPEN[502444320] flags: 0x2 /._Project.tmproj
>>>> unique: 1, opcode: READ (15), nodeid: 85, insize: 64
>>>> READ[502444320] 4096 bytes from 0
>>>>  READ[502444320] 4096 bytes
>>>>  unique: 1, error: 0 (Unknown error: 0), outsize: 4112
>>>> unique: 2, opcode: READ (15), nodeid: 85, insize: 64
>>>> READ[502444320] 4096 bytes from 0
>>>>  READ[502444320] 4096 bytes
>>>>  unique: 2, error: 0 (Unknown error: 0), outsize: 4112
>>>> unique: 4, opcode: WRITE (16), nodeid: 85, insize: 4160
>>>> WRITE[502444320] 4096 bytes to 0
>>>>  unique: 4, error: -13 (Permission denied), outsize: 16
>>>> unique: 0, opcode: RELEASE (18), nodeid: 85, insize: 64
>>>> RELEASE[502444320] flags: 0x2
>>>>  unique: 0, error: 0 (Unknown error: 0), outsize: 16
>>>>
>>>> the open succeeded though it should have
>>>>
>>>>
>>>>
>>>>
>>>> On Apr 15, 2008, at 12:19 AM, David Zhao wrote:
>>>>
>>>>
>>>>> I have this fuse filesystem written towards the ObjC API. I'm  
>>>>> running
>>>>> into this error where whenever I copy a file to the fuse volume  
>>>>> using
>>>>> Finder, Finder fails with a permissions error. However, I can  
>>>>> write to
>>>>> it using the command line without a problem.
>>>>>
>>>>> Taking a look at LoopbackFS, I'm pretty certain the right errors  
>>>>> have
>>>>> been returned. After turning on debug mode, I found that it's  
>>>>> failing
>>>>> while creating the resource fork. Here's the relevant log output:
>>>>>
>>>>> unique: 4, opcode: LOOKUP (1), nodeid: 1, insize: 54
>>>>> LOOKUP /Project.tmproj
>>>>> 2008-04-15 00:00:05.926 MyLog: attributesOfItemAtPath: / 
>>>>> Project.tmproj
>>>>> 2008-04-15 00:00:05.928 MyLog: Cannot find /Project.tmproj:  
>>>>> NSError
>>>>> "POSIX error: No such file or directory" Domain=NSPOSIXErrorDomain
>>>>> Code=2
>>>>> unique: 2, error: -2 (No such file or directory), outsize: 16
>>>>> unique: 4, opcode: LOOKUP (1), nodeid: 1, insize: 54
>>>>> unique: 0, opcode: CREATE (35), nodeid: 1, insize: 62
>>>>> 2008-04-15 00:00:05.930 MyLog: createFileAtPath: /Project.tmproj
>>>>> 2008-04-15 00:00:05.935 MyLog: FUSE created file at: / 
>>>>> Project.tmproj
>>>>> 2008-04-15 00:00:05.939 MyLog: Successfully opened / 
>>>>> Project.tmproj for
>>>>> writing
>>>>> 2008-04-15 00:00:05.939 MyLog: attributesOfItemAtPath: / 
>>>>> Project.tmproj
>>>>> NODEID: 84
>>>>> unique: 0, error: 0 (Unknown error: 0), outsize: 152
>>>>> CREATE[502480288] flags: 0x202 /Project.tmproj
>>>>>
>>>>> -----------------> So far, this is correct, didn't find the file,
>>>>> created it.
>>>>> -----------------> Below looks very strange
>>>>>
>>>>> unique: 3, opcode: LOOKUP (1), nodeid: 1, insize: 56
>>>>> LOOKUP /._Project.tmproj
>>>>> 2008-04-15 00:00:05.941 MyLog:
>>>>> attributesOfItemAtPath: /._Project.tmproj
>>>>> 2008-04-15 00:00:05.945 MyLog: Cannot find /._Project.tmproj:  
>>>>> NSError
>>>>> "POSIX error: No such file or directory" Domain=NSPOSIXErrorDomain
>>>>> Code=2
>>>>> 2008-04-15 00:00:05.945 MyLog: attributesOfItemAtPath: / 
>>>>> Project.tmproj
>>>>> 2008-04-15 00:00:05.947 MyLog: attributesOfItemAtPath: / 
>>>>> Project.tmproj
>>>>> NODEID: 85
>>>>> unique: 3, error: 0 (Unknown error: 0), outsize: 136
>>>>>
>>>>> This is strange because the file: ._Project.tmproj does not  
>>>>> exist, my
>>>>> FUSE code detected and returned ENOENT when  
>>>>> attributesOfItemAtPath is
>>>>> called. However, instead of returning that failure, macfuse  
>>>>> seemed to
>>>>> have called attributesOfItemAtPath: /Project.tmproj instead and
>>>>> accepted response for that.
>>>>>
>>>>> Here's my attributesOfItemAtPath function:
>>>>>
>>>>> - (NSDictionary *) attributesOfItemAtPath: (NSString *) path
>>>>> error: (NSError **) error
>>>>> {
>>>>> ...... logic to translate fuse path to path on disk.
>>>>>
>>>>> if( realPath == nil )
>>>>> {
>>>>>     *error = [NSError errorWithPOSIXCode: ENOENT];
>>>>>     NSLog( @"Cannot find %@: %@", path, *error );
>>>>>     return nil;
>>>>> }
>>>>>
>>>>> return [[NSFileManager defaultManager] fileAttributesAtPath:
>>>>> realPath
>>>>>     traverseLink: NO];
>>>>> }
>>>>>
>>>>>
>>>>> any pointers will be greatly appreciated.
>>>>>
>>>>> -David
>>>>>
>>>>
>>>>
>>>> >>>>
>>>>
>>>>
>>>
>>
>>


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"macfuse-devel" group.
To post to this group, send email to macfuse-devel@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/macfuse-devel?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to