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

mkisofs aborts but exit value is 0

Hi Joerg,

i experienced an abort of mkisofs 2.01a34 which 
-to my best knowledge- returned a 0 exit value.

A possible reason for this 0 exit value can be found in
the code of 2.01a34, 2.01 and 2.01.01a3 in :

The run of mkisofs aborted with these messages 
   19.36% done, estimate finish Tue Aug  2 08:13:49 2005
   19.60% done, estimate finish Tue Aug  2 08:13:50 2005
  mkisofs: Success. cannot read from '/home/th.schmitt/mail/scdbackup'

My surrounding script does notice any non-zero exit value
of mkisofs. This feature has been tested at many occasions.
This time it did not react on the abort.
So i conclude that there was a 0 exit value with mkisofs.

The reported file is a mailbox.

I looked for possible hints in mkisofs/*.c (2.01a34 to 2.01.01a3)
and found this "cannot read from" in write.c :

          if (fread(buffer, 1, use, infile) == 0) {
                        comerr("cannot read from '%s'\n", filename);
                        fprintf(stderr, "cannot read from '%s'\n", filename);

By presuming that "mkisofs: Success." was added by comerr()
i get to  libschily/comerr.c , function _comerr() ;

          if (exflg) {
                   /* NOTREACHED */

with comexit() finally executing exit(err).

My theory :

The mailbox file shrunk while mkisofs was trying to read it up to
the old size.  fread() returned 0 because EOF was encountered before
a single byte could be read.
After this errno (resp. geterrno()) is 0. So comerr() reports "Success"
and comexit() exits with 0.

The non-USE_LIBSCHILY branch with "exit(1)" indicates that indeed
a noticeable abort is intended.
But comerr() unconditionally uses the value of geterrno() as exit value. 

My wishes :

I do agree with the abort. The file in the emerging ISO image
is corrupted even if mkisofs could get itself back on track.

I would rather like to get a chance for my script to notice that abort.
An error message like "file shrunk" plus exit(1) would be fine.

As always, thanks for your work.

Have a nice day :)


Reply to: