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