'From Squeak3.4alpha of ''11 November 2002'' [latest update: #5108] on 6 December 2002 at 8:31:15 am'! "Change Set: sendersOfSplitName-asm Date: 6 December 2002 Author: Alejandro Magistrello On Windows this must be true FileDirectory basicNew fileOrDirectoryExists: 'C:' and also changes the other users of FileDirectory>>splitName:to: to use #activeDirectoryClass before split the name "! !CodeLoader class methodsFor: 'utilities' stamp: 'asm 12/6/2002 08:11'! signFile: fileName renameAs: destFile key: privateKey dsa: dsa "Sign the given file using the private key." | in out | in _ FileStream readOnlyFileNamed: fileName. in binary. out _ FileStream newFileNamed: destFile. out binary. [in atEnd] whileFalse:[out nextPutAll: (in next: 4096)]. in close. out close. FileDirectory activeDirectoryClass splitName: destFile to:[:path :file| SecurityManager default signFile: file directory: (FileDirectory on: path). ]. ! ! !FileDirectory methodsFor: 'enumeration' stamp: 'asm 12/6/2002 08:12'! directoryEntryFor: filenameOrPath "Answer the directory entry for the given file or path. Sorta like a poor man's stat()." | fName dir | FileDirectory activeDirectoryClass splitName: filenameOrPath to:[:filePath :name | fName _ name. filePath isEmpty ifTrue: [dir _ self] ifFalse: [dir _ FileDirectory on: filePath]]. self isCaseSensitive ifTrue:[^dir entries detect:[:entry| entry name = fName] ifNone:[nil]] ifFalse:[^dir entries detect:[:entry| entry name sameAs: fName] ifNone:[nil]]! ! !FileDirectory methodsFor: 'testing' stamp: 'asm 12/6/2002 08:12'! directoryExists: filenameOrPath "Answer true if a directory of the given name exists. The given name may be either a full path name or a local directory within this directory." "FileDirectory default directoryExists: FileDirectory default pathName" | fName dir | FileDirectory activeDirectoryClass splitName: filenameOrPath to: [:filePath :name | fName _ name. filePath isEmpty ifTrue: [dir _ self] ifFalse: [dir _ FileDirectory on: filePath]]. ^dir exists and: [ self isCaseSensitive ifTrue:[dir directoryNames includes: fName] ifFalse:[dir directoryNames anySatisfy: [:name| name sameAs: fName]]]. ! ! !FileDirectory methodsFor: 'testing' stamp: 'asm 12/6/2002 08:12'! fileExists: filenameOrPath "Answer true if a file of the given name exists. The given name may be either a full path name or a local file within this directory." "FileDirectory default fileExists: Smalltalk sourcesName" | fName dir | FileDirectory activeDirectoryClass splitName: filenameOrPath to: [:filePath :name | fName _ name. filePath isEmpty ifTrue: [dir _ self] ifFalse: [dir _ FileDirectory on: filePath]]. self isCaseSensitive ifTrue:[^dir fileNames includes: fName] ifFalse:[^dir fileNames anySatisfy: [:name| name sameAs: fName]]. ! ! !FileDirectory methodsFor: 'file operations' stamp: 'asm 11/7/2002 20:05'! fileOrDirectoryExists: filenameOrPath "Answer true if either a file or a directory file of the given name exists. The given name may be either a full path name or a local name within this directory." "FileDirectory default fileOrDirectoryExists: Smalltalk sourcesName" | fName dir | FileDirectory activeDirectoryClass splitName: filenameOrPath to: [:filePath :name | fName _ name. filePath isEmpty ifTrue: [dir _ self] ifFalse: [dir _ FileDirectory on: filePath]]. ^ (dir includesKey: fName) or: [ fName = '' and:[ dir entries size > 1]]! ! !FileDirectory methodsFor: 'file name utilities' stamp: 'asm 12/6/2002 08:18'! fullNameFor: fileName "Return a corrected, fully-qualified name for the given file name. If the given name is already a full path (i.e., it contains a delimiter character), assume it is already a fully-qualified name. Otherwise, prefix it with the path to this directory. In either case, correct the local part of the file name." "Details: Note that path relative to a directory, such as '../../foo' are disallowed by this algorithm. Also note that this method is tolerent of a nil argument -- is simply returns nil in this case." | correctedLocalName prefix | fileName ifNil: [^ nil]. FileDirectory activeDirectoryClass splitName: fileName to: [:filePath :localName | correctedLocalName _ localName isEmpty ifFalse: [self checkName: localName fixErrors: true] ifTrue: [localName]. prefix _ self fullPathFor: filePath]. prefix isEmpty ifTrue: [^correctedLocalName]. prefix last = self pathNameDelimiter ifTrue:[^ prefix, correctedLocalName] ifFalse:[^ prefix, self slash, correctedLocalName]! ! !FileDirectory class methodsFor: 'name utilities' stamp: 'asm 12/6/2002 08:18'! dirPathFor: fullName "Return the directory part the given name." self activeDirectoryClass splitName: fullName to: [:dirPath :localName | ^ dirPath]! ! !FileDirectory class methodsFor: 'name utilities' stamp: 'asm 12/6/2002 08:18'! localNameFor: fullName "Return the local part the given name." self activeDirectoryClass splitName: fullName to: [:dirPath :localName | ^ localName]! ! !FileDirectory class methodsFor: 'name utilities' stamp: 'asm 12/6/2002 08:18'! urlForFileNamed: aFilename "Create a URL for the given fully qualified file name" "FileDirectory urlForFileNamed: 'C:\Home\andreasr\Squeak\DSqueak3\DSqueak3_1.1\DSqueak3.1.image' " | path localName | self activeDirectoryClass splitName: aFilename to: [:p :n | path _ p. localName _ n]. ^ localName asUrlRelativeTo: (self on: path) url asUrl! ! !MailDBFile methodsFor: 'file operations' stamp: 'asm 12/6/2002 08:17'! delete "Delete this file." FileDirectory activeDirectoryClass splitName: filename to: [:dirPath :name | (FileDirectory forFileName: filename) deleteFileNamed: name ifAbsent: []]! ! !MailDBFile methodsFor: 'file operations' stamp: 'asm 12/6/2002 08:17'! rename: newFileName "Rename this file." FileDirectory activeDirectoryClass splitName: filename to: [:dirPath :oldFileName | (FileDirectory forFileName: filename) rename: oldFileName toBe: newFileName]. filename _ newFileName! ! !IndexFile methodsFor: 'file operations' stamp: 'asm 12/6/2002 08:17'! delete "delete logfile" | logFilename | logFilename _ filename , '.log'. FileDirectory activeDirectoryClass splitName: logFilename to: [:dirPath :name | (FileDirectory forFileName: logFilename) deleteFileNamed: name ifAbsent: []]. "Delete this file." super delete! ! !IndexFile methodsFor: 'file operations' stamp: 'asm 12/6/2002 08:17'! rename: newFileName "rename log file" | logFilename newLogFilename | logFilename _ filename , '.log'. newLogFilename _ newFileName , '.log'. FileDirectory activeDirectoryClass splitName: logFilename to: [:dirPath :oldFileName | | fd | fd _ FileDirectory forFileName: logFilename. (fd fileExists: logFilename) ifTrue: [fd rename: oldFileName toBe: newLogFilename]]. "at last, it changes filename!!" super rename: newFileName! !