[oi-dev] Mistake in svc:/network/install:default script?
Irek Szczesniak
iszczesniak at gmail.com
Mon Dec 2 00:09:24 UTC 2013
On Fri, Nov 29, 2013 at 4:59 PM, Jim Klimov <jimklimov at cos.ru> wrote:
> Hello,
>
> While reviewing the service code for system initialization,
> I stumbled upon this in /lib/svc/method/net-install:
>
>
> if [ "$intf" == "$NET_V4IF" ]; then
> net_process_v4_pg
> else
> net_process_v6_pg
> fi
> if [ $? -ne $SMF_EXIT_OK ]; then
> #
> # Last error wins.
> #
> ecode=$?
> errs=`expr $errs + 1`
> else
> ifcnt=`expr $ifcnt + 1`
> fi
>
> The routine sets "ecode" (error code) which would be returned
> upon exit from net_process_install(). I believe that the clause
> in "Last error wins" is wrong, and would use "$?" value from
> the test "[" invokation, which would be a successful zero.
> But I am not certain about how this should be processed in the
> logic, that is - should such errors be treated as failures of
> the service or not.
>
> If yes (errors are failures), the exit code should be non-zero
> via a temporary variable ($res) like this:
>
> if [ "$intf" == "$NET_V4IF" ]; then
> net_process_v4_pg
> else
> net_process_v6_pg
> fi
> res=$?
> if [ $res -ne $SMF_EXIT_OK ]; then
> #
> # Last error wins.
> #
> ecode=$res
> errs=`expr $errs + 1`
> else
> ifcnt=`expr $ifcnt + 1`
> fi
>
>
> Does it make sense?
I think so, but statements like ifcnt=`expr $ifcnt + 1` make me vomit
at the same time. I think it had been established that POSIX
statements are a good idea for readability and performance, so ((
ifcnt++ )) or (( ifcnt=ifcnt+1 )) would be better than calling expr(1)
for simple arithmetic
Likewise if [ $res -ne $SMF_EXIT_OK ]; can be simplified to if (( res
!= SMF_EXIT_OK ));
Irek
More information about the oi-dev
mailing list