[Vm-dev] VM Maker: VMMaker-dtl.436.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Aug 2 00:26:21 UTC 2022


David T. Lewis uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker-dtl.436.mcz

==================== Summary ====================

Name: VMMaker-dtl.436
Author: dtl
Time: 1 August 2022, 8:26:12.889 pm
UUID: fce55fb3-ce12-4897-a865-75341a26701e
Ancestors: VMMaker-dtl.435

VMMaker 4.20.2. Update FilePlugin>>primitiveDirectoryLookup from VMMaker.oscog. Requires platform support version r3821..

=============== Diff against VMMaker-dtl.435 ===============

Item was changed:
  ----- Method: FilePlugin>>primitiveDirectoryLookup (in category 'directory primitives') -----
  primitiveDirectoryLookup
  
  	| index pathName pathNameIndex pathNameSize status entryName entryNameSize createDate modifiedDate dirFlag symlinkFlag posixPermissions fileSize okToList |
  	
  	<var: 'entryName' declareC: 'char entryName[256]'>
+ 	<var: 'pathNameIndex' type: #'char *'>
+ 	<var: 'fileSize' type: #squeakFileOffsetType>
- 	<var: 'pathNameIndex' type: 'char *'>
- 	<var: 'fileSize' type: 'squeakFileOffsetType'>
  	<export: true>
  
  	index := interpreterProxy stackIntegerValue: 0.
  	pathName := interpreterProxy stackValue: 1.
  	(interpreterProxy isBytes: pathName)
  		ifFalse: [^interpreterProxy primitiveFail].
  	pathNameIndex := interpreterProxy firstIndexableField: pathName.
  	pathNameSize := interpreterProxy byteSizeOf: pathName.
+ 	self cCode: '' inSmalltalk:
+ 		[entryName := ByteString new: 256.
+ 		 entryNameSize := createDate := modifiedDate := dirFlag := fileSize := posixPermissions := symlinkFlag := nil].
  	"If the security plugin can be loaded, use it to check for permission. 
  	If not, assume it's ok"
+ 	okToList := sCLPfn ~= 0
+ 					ifTrue: [self cCode: '((sqInt (*)(char *, sqInt))sCLPfn)(pathNameIndex, pathNameSize)' inSmalltalk: [true]]
+ 					ifFalse: [true].
+ 	status := okToList
+ 		ifTrue:
+ 			[self dir_Lookup: pathNameIndex _: pathNameSize
+ 					_: index
+ 					_: entryName _: (self addressOf: entryNameSize put: [:v| entryNameSize := v])
+ 					_: (self addressOf: createDate put: [:v| createDate := v])
+ 					_: (self addressOf: modifiedDate put: [:v| modifiedDate := v])
+ 					_: (self addressOf: dirFlag put: [:v| dirFlag := v])
+ 					_: (self addressOf: fileSize put: [:v| fileSize := v])
+ 					_: (self addressOf: posixPermissions put: [:v| posixPermissions := v])
+ 					_: (self addressOf: symlinkFlag put: [:v| symlinkFlag := v])]
+ 		ifFalse: [DirNoMoreEntries].
+ 	interpreterProxy failed ifTrue:
+ 		[^nil].
+ 	status = DirNoMoreEntries ifTrue: "no more entries; return nil"
+ 		[interpreterProxy "pop pathName, index, rcvr"
+ 			pop: 3 thenPush: interpreterProxy nilObject.
+ 		^nil].
+ 	status = DirBadPath ifTrue:
+ 		[^interpreterProxy primitiveFail]."bad path"
- 	sCLPfn ~= 0
- 		ifTrue: [okToList := self cCode: '((sqInt (*)(char *, sqInt))sCLPfn)(pathNameIndex, pathNameSize)']
- 		ifFalse: [okToList := true].
- 	okToList
- 		ifTrue: [
- 			self isDefined: 'PharoVM'
- 				inSmalltalk: [ status := -1 ]
- 				comment: 'platform support code diverged for pharo'
- 				ifTrue: [ 
- 					status := self cCode: 'dir_Lookup(pathNameIndex, pathNameSize, index,
- 												entryName, &entryNameSize, &createDate,
- 												&modifiedDate, &dirFlag, &fileSize, 
- 												&posixPermissions, &symlinkFlag)' ]
- 				ifFalse: [ 
- 					status := self cCode: 'dir_Lookup(pathNameIndex, pathNameSize, index,
- 												entryName, &entryNameSize, &createDate,
- 												&modifiedDate, &dirFlag, &fileSize)' ] ]
- 		ifFalse: [status := DirNoMoreEntries].
- 	interpreterProxy failed
- 		ifTrue: [^nil].
- 	status = DirNoMoreEntries
- 		ifTrue: ["no more entries; return nil"
- 			interpreterProxy pop: 3 "pop pathName, index, rcvr"
- 				thenPush: interpreterProxy nilObject.
- 			^nil].
- 	status = DirBadPath
- 		ifTrue: [^interpreterProxy primitiveFail]."bad path"
  
+ 	interpreterProxy 
+ 		pop: 3	"pop pathName, index, rcvr" 
+ 		thenPush:
+ 			(self 
+ 				cppIf: PharoVM 
+ 				ifTrue:
+ 					[self
- 	self isDefined: 'PharoVM'
- 		inSmalltalk: [ status := -1 ]
- 		comment: 'platform support code diverged for pharo'
- 		ifTrue: [ 
- 			interpreterProxy 
- 				pop: 3	"pop pathName, index, rcvr" 
- 				thenPush: (self
- 					makeDirEntryName: entryName
- 					size: entryNameSize
- 					createDate: createDate
- 					modDate: modifiedDate
- 					isDir: dirFlag
- 					fileSize: fileSize
- 					posixPermissions: posixPermissions
- 					isSymlink: symlinkFlag) ]
- 		ifFalse: [ 
- 			interpreterProxy 
- 				pop: 3	"pop pathName, index, rcvr" 
- 				thenPush: (self
  						makeDirEntryName: entryName
  						size: entryNameSize
  						createDate: createDate
  						modDate: modifiedDate
  						isDir: dirFlag
+ 						fileSize: fileSize
+ 						posixPermissions: posixPermissions
+ 						isSymlink: symlinkFlag]
+ 				ifFalse:
+ 					[self
+ 						makeDirEntryName: entryName
+ 						size: entryNameSize
+ 						createDate: createDate
+ 						modDate: modifiedDate
+ 						isDir: dirFlag
+ 						fileSize: fileSize])!
- 						fileSize: fileSize) ]!

Item was changed:
  ----- Method: VMMaker class>>versionString (in category 'version testing') -----
  versionString
  
  	"VMMaker versionString"
  
+ 	^'4.20.2'!
- 	^'4.20.1'!



More information about the Vm-dev mailing list