Alistair Grant uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-akg.2466.mcz ==================== Summary ==================== Name: VMMaker.oscog-akg.2466 Author: akg Time: 19 October 2018, 11:22:03.527998 am UUID: 5b9d1c96-2ed0-4621-809b-8d0d954099c1 Ancestors: VMMaker.oscog-AlistairGrant.2465 VMMaker Unicode strings Add VMClass>>asByteArray:size:. Modify: - FilePluginSimulator>>fileOpenName:size:write:secure: - FilePluginSimulator>>fileOpenNewName:size:secure: to utf8Decode the paths supplied by the in-simulation image. This is required otherwise the simulation, which uses the same code, will attempt to reencode the string with utf8, corrupting the file name. =============== Diff against VMMaker.oscog-AlistairGrant.2465 =============== Item was changed: ----- Method: FilePluginSimulator>>fileOpenName:size:write:secure: (in category 'file primitives') ----- fileOpenName: nameIndex size: nameSize write: writeFlag secure: secureFlag "Open the named file, possibly checking security. Answer the file oop." | path f index | openFiles size >= maxOpenFiles ifTrue: [^interpreterProxy primitiveFailFor: PrimErrLimitExceeded]. + path := (interpreterProxy asByteArray: nameIndex size: nameSize) utf8Decoded. - path := interpreterProxy asString: nameIndex size: nameSize. f := writeFlag ifTrue: [FileStream fileNamed: path] ifFalse: [(StandardFileStream isAFileNamed: path) ifTrue: [FileStream readOnlyFileNamed: path]]. f ifNil: [^interpreterProxy primitiveFail]. f binary. index := (3 to: openFiles size + 1) detect: [:n| (openFiles includesKey: n) not]. openFiles at: index put: f. ^interpreterProxy integerObjectOf: index! Item was changed: ----- Method: FilePluginSimulator>>fileOpenNewName:size:secure: (in category 'file primitives') ----- fileOpenNewName: nameIndex size: nameSize secure: secureFlag "Open the new named file, possibly checking security. Answer the file oop." | path f index | openFiles size >= maxOpenFiles ifTrue: [^interpreterProxy primitiveFailFor: PrimErrLimitExceeded]. + path := (interpreterProxy interpreter asByteArray: nameIndex size: nameSize) utf8Decoded. - path := interpreterProxy interpreter asString: nameIndex size: nameSize. "the #defaultAction for FileExistsException creates a dialog, so it is caught and resignaled as a generic Error" [f := FileStream newFileNamed: nameIndex] on: FileExistsException do: [:error | ^ interpreterProxy primitiveFailFor: PrimErrInappropriate]. f ifNil: [^interpreterProxy primitiveFail]. f binary. index := (3 to: openFiles size + 1) detect: [:n| (openFiles includesKey: n) not]. openFiles at: index put: f. ^interpreterProxy integerObjectOf: index! Item was added: + ----- Method: VMClass>>asByteArray:size: (in category 'C library extensions') ----- + asByteArray: baIndex size: baSize + "baIndex is an address in the heap. Create a ByteArray of the requested length + form the bytes in the heap starting at baIndex." + <doNotGenerate> + ^self strncpy: (ByteArray new: baSize) _: baIndex _: baSize! |
Free forum by Nabble | Edit this page |