On Thu, Aug 03, 2017 at 06:26:47PM -0400, trondd wrote: > Stuart Henderson <s...@spacehopper.org> wrote: > > > Ah, perhaps the change to disk behaviour wasn't reflected in calculations > > then.. > > I got it figured out. > > In the checkfs function, the 'eval $(stat...)' command stores a list of disk > devices and creates a variable named for each device to store the size of the > files in the patch to be installed there. It uses :+ to accumulate the sizes > of > multiple files. But since ksh creates variales as global by default, these > are > not cleared between patches and :+ takes an existing value if the variable > already > exists. So the value stored in these variables will continue to accumulate. > > A simple solution seems to be to mark these variables local. Ksh will clean > them > up between calls to checkfs.
Very good find. Just applied your patch on current, thanks. > Tim. > > > Index: syspatch.sh > =================================================================== > RCS file: /cvs/src/usr.sbin/syspatch/syspatch.sh,v > retrieving revision 1.120 > diff -u -p -r1.120 syspatch.sh > --- syspatch.sh 2 Aug 2017 05:58:29 -0000 1.120 > +++ syspatch.sh 3 Aug 2017 21:59:13 -0000 > @@ -91,7 +91,7 @@ checkfs() > # - nonexistent files (i.e. syspatch is installing new files) > # - broken interpolation due to bogus devices like remote filesystems > eval $(cd / && > - stat -qf "_dev=\"\${_dev} %Sd\" %Sd=\"\${%Sd:+\${%Sd}\+}%Uz\"" \ > + stat -qf "_dev=\"\${_dev} %Sd\"; local > %Sd=\"\${%Sd:+\${%Sd}\+}%Uz\"" \ > ${_files}) 2>/dev/null || _ret=$? > set -e > [[ ${_ret} == 127 ]] && sp_err "Remote filesystem, aborting" > -- Antoine