[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: xorriso: how to find fixed-string filenames?



Hi,

> > You already get a warning when loading a non-ISO-image.
> There is one small shortcoming though: if the input image is not an iso
> but is filled with only nulls (or is empty), then xorriso does not fail

Yes. Such files count as blank medium.
I did not think of this case when making the proposal to you.


> I had expected that such a complex piece as xorriso would be able to do
> that itself (testing that the input is blank).

It does recognize this state. But it already has an own
harmless interpretation for it: blank medium suitable
for writing.
On such a medium it starts by an empty ISO image model.
This is a normal media state. No reason for a warning.

You get a warning, though, if you submit a non-blank non-ISO.
That's because these "media" have to be blanked before an
ISO session can be written to them.

You may probably recognize the blank-ISO situation by a
reply "0" from:

  xorriso -indev not_existing_file -ls / -- \
     2>/dev/null | wc -c


> > In xorriso's -find, -exec is not a test and can only appear once.
> > [...] It would be quite some effort to enable multiple -exec

> That is why I suggested a different name of -fexec that would be a test.

I missed this point.


> What I had in mind is the possibility to make arbitrary tests against
> the filename only (that would be passed on the command line of a system
> command) and possibly against other attributes like size, mode, time
> that would be passed as environement variables ISO_SIZE, ISO_MODE etc.
> 
>   $ xorriso -indev img.iso -find \
>       -fexec sh -c 'test "$1" = "$2" || test $ISO_MODE = 755' s "$name" '{}'
\; \
>       -exec lsdl

Reading man bash ...

I understand that "$1" and "$2" shall become the value of shell
variable "$name" (evaluated by the shell that starts xorriso) and
the path of the currently examined ISO file object (caused by '{}').
The parameter range of -fexec shall end at "\;".
"s" is a dummy sacrifice to the -c interpreter of sh, so that "$name"
does not become "$0".

I'm not happy with the semicolon. Probably a user-defined separator
word is preferrable. It would be the first parameter of -fexec and
its next occurence would mark the end of -fexec.
Like
  -fexec + sh -c ... +

Similarly i'm not happy with '{}', because it would be a reserved
word among the parameters of fexec.
The solution could be user-defined word given as second parameter.
Like
  -fexec + +path /bin/sh -c ... s "$name" +path ... +

The user could still make it behave quite shell-ish then:
  -fexec ';' '{}' /bin/sh -c ... s "$name" '{}' ... ';'

I'm also not happy with the potential to perform arbitrary actions
on the computer system. One can easily shoot one's foot.
But i accepted this for -concat "pipe" and external filters already.
So this is not a hard obstacle. I just insist in not using $PATH
for finding the external program.

I'll put this proposal on my ponder-and-todo list.


> I think that it is important to have the possibility to disable patterns
> (or regexps), as the alternative is often to have to escape them, which
> is not portable I believe,

Especially xorriso does not support escaped wildcards.
Either -iso_rr_pattern interpretation is enabled or disabled
for a whole command.

There are two reasons for this reluctance to follow the shell
habits:
- xorriso tries to avoid interpretation collisions with the special
  words and characters of a shell.
  (E.g. i do not use ';' as separator by default, because then
   one would have to protect it from interpretation by the shell.)
- I deem several traditional syntax and semantic gestures of
  Bourne Shell descendants cumbersome. Among them is escaping
  of special or unprintable characters, and the behavior of 
  commands like "cp" and "cd" with multiple file arguments.
  Further, the shell is too eager to execute external programs,
  which is something you would not necessarily expect from a
  program that produces ISO 9660 filesystems.
  
I am aware that by this i deny certain features to my users,
which a shell would be able to offer.
(Given the architecture of libisoburn API, it would be well
 possible to wrap xorriso's commands into a real shell-ish
 interpreter, or a programming language like Tcl.)


> > This feature is now in the SVN of libisoburn.

> I haven't had a chance to test it yet.

That's quite convenient for both of us. :)
I just found a bug with the recognition of -or_use_pattern
and wonder how it could pass my tests two weeks ago.
  http://libburnia-project.org/changeset/5327


> >   xorriso -indev image.iso -return_with WARNING 32 -report_about WARNING \
> >     -find / -use_pattern off \
> >             -wholename "$name1" -or -wholename "$name2" -exec lsdl

> This does not even fail when none of the files are found.

-find is not supposed to warn if no file is found.
This situation would be rather be recognizable by no output on
stdout.

>From your initial mail of 16 Apr 2014 07:00:22 +0200, where you
report about your experiments:
>   xorriso -indev image.iso -return_with WARNING 32 -report_about WARNING \
>    -find / -wholename "$name1" -o -wholename "$name2" -exec lsdl

I assume you got the WARNING event from the -indev command,
not from -find. The commands -return_with and -report_about get
into effect already before -indev. So its warning triggered a
non-zero exit value.

If you set -report_about to DEBUG you will get reported the
commands before their messages:
  xorriso : DEBUG : Command:    -indev
  xorriso : DEBUG : Parameter:     img.iso
  ... several unwanted debug messages ...
  xorriso : NOTE : Loading ISO image tree from LBA 0
  ...
  libisoburn: WARNING : No ISO 9660 image at LBA 0. Creating blank image.
  ...
  xorriso : DEBUG : Command:    -return_with
  ...
  xorriso : DEBUG : Command:    -find
  ...

As you already noticed, -return_with does not cause early abort
of the xorriso run. So -find was executed on the empty ISO image
model without result line or warning.
(You could populate the image model, apply commands
   -outdev img.iso -blank as_needed
 to make the "medium" ready for writing, and then write the model
 as ISO filesystem to the "medium". So this empty image model state
 of a "closed medium" has its valid use cases.
 Somewhere i have a transition diagram for media states that looks
 like a buddhist mandala.)


Have a nice day :)

Thomas


Reply to: