@@ -357,8 +357,7 @@ def get_codes(self):
357
357
def get_sizeondisk (self ):
358
358
"""Return the size of the complete header extensions in the NIfTI file.
359
359
"""
360
- # add four bytes for the NIfTI extension flag!
361
- return np .sum ([e .get_sizeondisk () for e in self ]) + 4
360
+ return np .sum ([e .get_sizeondisk () for e in self ])
362
361
363
362
def __repr__ (self ):
364
363
s = "Nifti1Extensions(%s)" \
@@ -534,9 +533,15 @@ def from_fileobj(klass, fileobj, endianness=None, check=True):
534
533
return hdr
535
534
536
535
def write_to (self , fileobj ):
536
+ # First check that vox offset is large enough
537
+ if self .is_single :
538
+ vox_offset = self ._header_data ['vox_offset' ]
539
+ min_vox_offset = 352 + self .extensions .get_sizeondisk ()
540
+ if vox_offset < min_vox_offset :
541
+ raise HeaderDataError ('vox offset of %d, but need at least %d'
542
+ % (vox_offset , min_vox_offset ))
537
543
super (Nifti1Header , self ).write_to (fileobj )
538
- n_exts = len (self .extensions )
539
- if n_exts == 0 :
544
+ if len (self .extensions ) == 0 :
540
545
# If single file, write required 0 stream to signal no extensions
541
546
if self .is_single :
542
547
fileobj .write ('\x00 ' * 4 )
@@ -1408,11 +1413,7 @@ def update_header(self):
1408
1413
# make sure that there is space for the header. If any
1409
1414
# extensions, figure out necessary vox_offset for extensions to
1410
1415
# fit
1411
- if (self .extra .has_key ('extensions' ) and
1412
- len (self .extra ['extensions' ])):
1413
- min_vox_offset = 348 + self .extra ['extensions' ].get_sizeondisk ()
1414
- else :
1415
- min_vox_offset = 352
1416
+ min_vox_offset = 352 + hdr .extensions .get_sizeondisk ()
1416
1417
if hdr ['vox_offset' ] < min_vox_offset :
1417
1418
hdr ['vox_offset' ] = min_vox_offset
1418
1419
0 commit comments