Page MenuHomeFreeBSD

Implement support for "/SYM64/" archives in ar
ClosedPublic

Authored by aryeeteygerald_rogers.com on Jan 9 2019, 5:01 PM.

Details

Summary

Changes to ar and libarchive to support 64-bit archives

Allows archives greater than 4GB to be created.

PR: 234454

Test Plan

Created 10 object files of 512M (using a global array of 512 million chars) and created an archive.

Also combined a 5 of these files to ensure regular archives still work.

Diff Detail

Repository
rS FreeBSD src repository
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

emaste added a subscriber: imp.Jan 9 2019, 5:36 PM
emaste added a comment.Jan 9 2019, 7:12 PM

We can submit the libarchive changes directly upstream at https://github.com/libarchive/libarchive

We can submit the libarchive changes directly upstream at https://github.com/libarchive/libarchive

Gerald submitted https://github.com/libarchive/libarchive/pull/1116

GitHub pull request 1116 has been merged, and I'm hopeful it will come back into a libarchive update in the near future.

aryeeteygerald_rogers.com edited the test plan for this revision. (Show Details)Apr 9 2019, 4:15 PM
aryeeteygerald_rogers.com updated this revision to Diff 56004.

Rebase changes to reflect upstream update to libarchive

imp accepted this revision.Apr 9 2019, 5:28 PM

Couple of minor style nits, but the code looks good to my brain.

usr.bin/ar/write.c
710 ↗(On Diff #56004)

Any chance you could snug the w_sz onto the prior line? Then the line break is at an operator with a lower order of precedence which is more natural.

937 ↗(On Diff #56004)

This may be too wide.

This revision is now accepted and ready to land.Apr 9 2019, 5:28 PM
emaste added inline comments.Apr 9 2019, 7:37 PM
usr.bin/ar/write.c
678 ↗(On Diff #56004)

this line is > 80 cols but is hard to wrap at fewer...

Maybe:

if (w_sz == sizeof(uint32_t))
        *(bsdar->s_so + i) = 
            (uint64_t)htobe32((uint32_t)(*(bsdar->s_so +
            i)) + pm_sz);
else
        *(bsdar->s_so + i) = 
            htobe64(*(bsdar->s_so + i) + pm_sz);
681 ↗(On Diff #56004)

the final + here is col 81

723 ↗(On Diff #56004)

, is col 81

usr.bin/ar/write.c
713 ↗(On Diff #56004)

style(9) nit here, space between if and (

emaste added inline comments.Apr 10 2019, 1:04 PM
usr.bin/ar/write.c
936 ↗(On Diff #56004)

Also these casts are not necessary.

This revision was automatically updated to reflect the committed changes.