Right and I'll resubmit the patch that might fix it, someone might want to test (again) and then someone might want to stick it in the update stream. Plus for completeness I'll attach the sunit test stephane ducasse & Karl Ramberg wrote to test it.
On Mar 22, 2004, at 2:24 AM, Bert Freudenberg wrote:
The culprit seems to be "MacFileDirectory class>>isAbsolute:" which answers false if no colon is found inside the file name - which is the case for a volume name.
To reproduce: Open a file list, select a volume (scroll all the way up in the directory pane), and select a file in that volume (not in a subdirectory). You may have to buy a Mac first and install Squeak.
- Bert -
Change Set: MacRootPathNameFix-JMM Date: 18 June 2003 Author: johnmci@smalltalkconsulting.com
Attempting to open a file 'foobar.txt' on Volume 'fum' will fail, the path is fum:foobar.txt. This change set alters MacFileDirectory class>>isAbsolute: to consider that fum is a root thus fum:foobat.txt is a absolute pathname"!
!MacFileDirectory class methodsFor: 'class initialization' stamp: 'JMM 6/18/2003 23:33'! isAbsolute: fileName "Return true if the given fileName is absolute. The rules are:
If a path begins with a colon, it is relative. Otherwise, If it contains a colon anywhere, it is absolute and the first component is the volume name. Otherwise, It is absolute because it is a volume name."
fileName first = $: ifTrue: [^false]. (fileName includes: $:) ifTrue: [^true]. (fileName size > 0) ifTrue: [^true]. ^false! !
---------------------------------
'From Squeak3.7alpha of ''11 September 2003'' [latest update: #5497] on 27 October 2003 at 8:49:26 pm'! "Change Set: MacFileDirecto Date: 27 October 2003 Author: stephane ducasse & Karl Ramberg
Two tests that cover the bugs of the isAbsolute: on mac"!
TestCase subclass: #MacFileDirectoryTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SUnit'!
!MacFileDirectoryTest methodsFor: 'test' stamp: 'sd 10/27/2003 18:05'! testMacFileDirectory "(self run: #testMacFileDirectory)" "This fails before the the fix if the Squeak directory is on the root directory like: 'HardDisk:Squeak' But should work both before and after the fix of John if there is several directories in the hieracry: HardDisk:User:Squeak" "If somebody can find a way to make the test failed all the time when the fix is not present we should replace it"
self assert: (FileDirectory default fullName) = (FileDirectory default fullNameFor: (FileDirectory default fullName))! !
!MacFileDirectoryTest methodsFor: 'test' stamp: 'sd 10/27/2003 18:18'! testMacFileFullPathFor "(self run: #testMacFileFullPathFor)"
self assert: (MacFileDirectory isAbsolute: (FileDirectory default fullPathFor: (FileDirectory default fullName))). self assert: (MacFileDirectory isAbsolute: (FileDirectory on: 'Data') pathName).
! !
!MacFileDirectoryTest methodsFor: 'test' stamp: 'sd 10/27/2003 17:43'! testMacIsAbsolute "(self selector: #testMacIsAbsolute) run" self assert: (MacFileDirectory isAbsolute: 'Volumes'). self assert: (MacFileDirectory isAbsolute: 'Volumes:Data:Stef'). self deny: (MacFileDirectory isAbsolute: ':Desktop:test.st')! !
!MacFileDirectoryTest methodsFor: 'test' stamp: 'sd 10/27/2003 18:02'! testMakeAbsolute
self assert: (MacFileDirectory isAbsolute: (MacFileDirectory makeAbsolute: 'Data')). self assert: (MacFileDirectory isAbsolute: (MacFileDirectory makeAbsolute: ':Data')). ! !