On 20/08/2021 15:14, Roberto A. Foglietta wrote:
Il giorno ven 20 ago 2021 alle ore 15:21 Harald van Dijk <[email protected] <mailto:[email protected]>> ha scritto:
    Hi,

    Please note the "when an outer context has already set LINENO"
    qualification :) busybox does have one call to evalstring() when no
    outer context has set LINENO to be preserved (and a prior context might
    have set it to an unrelated value that should be discarded): that
    happens when processing the command string supplied with the -c command
    line option. In that case, it is probably best to let LINENO start at 1
    from the start of the command string like busybox ash currently does.


Hi,

 it is a matter of convention: external commands strings could have lineno 0 or 1.  The patch attached simply changes the initialisation value. As you wish or like.  IMHO, the value 0 informs that LINENO has no meaning: it is more informative.

That isn't what happens though, you don't guarantee that LINENO will be 0 to inform that it has no meaning. It will be incremented in multi-line command strings, and as I wrote, an earlier context may have set LINENO to an unrelated value. With your earlier patches, with 'make defconfig', I see:

  ./busybox ash -c 'echo LINENO=$LINENO
  echo LINENO=$LINENO'
  0
  1
  cat >shrc <<EOF
  :
  :
  :
  EOF
  ENV=shrc ./busybox ash -ic 'echo LINENO=$LINENO'
  3

With your last patch, that first case is changed to print 1 / 2, but the second case still prints 3. I can understand outputting 0 / 0 for the first case and 0 for the second case, and I can understand (and would personally prefer) outputting 1 / 2 for the first case and 1 for the second case. Outputting 3 for the second case seems wrong.
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to