Esteban Lorenzano uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker-oscog-EstebanLorenzano.161.mcz
==================== Summary ====================
Name: VMMaker-oscog-EstebanLorenzano.161 Author: EstebanLorenzano Time: 22 June 2012, 4:57:52.269 pm UUID: 8e0c22c3-b48d-4d8d-a7f9-8a75dc246f28 Ancestors: VMMaker-oscog-EstebanLorenzano.160
FilePlugin now answers posix permissions
=============== Diff against VMMaker-oscog-EstebanLorenzano.160 ===============
Item was removed: - ----- Method: CogVMSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize: (in category 'file primitives') ----- - makeDirEntryName: entryName size: entryNameSize - createDate: createDate modDate: modifiedDate - isDir: dirFlag fileSize: fileSize - - | modDateOop createDateOop nameString results | - <var: 'entryName' type: 'char *'> - - results := objectMemory instantiateClass: (objectMemory splObj: ClassArray) indexableSize: 5. - nameString := objectMemory instantiateClass: (objectMemory splObj: ClassString) indexableSize: entryNameSize. - createDateOop := self positive32BitIntegerFor: createDate. - modDateOop := self positive32BitIntegerFor: modifiedDate. - - 1 to: entryNameSize do: - [ :i | - objectMemory storeByte: i-1 ofObject: nameString withValue: (entryName at: i) asciiValue]. - - objectMemory storePointerUnchecked: 0 ofObject: results withValue: nameString. - objectMemory storePointerUnchecked: 1 ofObject: results withValue: createDateOop. - objectMemory storePointerUnchecked: 2 ofObject: results withValue: modDateOop. - dirFlag - ifTrue: [ objectMemory storePointerUnchecked: 3 ofObject: results withValue: objectMemory trueObject ] - ifFalse: [ objectMemory storePointerUnchecked: 3 ofObject: results withValue: objectMemory falseObject ]. - objectMemory storePointerUnchecked: 4 ofObject: results withValue: (objectMemory integerObjectOf: fileSize). - ^ results!
Item was added: + ----- Method: CogVMSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize:posixPermissions: (in category 'as yet unclassified') ----- + makeDirEntryName: entryName + size: entryNameSize + createDate: createDate + modDate: modifiedDate + isDir: dirFlag + fileSize: posixPermissions + posixPermissions: fileSize + + | modDateOop createDateOop nameString results | + <var: 'entryName' type: 'char *'> + + results := objectMemory instantiateClass: (objectMemory splObj: ClassArray) indexableSize: 5. + nameString := objectMemory instantiateClass: (objectMemory splObj: ClassString) indexableSize: entryNameSize. + createDateOop := self positive32BitIntegerFor: createDate. + modDateOop := self positive32BitIntegerFor: modifiedDate. + + 1 to: entryNameSize do: + [ :i | + objectMemory storeByte: i-1 ofObject: nameString withValue: (entryName at: i) asciiValue]. + + objectMemory storePointerUnchecked: 0 ofObject: results withValue: nameString. + objectMemory storePointerUnchecked: 1 ofObject: results withValue: createDateOop. + objectMemory storePointerUnchecked: 2 ofObject: results withValue: modDateOop. + dirFlag + ifTrue: [ objectMemory storePointerUnchecked: 3 ofObject: results withValue: objectMemory trueObject ] + ifFalse: [ objectMemory storePointerUnchecked: 3 ofObject: results withValue: objectMemory falseObject ]. + objectMemory storePointerUnchecked: 4 ofObject: results withValue: (objectMemory integerObjectOf: fileSize). + objectMemory storePointerUnchecked: 5 ofObject: results withValue: (objectMemory integerObjectOf: posixPermissions). + ^ results!
Item was changed: ----- Method: CogVMSimulator>>primitiveDirectoryEntry (in category 'file primitives') ----- primitiveDirectoryEntry | name pathName array result | name := self stringOf: self stackTop. pathName := self stringOf: (self stackValue: 1). self successful ifFalse: [^self primitiveFail].
array := FileDirectory default primLookupEntryIn: pathName name: name. array == nil ifTrue: [self pop: 3 thenPush: objectMemory nilObject. ^array]. array == #badDirectoryPath ifTrue: [self halt. ^self primitiveFail].
+ result := self makeDirEntryName: (array at: 1) + size: (array at: 1) size + createDate: (array at: 2) + modDate: (array at: 3) + isDir: (array at: 4) + fileSize: (array at: 5) + posixPermissions: (array at: 6). + - result := self makeDirEntryName: (array at: 1) size: (array at: 1) size - createDate: (array at: 2) modDate: (array at: 3) - isDir: (array at: 4) fileSize: (array at: 5). self pop: 3. self push: result!
Item was changed: ----- Method: CogVMSimulator>>primitiveDirectoryLookup (in category 'file primitives') ----- primitiveDirectoryLookup | index pathName array result | index := self stackIntegerValue: 0. pathName := (self stringOf: (self stackValue: 1)). self successful ifFalse: [^self primitiveFail].
array := FileDirectory default primLookupEntryIn: pathName index: index.
array == nil ifTrue: [self pop: 3 thenPush: objectMemory nilObject. ^array]. array == #badDirectoryPath ifTrue: ["self halt." ^self primitiveFail].
+ result := self makeDirEntryName: (array at: 1) + size: (array at: 1) size + createDate: (array at: 2) + modDate: (array at: 3) + isDir: (array at: 4) + fileSize: (array at: 5) + posixPermissions: (array at: 6). - result := self makeDirEntryName: (array at: 1) size: (array at: 1) size - createDate: (array at: 2) modDate: (array at: 3) - isDir: (array at: 4) fileSize: (array at: 5). self pop: 3 thenPush: result!
Item was removed: - ----- Method: FilePlugin>>makeDirEntryName:size:createDate:modDate:isDir:fileSize: (in category 'directory primitives') ----- - makeDirEntryName: entryName size: entryNameSize - createDate: createDate modDate: modifiedDate - isDir: dirFlag fileSize: fileSize - - | modDateOop createDateOop nameString results stringPtr fileSizeOop | - <var: 'entryName' type: 'char *'> - <var: 'stringPtr' type: 'char *'> - <var: 'fileSize' type: 'squeakFileOffsetType '> - - "allocate storage for results, remapping newly allocated - oops in case GC happens during allocation" - interpreterProxy pushRemappableOop: - (interpreterProxy instantiateClass: (interpreterProxy classArray) indexableSize: 5). - interpreterProxy pushRemappableOop: - (interpreterProxy instantiateClass: (interpreterProxy classString) indexableSize: entryNameSize).. - interpreterProxy pushRemappableOop: - (interpreterProxy positive32BitIntegerFor: createDate). - interpreterProxy pushRemappableOop: - (interpreterProxy positive32BitIntegerFor: modifiedDate). - interpreterProxy pushRemappableOop: - (interpreterProxy positive64BitIntegerFor: fileSize). - - fileSizeOop := interpreterProxy popRemappableOop. - modDateOop := interpreterProxy popRemappableOop. - createDateOop := interpreterProxy popRemappableOop. - nameString := interpreterProxy popRemappableOop. - results := interpreterProxy popRemappableOop. - - "copy name into Smalltalk string" - stringPtr := interpreterProxy firstIndexableField: nameString. - 0 to: entryNameSize - 1 do: [ :i | - stringPtr at: i put: (entryName at: i). - ]. - - interpreterProxy storePointer: 0 ofObject: results withValue: nameString. - interpreterProxy storePointer: 1 ofObject: results withValue: createDateOop. - interpreterProxy storePointer: 2 ofObject: results withValue: modDateOop. - dirFlag - ifTrue: [ interpreterProxy storePointer: 3 ofObject: results withValue: interpreterProxy trueObject ] - ifFalse: [ interpreterProxy storePointer: 3 ofObject: results withValue: interpreterProxy falseObject ]. - interpreterProxy storePointer: 4 ofObject: results withValue: fileSizeOop. - ^ results!
Item was added: + ----- Method: FilePlugin>>makeDirEntryName:size:createDate:modDate:isDir:fileSize:posixPermissions: (in category 'directory primitives') ----- + makeDirEntryName: entryName + size: entryNameSize + createDate: createDate + modDate: modifiedDate + isDir: dirFlag + fileSize: fileSize + posixPermissions: posixPermissions + + | modDateOop createDateOop nameString results stringPtr posixPermissionsOop fileSizeOop | + <var: 'entryName' type: 'char *'> + <var: 'stringPtr' type: 'char *'> + <var: 'fileSize' type: 'squeakFileOffsetType '> + + "allocate storage for results, remapping newly allocated + oops in case GC happens during allocation" + interpreterProxy pushRemappableOop: + (interpreterProxy instantiateClass: (interpreterProxy classArray) indexableSize: 6). + interpreterProxy pushRemappableOop: + (interpreterProxy instantiateClass: (interpreterProxy classString) indexableSize: entryNameSize).. + interpreterProxy pushRemappableOop: + (interpreterProxy positive32BitIntegerFor: createDate). + interpreterProxy pushRemappableOop: + (interpreterProxy positive32BitIntegerFor: modifiedDate). + interpreterProxy pushRemappableOop: + (interpreterProxy positive64BitIntegerFor: fileSize). + interpreterProxy pushRemappableOop: + (interpreterProxy positive32BitIntegerFor: posixPermissions). + + posixPermissionsOop := interpreterProxy popRemappableOop. + fileSizeOop := interpreterProxy popRemappableOop. + modDateOop := interpreterProxy popRemappableOop. + createDateOop := interpreterProxy popRemappableOop. + nameString := interpreterProxy popRemappableOop. + results := interpreterProxy popRemappableOop. + + "copy name into Smalltalk string" + stringPtr := interpreterProxy firstIndexableField: nameString. + 0 to: entryNameSize - 1 do: [ :i | + stringPtr at: i put: (entryName at: i). + ]. + + interpreterProxy storePointer: 0 ofObject: results withValue: nameString. + interpreterProxy storePointer: 1 ofObject: results withValue: createDateOop. + interpreterProxy storePointer: 2 ofObject: results withValue: modDateOop. + dirFlag + ifTrue: [ interpreterProxy storePointer: 3 ofObject: results withValue: interpreterProxy trueObject ] + ifFalse: [ interpreterProxy storePointer: 3 ofObject: results withValue: interpreterProxy falseObject ]. + interpreterProxy storePointer: 4 ofObject: results withValue: fileSizeOop. + interpreterProxy storePointer: 5 ofObject: results withValue: posixPermissionsOop. + ^ results!
Item was changed: ----- Method: FilePlugin>>primitiveDirectoryEntry (in category 'directory primitives') ----- primitiveDirectoryEntry
"Two arguments - directory path, and simple file name; returns an array (see primitiveDirectoryLookup) describing the file or directory, or nil if it does not exist. Primitive fails if the outer path does not identify a readable directory. (This is a lookup-by-name variant of primitiveDirectoryLookup.)"
+ | requestedName pathName pathNameIndex pathNameSize status entryName entryNameSize createDate modifiedDate dirFlag posixPermissions fileSize okToList reqNameIndex reqNameSize | - | requestedName pathName pathNameIndex pathNameSize status entryName entryNameSize createDate modifiedDate dirFlag fileSize okToList reqNameIndex reqNameSize | <var: 'entryName' declareC: 'char entryName[256]'> <var: 'pathNameIndex' type: 'char *'> <var: 'reqNameIndex' type: 'char *'> <var: 'fileSize' type: 'squeakFileOffsetType'> <export: true>
requestedName := interpreterProxy stackValue: 0. pathName := interpreterProxy stackValue: 1. (interpreterProxy isBytes: pathName) ifFalse: [^interpreterProxy primitiveFail].
"Outbound string parameters" pathNameIndex := interpreterProxy firstIndexableField: pathName. pathNameSize := interpreterProxy byteSizeOf: pathName.
reqNameIndex := interpreterProxy firstIndexableField: requestedName. reqNameSize := interpreterProxy byteSizeOf: requestedName.
"If the security plugin can be loaded, use it to check for permission. If not, assume it's ok" sCLPfn ~= 0 ifTrue: [okToList := self cCode: '((sqInt (*)(char *, sqInt))sCLPfn)(pathNameIndex, pathNameSize)'] ifFalse: [okToList := true]. okToList + ifTrue: [status := self cCode: 'dir_EntryLookup( + pathNameIndex, + pathNameSize, + reqNameIndex, + reqNameSize, + entryName, + &entryNameSize, + &createDate, + &modifiedDate, + &dirFlag, + &fileSize, + &posixPermissions)'] - ifTrue: [status := self cCode: 'dir_EntryLookup(pathNameIndex, pathNameSize, reqNameIndex, reqNameSize, - entryName, &entryNameSize, &createDate, - &modifiedDate, &dirFlag, &fileSize)'] ifFalse: [status := DirNoMoreEntries].
interpreterProxy failed ifTrue: [^nil]. status = DirNoMoreEntries ifTrue: ["no entry; 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, fName, rcvr" thenPush: (self makeDirEntryName: entryName size: entryNameSize createDate: createDate modDate: modifiedDate isDir: dirFlag + fileSize: fileSize + posixPermissions: posixPermissions)! - fileSize: fileSize)!
Item was changed: ----- Method: FilePlugin>>primitiveDirectoryLookup (in category 'directory primitives') ----- primitiveDirectoryLookup
+ | index pathName pathNameIndex pathNameSize status entryName entryNameSize createDate modifiedDate dirFlag posixPermissions fileSize okToList | - | index pathName pathNameIndex pathNameSize status entryName entryNameSize createDate modifiedDate dirFlag fileSize okToList | <var: 'entryName' declareC: 'char entryName[256]'> <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. "If the security plugin can be loaded, use it to check for permission. If not, assume it's ok" sCLPfn ~= 0 ifTrue: [okToList := self cCode: '((sqInt (*)(char *, sqInt))sCLPfn)(pathNameIndex, pathNameSize)'] ifFalse: [okToList := true]. okToList + ifTrue: [status := self cCode: 'dir_Lookup( + pathNameIndex, + pathNameSize, + index, + entryName, + &entryNameSize, + &createDate, + &modifiedDate, + &dirFlag, + &fileSize, + &posixPermissions)'] - ifTrue: [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 makeDirEntryName: entryName size: entryNameSize createDate: createDate modDate: modifiedDate isDir: dirFlag + fileSize: fileSize + posixPermissions: posixPermissions)! - fileSize: fileSize)!
Item was removed: - ----- Method: FilePluginSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize: (in category 'simulation') ----- - makeDirEntryName: entryName size: entryNameSize - createDate: createDate modDate: modifiedDate - isDir: dirFlag fileSize: fileSize - - ^interpreterProxy - makeDirEntryName: entryName size: entryNameSize - createDate: createDate modDate: modifiedDate - isDir: dirFlag fileSize: fileSize - !
Item was added: + ----- Method: FilePluginSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize:posixPermissions: (in category 'as yet unclassified') ----- + makeDirEntryName: entryName size: entryNameSize + createDate: createDate modDate: modifiedDate + isDir: dirFlag + fileSize: fileSize + posixPermissions: posixPermissions + + ^interpreterProxy + makeDirEntryName: entryName + size: entryNameSize + createDate: createDate + modDate: modifiedDate + isDir: dirFlag + fileSize: fileSize + posixPermissions: posixPermissions + !
Item was removed: - ----- Method: InterpreterSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize: (in category 'file primitives') ----- - makeDirEntryName: entryName size: entryNameSize - createDate: createDate modDate: modifiedDate - isDir: dirFlag fileSize: fileSize - - | modDateOop createDateOop nameString results | - <var: 'entryName' type: 'char *'> - - "allocate storage for results, remapping newly allocated - oops in case GC happens during allocation" - self pushRemappableOop: - (self instantiateClass: (self splObj: ClassArray) indexableSize: 5). - self pushRemappableOop: - (self instantiateClass: (self splObj: ClassString) indexableSize: entryNameSize).. - self pushRemappableOop: (self positive32BitIntegerFor: createDate). - self pushRemappableOop: (self positive32BitIntegerFor: modifiedDate). - - modDateOop := self popRemappableOop. - createDateOop := self popRemappableOop. - nameString := self popRemappableOop. - results := self popRemappableOop. - - 1 to: entryNameSize do: [ :i | - self storeByte: i-1 ofObject: nameString withValue: (entryName at: i) asciiValue. - ]. - - self storePointer: 0 ofObject: results withValue: nameString. - self storePointer: 1 ofObject: results withValue: createDateOop. - self storePointer: 2 ofObject: results withValue: modDateOop. - dirFlag - ifTrue: [ self storePointer: 3 ofObject: results withValue: trueObj ] - ifFalse: [ self storePointer: 3 ofObject: results withValue: falseObj ]. - self storePointer: 4 ofObject: results - withValue: (self integerObjectOf: fileSize). - ^ results - !
Item was added: + ----- Method: InterpreterSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize:posixPermissions: (in category 'as yet unclassified') ----- + makeDirEntryName: entryName + size: entryNameSize + createDate: createDate + modDate: modifiedDate + isDir: dirFlag + fileSize: posixPermissions + posixPermissions: fileSize + + | modDateOop createDateOop nameString results | + <var: 'entryName' type: 'char *'> + + "allocate storage for results, remapping newly allocated + oops in case GC happens during allocation" + self pushRemappableOop: + (self instantiateClass: (self splObj: ClassArray) indexableSize: 5). + self pushRemappableOop: + (self instantiateClass: (self splObj: ClassString) indexableSize: entryNameSize).. + self pushRemappableOop: (self positive32BitIntegerFor: createDate). + self pushRemappableOop: (self positive32BitIntegerFor: modifiedDate). + + modDateOop := self popRemappableOop. + createDateOop := self popRemappableOop. + nameString := self popRemappableOop. + results := self popRemappableOop. + + 1 to: entryNameSize do: [ :i | + self storeByte: i-1 ofObject: nameString withValue: (entryName at: i) asciiValue. + ]. + + self storePointer: 0 ofObject: results withValue: nameString. + self storePointer: 1 ofObject: results withValue: createDateOop. + self storePointer: 2 ofObject: results withValue: modDateOop. + dirFlag + ifTrue: [ self storePointer: 3 ofObject: results withValue: trueObj ] + ifFalse: [ self storePointer: 3 ofObject: results withValue: falseObj ]. + self storePointer: 4 + ofObject: results + withValue: (self integerObjectOf: fileSize). + self storePointer: 5 + ofObject: results + withValue: (self integerObjectOf: posixPermissions). + + ^ results + !
Item was changed: ----- Method: InterpreterSimulator>>primitiveDirectoryEntry (in category 'file primitives') ----- primitiveDirectoryEntry | name pathName array result | name := self stringOf: self stackTop. pathName := self stringOf: (self stackValue: 1). successFlag ifFalse: [^self primitiveFail].
array := FileDirectory default primLookupEntryIn: pathName name: name. array == nil ifTrue: [self pop: 3 thenPush: nilObj. ^array]. array == #badDirectoryPath ifTrue: [self halt. ^self primitiveFail].
+ result := self makeDirEntryName: (array at: 1) + size: (array at: 1) size + createDate: (array at: 2) + modDate: (array at: 3) + isDir: (array at: 4) + fileSize: (array at: 5) + posixPermissions: (array at: 6). - result := self makeDirEntryName: (array at: 1) size: (array at: 1) size - createDate: (array at: 2) modDate: (array at: 3) - isDir: (array at: 4) fileSize: (array at: 5). self pop: 3. self push: result!
Item was changed: ----- Method: InterpreterSimulator>>primitiveDirectoryLookup (in category 'file primitives') ----- primitiveDirectoryLookup | index pathName array result | index := self stackIntegerValue: 0. pathName := (self stringOf: (self stackValue: 1)). successFlag ifFalse: [ ^self primitiveFail. ].
array := FileDirectory default primLookupEntryIn: pathName index: index.
array == nil ifTrue: [ self pop: 3. self push: nilObj. ^array. ]. array == #badDirectoryPath ifTrue: [self halt. ^self primitiveFail. ].
+ result := self makeDirEntryName: (array at: 1) + size: (array at: 1) size + createDate: (array at: 2) + modDate: (array at: 3) + isDir: (array at: 4) + fileSize: (array at: 5) + posixPermissions: (array at: 6). - result := self makeDirEntryName: (array at: 1) size: (array at: 1) size - createDate: (array at: 2) modDate: (array at: 3) - isDir: (array at: 4) fileSize: (array at: 5). self pop: 3. self push: result. !
Item was removed: - ----- Method: NewspeakInterpreterSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize: (in category 'file primitives') ----- - makeDirEntryName: entryName size: entryNameSize - createDate: createDate modDate: modifiedDate - isDir: dirFlag fileSize: fileSize - - | modDateOop createDateOop nameString results | - <var: 'entryName' type: 'char *'> - - "allocate storage for results, remapping newly allocated - oops in case GC happens during allocation" - self pushRemappableOop: - (self instantiateClass: (self splObj: ClassArray) indexableSize: 5). - self pushRemappableOop: - (self instantiateClass: (self splObj: ClassString) indexableSize: entryNameSize).. - self pushRemappableOop: (self positive32BitIntegerFor: createDate). - self pushRemappableOop: (self positive32BitIntegerFor: modifiedDate). - - modDateOop := self popRemappableOop. - createDateOop := self popRemappableOop. - nameString := self popRemappableOop. - results := self popRemappableOop. - - 1 to: entryNameSize do: [ :i | - self storeByte: i-1 ofObject: nameString withValue: (entryName at: i) asciiValue. - ]. - - self storePointer: 0 ofObject: results withValue: nameString. - self storePointer: 1 ofObject: results withValue: createDateOop. - self storePointer: 2 ofObject: results withValue: modDateOop. - dirFlag - ifTrue: [ self storePointer: 3 ofObject: results withValue: trueObj ] - ifFalse: [ self storePointer: 3 ofObject: results withValue: falseObj ]. - self storePointer: 4 ofObject: results - withValue: (self integerObjectOf: fileSize). - ^ results - !
Item was added: + ----- Method: NewspeakInterpreterSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize:posixPermissions: (in category 'as yet unclassified') ----- + makeDirEntryName: entryName + size: entryNameSize + createDate: createDate + modDate: modifiedDate + isDir: dirFlag + fileSize: posixPermissions + posixPermissions: fileSize + + | modDateOop createDateOop nameString results | + <var: 'entryName' type: 'char *'> + + "allocate storage for results, remapping newly allocated + oops in case GC happens during allocation" + self pushRemappableOop: + (self instantiateClass: (self splObj: ClassArray) indexableSize: 5). + self pushRemappableOop: + (self instantiateClass: (self splObj: ClassString) indexableSize: entryNameSize). + self pushRemappableOop: (self positive32BitIntegerFor: createDate). + self pushRemappableOop: (self positive32BitIntegerFor: modifiedDate). + + modDateOop := self popRemappableOop. + createDateOop := self popRemappableOop. + nameString := self popRemappableOop. + results := self popRemappableOop. + + 1 to: entryNameSize do: [ :i | + self storeByte: i-1 ofObject: nameString withValue: (entryName at: i) asciiValue. + ]. + + self storePointer: 0 ofObject: results withValue: nameString. + self storePointer: 1 ofObject: results withValue: createDateOop. + self storePointer: 2 ofObject: results withValue: modDateOop. + dirFlag + ifTrue: [ self storePointer: 3 ofObject: results withValue: trueObj ] + ifFalse: [ self storePointer: 3 ofObject: results withValue: falseObj ]. + self storePointer: 4 ofObject: results + withValue: (self integerObjectOf: fileSize). + self storePointer: 5 ofObject: results + withValue: (self integerObjectOf: posixPermissions). + ^ results + !
Item was changed: ----- Method: NewspeakInterpreterSimulator>>primitiveDirectoryEntry (in category 'file primitives') ----- primitiveDirectoryEntry | name pathName array result | name := self stringOf: self stackTop. pathName := self stringOf: (self stackValue: 1). self successful ifFalse: [^self primitiveFail].
array := FileDirectory default primLookupEntryIn: pathName name: name. array == nil ifTrue: [self pop: 3 thenPush: nilObj. ^array]. array == #badDirectoryPath ifTrue: [self halt. ^self primitiveFail].
+ result := self makeDirEntryName: (array at: 1) + size: (array at: 1) size + createDate: (array at: 2) + modDate: (array at: 3) + isDir: (array at: 4) + fileSize: (array at: 5) + posixPermissions: (array at: 6). - result := self makeDirEntryName: (array at: 1) size: (array at: 1) size - createDate: (array at: 2) modDate: (array at: 3) - isDir: (array at: 4) fileSize: (array at: 5). self pop: 3. self push: result!
Item was changed: ----- Method: NewspeakInterpreterSimulator>>primitiveDirectoryLookup (in category 'file primitives') ----- primitiveDirectoryLookup | index pathName array result | index := self stackIntegerValue: 0. pathName := (self stringOf: (self stackValue: 1)). self successful ifFalse: [ ^self primitiveFail. ].
array := FileDirectory default primLookupEntryIn: pathName index: index.
array == nil ifTrue: [ self pop: 3. self push: nilObj. ^array. ]. array == #badDirectoryPath ifTrue: [self halt. ^self primitiveFail. ].
+ result := self makeDirEntryName: (array at: 1) + size: (array at: 1) size + createDate: (array at: 2) + modDate: (array at: 3) + isDir: (array at: 4) + fileSize: (array at: 5) + posixPermissions: (array at: 6). - result := self makeDirEntryName: (array at: 1) size: (array at: 1) size - createDate: (array at: 2) modDate: (array at: 3) - isDir: (array at: 4) fileSize: (array at: 5). self pop: 3. self push: result. !
Item was removed: - ----- Method: StackInterpreterSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize: (in category 'file primitives') ----- - makeDirEntryName: entryName size: entryNameSize - createDate: createDate modDate: modifiedDate - isDir: dirFlag fileSize: fileSize - - | modDateOop createDateOop nameString results | - <var: 'entryName' type: 'char *'> - - results := objectMemory instantiateClass: (objectMemory splObj: ClassArray) indexableSize: 5. - nameString := objectMemory instantiateClass: (objectMemory splObj: ClassString) indexableSize: entryNameSize. - createDateOop := self positive32BitIntegerFor: createDate. - modDateOop := self positive32BitIntegerFor: modifiedDate. - - 1 to: entryNameSize do: - [ :i | - objectMemory storeByte: i-1 ofObject: nameString withValue: (entryName at: i) asciiValue]. - - objectMemory storePointerUnchecked: 0 ofObject: results withValue: nameString. - objectMemory storePointerUnchecked: 1 ofObject: results withValue: createDateOop. - objectMemory storePointerUnchecked: 2 ofObject: results withValue: modDateOop. - dirFlag - ifTrue: [ objectMemory storePointerUnchecked: 3 ofObject: results withValue: objectMemory trueObject ] - ifFalse: [ objectMemory storePointerUnchecked: 3 ofObject: results withValue: objectMemory falseObject ]. - objectMemory storePointerUnchecked: 4 ofObject: results withValue: (objectMemory integerObjectOf: fileSize). - ^ results!
Item was added: + ----- Method: StackInterpreterSimulator>>makeDirEntryName:size:createDate:modDate:isDir:fileSize:posixPermissions: (in category 'as yet unclassified') ----- + makeDirEntryName: entryName + size: entryNameSize + createDate: createDate + modDate: modifiedDate + isDir: dirFlag + fileSize: posixPermissions + posixPermissions: fileSize + + | modDateOop createDateOop nameString results | + <var: 'entryName' type: 'char *'> + + results := objectMemory instantiateClass: (objectMemory splObj: ClassArray) indexableSize: 5. + nameString := objectMemory instantiateClass: (objectMemory splObj: ClassString) indexableSize: entryNameSize. + createDateOop := self positive32BitIntegerFor: createDate. + modDateOop := self positive32BitIntegerFor: modifiedDate. + + 1 to: entryNameSize do: + [ :i | + objectMemory storeByte: i-1 ofObject: nameString withValue: (entryName at: i) asciiValue]. + + objectMemory storePointerUnchecked: 0 ofObject: results withValue: nameString. + objectMemory storePointerUnchecked: 1 ofObject: results withValue: createDateOop. + objectMemory storePointerUnchecked: 2 ofObject: results withValue: modDateOop. + dirFlag + ifTrue: [ objectMemory storePointerUnchecked: 3 ofObject: results withValue: objectMemory trueObject ] + ifFalse: [ objectMemory storePointerUnchecked: 3 ofObject: results withValue: objectMemory falseObject ]. + objectMemory storePointerUnchecked: 4 ofObject: results withValue: (objectMemory integerObjectOf: fileSize). + objectMemory storePointerUnchecked: 5 ofObject: results withValue: (objectMemory integerObjectOf: posixPermissions). + ^ results!
Item was changed: ----- Method: StackInterpreterSimulator>>primitiveDirectoryEntry (in category 'file primitives') ----- primitiveDirectoryEntry | name pathName array result | name := self stringOf: self stackTop. pathName := self stringOf: (self stackValue: 1). self successful ifFalse: [^self primitiveFail].
array := FileDirectory default primLookupEntryIn: pathName name: name. array == nil ifTrue: [self pop: 3 thenPush: objectMemory nilObject. ^array]. array == #badDirectoryPath ifTrue: [self halt. ^self primitiveFail].
+ result := self makeDirEntryName: (array at: 1) + size: (array at: 1) size + createDate: (array at: 2) + modDate: (array at: 3) + isDir: (array at: 4) + fileSize: (array at: 5) + posixPermissions: (array at: 6). - result := self makeDirEntryName: (array at: 1) size: (array at: 1) size - createDate: (array at: 2) modDate: (array at: 3) - isDir: (array at: 4) fileSize: (array at: 5). self pop: 3. self push: result!
Item was changed: ----- Method: StackInterpreterSimulator>>primitiveDirectoryLookup (in category 'file primitives') ----- primitiveDirectoryLookup | index pathName array result | index := self stackIntegerValue: 0. pathName := (self stringOf: (self stackValue: 1)). self successful ifFalse: [^self primitiveFail].
array := FileDirectory default primLookupEntryIn: pathName index: index.
array == nil ifTrue: [self pop: 3 thenPush: objectMemory nilObject. ^array]. array == #badDirectoryPath ifTrue: ["self halt." ^self primitiveFail].
+ result := self + makeDirEntryName: (array at: 1) + size: (array at: 1) size + createDate: (array at: 2) + modDate: (array at: 3) + isDir: (array at: 4) + fileSize: (array at: 5) + posixPermissions: (array at: 6). - result := self makeDirEntryName: (array at: 1) size: (array at: 1) size - createDate: (array at: 2) modDate: (array at: 3) - isDir: (array at: 4) fileSize: (array at: 5). self pop: 3 thenPush: result!
Item was changed: ----- Method: TMethod>>emitCCodeOn:generator: (in category 'C code generation') ----- emitCCodeOn: aStream generator: aCodeGen "Emit C code for this method onto the given stream. All calls to inlined methods should already have been expanded."
aCodeGen currentMethod: self. self emitCCommentOn: aStream. "place method comment before function" aStream cr. self emitCFunctionPrototype: aStream generator: aCodeGen newlineBeforeName: true. aStream cr; nextPut: ${. + aStream cr; tab; + nextPutAll: '// '; nextPutAll: self definingClass name; nextPutAll: '>>#'; nextPutAll: self selector. self emitCLocalsOn: aStream generator: aCodeGen. aCodeGen pushScope: declarations while: [parseTree emitCCodeOn: aStream level: 1 generator: aCodeGen]. aStream nextPut: $}; cr!
vm-dev@lists.squeakfoundation.org