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