Page MenuHomeFreeBSD

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

Authored by aryeeteygerald_rogers.com on Jan 9 2019, 5:01 PM.
Tags
None
Referenced Files
F81933028: D18793.diff
Tue, Apr 23, 9:58 AM
Unknown Object (File)
Sat, Apr 20, 2:08 PM
Unknown Object (File)
Thu, Apr 18, 12:19 AM
Unknown Object (File)
Wed, Apr 17, 9:49 PM
Unknown Object (File)
Wed, Apr 17, 7:43 PM
Unknown Object (File)
Wed, Apr 17, 10:23 AM
Unknown Object (File)
Tue, Apr 16, 12:38 AM
Unknown Object (File)
Mon, Apr 15, 8:52 PM
Subscribers

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 - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

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

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)

Rebase changes to reflect upstream update to libarchive

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
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 (

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.