On Sun, Jul 16, 2017 at 03:37:15AM +0200, Klemens Nanni wrote:
> Why looping over all existing archives, picking the latest version of
> the current archive, skipping it in case it's already in our list of
> selected latest versions or adding it otherwise?
> 
> The current code runs ls|sort|tail about n * (v - 1) times for n
> different libraries and v versions respectively since the globbed list
> is almost always sorted already, effectively adding the latest versions
> after skipping all others.
> 
> This diff makes it much clearer and simpler by sorting and picking
> only as many versions as there are libraries to reorder (two). Globbing
> is done within the loop so future libraries with different naming
> schemes comes at no cost.
> 
> Applies cleanly to both the current revision as well as my previous diff
> but the previous one will fail on top of this one.
> 
> Feedback? Comments?

I like this. It's much clearer.

I think it's ok to commit this, but I wonder if we should test it in
snapshots first.

> 
> Index: rc
> ===================================================================
> RCS file: /cvs/src/etc/rc,v
> retrieving revision 1.507
> diff -u -p -r1.507 rc
> --- rc        4 Jul 2017 19:02:11 -0000       1.507
> +++ rc        16 Jul 2017 01:15:43 -0000
> @@ -171,13 +171,10 @@ reorder_libs() {
>       echo -n 'reordering libraries:'
>  
>       # Only choose the latest version of the libraries.
> -     for _liba in /usr/lib/libc.so.*.a /usr/lib/libcrypto.so.*.a; do
> -             _liba=$(ls ${_liba%%.[0-9]*}*.a | sort -V | tail -1)
> -             for _l in $_libas; do
> -                     [[ $_l == $_liba ]] && continue 2
> -             done
> -             _libas="$_libas $_liba"
> +     for _liba in 'libc.so.*.a' 'libcrypto.so.*.a'; do
> +             _libas="$_libas $(ls /usr/lib/$_liba | sort -V | tail -1)"
>       done
> +     _libas=${_libas# }
>  
>       # Remount read-write, if /usr/lib is on a read-only ffs filesystem.
>       if [[ $_mp == *' type ffs '*'read-only'* ]]; then
> 

Reply via email to