@@ -622,60 +622,52 @@ func (f *FileImage) SetPrimPart(id uint32, opts ...SetOpt) error {
622622return fmt .Errorf ("%w" , errNotPartition )
623623}
624624
625- fs , pt , arch , err := descr . getPartitionMetadata ()
626- if err != nil {
625+ var p partition
626+ if err := descr . getExtra ( binaryUnmarshaler { & p }); err != nil {
627627return fmt .Errorf ("%w" , err )
628628}
629629
630630// if already primary system partition, nothing to do
631- if pt == PartPrimSys {
631+ if p . Parttype == PartPrimSys {
632632return nil
633633}
634634
635- if pt != PartSystem {
635+ if p . Parttype != PartSystem {
636636return fmt .Errorf ("%w" , errNotSystem )
637637}
638638
639- olddescr , err := f .getDescriptor (WithPartitionType (PartPrimSys ))
640- if err != nil && ! errors .Is (err , ErrObjectNotFound ) {
641- return fmt .Errorf ("%w" , err )
642- }
643- extra := partition {
644- Fstype : fs ,
645- Parttype : PartPrimSys ,
646- }
647- copy (extra .Arch [:], arch )
648-
649- if err := descr .setExtra (extra ); err != nil {
650- return fmt .Errorf ("%w" , err )
651- }
652-
653- descr .ModifiedAt = so .t .Unix ()
654-
655- if olddescr != nil {
656- oldfs , _ , oldarch , err := olddescr .getPartitionMetadata ()
657- if err != nil {
639+ // If there is currently a primary system partition, update it.
640+ if d , err := f .getDescriptor (WithPartitionType (PartPrimSys )); err == nil {
641+ var p partition
642+ if err := d .getExtra (binaryUnmarshaler {& p }); err != nil {
658643return fmt .Errorf ("%w" , err )
659644}
660645
661- oldextra := partition {
662- Fstype : oldfs ,
663- Parttype : PartSystem ,
664- Arch : getSIFArch (oldarch ),
665- }
646+ p .Parttype = PartSystem
666647
667- if err := olddescr .setExtra (oldextra ); err != nil {
648+ if err := d .setExtra (p ); err != nil {
668649return fmt .Errorf ("%w" , err )
669650}
670651
671- olddescr .ModifiedAt = so .t .Unix ()
652+ d .ModifiedAt = so .t .Unix ()
653+ } else if ! errors .Is (err , ErrObjectNotFound ) {
654+ return fmt .Errorf ("%w" , err )
672655}
673656
657+ // Update the descriptor of the new primary system partition.
658+ p .Parttype = PartPrimSys
659+
660+ if err := descr .setExtra (p ); err != nil {
661+ return fmt .Errorf ("%w" , err )
662+ }
663+
664+ descr .ModifiedAt = so .t .Unix ()
665+
674666if err := f .writeDescriptors (); err != nil {
675667return fmt .Errorf ("%w" , err )
676668}
677669
678- f .h .Arch = getSIFArch ( arch )
670+ f .h .Arch = p . Arch
679671f .h .ModifiedAt = so .t .Unix ()
680672
681673if err := f .writeHeader (); err != nil {
0 commit comments