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

commits at source.squeak.org commits at source.squeak.org
Sun Mar 1 17:00:55 UTC 2020


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

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

Name: VMMaker-dtl.413
Author: dtl
Time: 1 March 2020, 12:00:40.233 pm
UUID: b2a46b0f-6fd6-4809-b466-a2e230f5e387
Ancestors: VMMaker-dtl.412

Revert one change accidentally included in the previous commit. This is a separate update for checking file system space on image save, and may be included in a future commit along with platform changes.

=============== Diff against VMMaker-dtl.412 ===============

Item was changed:
  ----- Method: ContextInterpreter>>writeImageFileIO:embedded: (in category 'image save/restore') -----
  writeImageFileIO: imageBytes embedded: embedded
  
  	| headerStart headerSize f bytesWritten sCWIfn okToWrite |
  	<var: #f type: 'sqImageFile'>
  	<var: #headerStart type: 'squeakFileOffsetType '>
  	<var: #sCWIfn type: 'void *'>
  
  	"If the security plugin can be loaded, use it to check for write permission.
  	If not, assume it's ok"
  	sCWIfn := self ioLoadFunction: 'secCanWriteImage' From: 'SecurityPlugin'.
  	sCWIfn ~= 0 ifTrue:[okToWrite := self cCode: '((sqInt (*)(void))sCWIfn)()'.
  		okToWrite ifFalse:[^self primitiveFail]].
  	
  	"local constants"
  	headerStart := 0.  
  	headerSize := 16 * objectMemory bytesPerWord.  "header size in bytes; do not change!!"
  
- 	"self sqSpaceForImage: imageName OfSize: imageBytes + 100000"
- 	(self cCode: 'sqImageFileSpaceToSave(imageName, imageBytes + 100000)')
- 		ifFalse: ["file system full"
- 		self success: false.
- 		^ nil].
- 
  	f := self cCode: 'sqImageFileOpen(imageName, "wb")'.
  	f = nil ifTrue: [
  		"could not open the image file for writing"
  		self success: false.
  		^ nil].
  
  	headerStart := self cCode: 'sqImageFileStartLocation(f,imageName,headerSize+imageBytes)'.
  	self cCode: '/* Note: on Unix systems one could put an exec command here, padded to 512 bytes */'.
  	"position file to start of header"
  	self sqImageFile: f Seek: headerStart.
  
  	self putLong: (self imageFormatVersion) toFile: f.
  	self putLong: headerSize toFile: f.
  	self putLong: imageBytes toFile: f.
  	self putLong: (objectMemory startOfMemory) toFile: f.
  	self putLong: objectMemory getSpecialObjectsOop toFile: f.
  	self putLong: objectMemory getLastHash toFile: f.
  	self putLong: (self ioScreenSize) toFile: f.
  	self putLong: fullScreenFlag toFile: f.
  	self putLong: extraVMMemory toFile: f.
  	1 to: 7 do: [:i | self putLong: 0 toFile: f].  "fill remaining header words with zeros"
  	self successful ifFalse: [
  		"file write or seek failure"
  		self cCode: 'sqImageFileClose(f)'.
  		^ nil].
  
  	"position file after the header"
  	self sqImageFile: f Seek: headerStart + headerSize.
  
  	"write the image data"
  	bytesWritten := self
  		sqImage: (objectMemory pointerForOop: objectMemory getMemory)
  		write: f
  		size: (self cCode: 'sizeof(unsigned char)')
  		length: imageBytes.
  	self success: bytesWritten = imageBytes.
  	embedded ifFalse: [self setMacFileTypeForImageFile].
+ 	self cCode: 'sqImageFileClose(f)'.
- 	self sqImageFileClose: f.
  
  !



More information about the Vm-dev mailing list