2019/3/11 12:04, Laurent Vivier:
> > + find /proc/sys/fs/binfmt_misc/ -type f -name $names -exec sh -c
> > 'printf %s -1 > {}' \;
>
> The qemu-* will be expanded here if you have a qemu-XXX in the current
> directory. You must use "$names".
You are correct. Indeed, I had not spotted it because I introduced a
bug when renaming 'reset' to 'clear'. Precisely, '-c' was being used
twice: for 'credential' and for 'clear'. Both issues will be fixed in
the next version.
> But:
>
> To remove all, you can do:
> sh -c 'printf %s -1 > /proc/sys/fs/binfmt_misc/status'
>
> so something like
>
> if [ $# -eq 0 ] ; then
> sh -c 'printf %s -1 > /proc/sys/fs/binfmt_misc/status
> fi
> qemu_check_target_list $1
> for t in $checked_target_list ; do
> sh -c 'printf %s -1 > /proc/sys/fs/binfmt_misc/qemu-$t'
> done
Wouldn't writing to 'status' remove all the interpreters, and not only
those that correspond to qemu?
> But I think you should also taking care of the suffix.
I think that the suffix is not related to the entry in
'/proc/sys/fs/binfmt_misc/'. See, e.g.:
package qemu-$cpu
interpreter $qemu
So, independently of which is the executable (interpreter), the
package name does not include the suffix.
> > +if [ "x$QEMU_CLEAR" = "xyes" ] ; then
> > + case "$BINFMT_SET" in
> > + *debian) BINFMT_CLEAR=qemu_clear_notimplemented ;;
> > + *systemd) BINFMT_CLEAR=qemu_clear_notimplemented ;;
> > + *) BINFMT_CLEAR=qemu_clear_interpreter
> > + esac
>
> Put this in the previous case for decoding options, please.
It won't work. This if/case block requires all the options to be
already parsed and processed. If I put it in the case for '-r|--clear'
above, it will only work only when '-r' is given after '--debian' or
'--systemd'. Otherwise, BINFMT_SET will always be
qemu_register_interpreter when '-crear' is evaluated. I think that we
should not rely on the users providing the options in a specific
order.
Regards,
Unai