ar.Make: *os.File => io.WriteSeeker

This commit is contained in:
xushiwei
2023-12-10 19:43:11 +08:00
parent 549dbe6a34
commit 76bd863416

View File

@@ -53,7 +53,7 @@ func Create(arfile string, objs []string) error {
// given as a parameter. It is equivalent to the following command: // given as a parameter. It is equivalent to the following command:
// //
// ar -rcs <archivePath> <objs...> // ar -rcs <archivePath> <objs...>
func Make(arfile *os.File, objs []string) error { func Make(arfile io.WriteSeeker, objs []string) error {
// Open the archive file. // Open the archive file.
arwriter := ar.NewWriter(arfile) arwriter := ar.NewWriter(arfile)
err := arwriter.WriteGlobalHeader() err := arwriter.WriteGlobalHeader()
@@ -200,7 +200,7 @@ func Make(arfile *os.File, objs []string) error {
return err return err
} }
if int64(int32(offset)) != offset { if int64(int32(offset)) != offset {
return errors.New("large archives (4GB+) not supported: " + arfile.Name()) return errors.New("large archives (4GB+) not supported")
} }
archiveOffsets[i] = int32(offset) archiveOffsets[i] = int32(offset)
@@ -231,7 +231,7 @@ func Make(arfile *os.File, objs []string) error {
return fmt.Errorf("could not copy object file into ar file: %w", err) return fmt.Errorf("could not copy object file into ar file: %w", err)
} }
if n != st.Size() { if n != st.Size() {
return errors.New("file modified during ar creation: " + arfile.Name()) return errors.New("file modified during ar creation")
} }
_, err = arwriter.Write(copyBuf.Bytes()) _, err = arwriter.Write(copyBuf.Bytes())
if err != nil { if err != nil {
@@ -252,6 +252,8 @@ func Make(arfile *os.File, objs []string) error {
} }
// Overwrite placeholder indices. // Overwrite placeholder indices.
_, err = arfile.WriteAt(indicesBuf.Bytes(), symbolTableStart+4) if _, err = arfile.Seek(symbolTableStart+4, io.SeekStart); err == nil {
_, err = arfile.Write(indicesBuf.Bytes())
}
return err return err
} }