[PATCH 1/3] base-files: sysupgrade: add tar.sh with helpers for building archives
Rafał Miłecki
zajec5 at gmail.com
Tue Feb 27 23:29:41 PST 2024
On 26.02.2024 22:27, Paul D wrote:
>> diff --git a/package/base-files/files/lib/upgrade/tar.sh b/package/base-files/files/lib/upgrade/tar.sh
>> new file mode 100644
>> index 0000000000..00057dd760
>> --- /dev/null
>> +++ b/package/base-files/files/lib/upgrade/tar.sh
>> @@ -0,0 +1,84 @@
>
> No shebang?
Files /lib/upgrade/*.sh are for including.
>> +# SPDX-License-Identifier: GPL-2.0-or-later OR MIT
>> +
>> +__tar_print_padding() {
>> + [ $1 -eq 0 ] || dd if=/dev/zero bs=$1 count=1 2>/dev/null
>> +}
>> +
>> +__tar_make_member() {
>> + local name="$1"
>> + local content="$2"
>> + local username="$3"
>> + local groupname="$4"
>> + local mtime="$5"
>> + local mode=644
>> + local uid=0
>> + local gid=0
>> + local size=${#content}
>> + local type=0
>> + local link=""
>> +
>
> recommend that they're ordered here same as struct order:
>
> struct posix_header
> { /* byte offset */
> char name[100]; /* 0 */
> char mode[8]; /* 100 */
> char uid[8]; /* 108 */
> char gid[8]; /* 116 */
> char size[12]; /* 124 */
> char mtime[12]; /* 136 */
> char chksum[8]; /* 148 */
> char typeflag; /* 156 */
> char linkname[100]; /* 157 */
> char magic[6]; /* 257 */
> char version[2]; /* 263 */
> char uname[32]; /* 265 */
> char gname[32]; /* 297 */
> char devmajor[8]; /* 329 */
> char devminor[8]; /* 337 */
> char prefix[155]; /* 345 */
> /* 500 */
> };
I'm not sure about it. In the first place I want code to be easy to
understand and maintain. Using some non-natural order (like messing with
order of argument variables and local variables) will be confusing.
>> + local pad=$'\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1'
>> +
>
> maybe try:
>
> local pad=$(printf '\1%.0s' $(seq 100))
They produce the same result I believe:
# echo $'\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1' | md5sum
59c89925a4ef5bee948db1ec5dc9a4c4 -
# echo $(printf '\1%.0s' $(seq 100)) | md5sum
59c89925a4ef5bee948db1ec5dc9a4c4 -
The first is longer however it avoids two subshell executions. I don't
think there's a single winner here.
More information about the openwrt-devel
mailing list