Skip to content

Commit 8250df8

Browse files
authored
Merge pull request #286 from tri-adam/issue-285
fix: preserve arch in SetPrimPart
2 parents 8153d72 + 89d461d commit 8250df8

File tree

5 files changed

+23
-31
lines changed

5 files changed

+23
-31
lines changed

pkg/sif/create.go

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -622,60 +622,52 @@ func (f *FileImage) SetPrimPart(id uint32, opts ...SetOpt) error {
622622
return 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 {
627627
return fmt.Errorf("%w", err)
628628
}
629629

630630
// if already primary system partition, nothing to do
631-
if pt == PartPrimSys {
631+
if p.Parttype == PartPrimSys {
632632
return nil
633633
}
634634

635-
if pt != PartSystem {
635+
if p.Parttype != PartSystem {
636636
return 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 {
658643
return 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 {
668649
return 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+
674666
if err := f.writeDescriptors(); err != nil {
675667
return fmt.Errorf("%w", err)
676668
}
677669

678-
f.h.Arch = getSIFArch(arch)
670+
f.h.Arch = p.Arch
679671
f.h.ModifiedAt = so.t.Unix()
680672

681673
if err := f.writeHeader(); err != nil {
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)