[PATCH] Treat custom and applet scripts as applets

Xabier Oneca -- xOneca xoneca at gmail.com
Wed Nov 21 09:43:35 UTC 2018


Hi,

Some nitty notes about scripts/embedded_scripts:

> diff --git a/scripts/embedded_scripts b/scripts/embedded_scripts
> index 7245ba6e0..b7a023ce0 100755
> --- a/scripts/embedded_scripts
> +++ b/scripts/embedded_scripts
> @@ -14,46 +15,102 @@ if test $? != 0; then
>         exit 1
>  fi
>
> -exec >"$target.$$"
> -
> -scripts=""
> -if [ -d "$loc" ]
> +custom_scripts=""
> +if [ -d "$custom_loc" ]
>  then
> -       scripts=$(cd $loc; ls * 2>/dev/null)
> +       custom_scripts=$(cd $custom_loc; ls * 2>/dev/null)
>  fi
> +all_scripts=$(applets/busybox.mkscripts)
> +
> +# all_scripts includes applet scripts and custom scripts, sort them out
> +applet_scripts=""
> +for i in $all_scripts
> +do
> +    found=0
> +       for j in $custom_scripts
> +       do
> +               if [ "$i" = "$j" ]
> +               then
> +                       found=1
> +                       break;
> +               fi
> +       done
> +       if [ $found -eq 0 ]
> +       then
> +               # anything that isn't a custom script is an applet script
> +               applet_scripts="$applet_scripts $i"
> +       fi
> +done
>
> -n=$(echo $scripts | wc -w)
> +# we know the custom scripts are present but applet scripts might have
> +# become detached from their configuration
> +for i in $applet_scripts
> +do
> +       #if [ ! -f "$applet_loc/$i" -a ! -f "$custom_loc/$i" ]
> +       if [ ! -f "$applet_loc/$i" ]
> +       then
> +               echo "missing applet script $i"
> +               exit 1
> +       fi
> +done
>
> -if [ $n -ne 0 ]
> +n=$(echo $custom_scripts $applet_scripts | wc -w)
> +nall=$(echo $all_scripts | wc -w)
> +
> +if [ $n -ne $nall ]
>  then
> -       printf '#ifdef DEFINE_script_names\n'
> -       printf 'const char script_names[] ALIGN1 = '
> -       for i in $scripts
> +       echo "script mismatch $n != $nall"
> +       exit 1
> +fi
> +
> +concatenate_scripts() {
> +       for i in $custom_scripts
> +       do
> +               cat $custom_loc/$i
> +               printf '\000'
> +       done
> +       for i in $applet_scripts
>         do
> -               printf '"%s\\0"' $i
> +               cat $applet_loc/$i
> +               printf '\000'
>         done
> -       printf ';\n'
> +}
> +
> +exec >"$target.$$"
> +
> +if [ $n -ne 0 ]
> +then
> +       printf '#ifdef DEFINE_SCRIPT_DATA\n'
> +       if [ $n -ne 0 ]

This will always be true here. Outer 'if' takes care of it.

> +       then
> +               printf 'const uint16_t applet_numbers[] = {\n'
> +               for i in $custom_scripts $applet_scripts
> +               do
> +                       # TODO support applets with names including invalid characters
> +                       printf '\tAPPLET_NO_%s,\n' $i
> +               done
> +               printf '};\n'
> +       fi
>         printf '#else\n'
> -       printf 'extern const char script_names[] ALIGN1;\n'
> +       if [ $n -ne 0 ]

Same here.

> +       then
> +               printf 'extern const uint16_t applet_numbers[];\n'
> +       fi
>         printf '#endif\n'
>  fi
> -printf "#define NUM_SCRIPTS $n\n\n"
> +
> +printf "\n"
> +printf '#define NUM_SCRIPTS %d\n' $n
> +printf "\n"

Cheers,

Xabier Oneca_,,_


More information about the busybox mailing list