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

Re: mkisofs aborts but exit value is 0



Hi,

> > Possibly one should resort to
> >   EIO              5      /* I/O error */
> This would be a bad idea.

Why that ?


> >   mkisofs: File too large. cannot read from '...'
> > might happen with a file that has 0 bytes.
> No, it may not (RTSL).

Hey ! I did invest some effort in reading the source.
You made clear in the past that RTxy is mandatory
before bothering you.


write_one_file() gets parameter  size  which
obviously is larger than the number of bytes which
fread() is finally able to deliver.
I think, this is due to the fact that the file
shrunk between the time when  size  was determined
and the time when fread() tried to read the file's
content.

write_files() seems to run a loop over a list
of  struct deferred_write  using member  size 
without determining the current file size by stat() 
or similar functions.
So if the list contains more than one member then
this opens a substantial time window for the following
prerecorded members to shrink to an arbitrary low size.
Even to 0.

In function file_write() the call of write_files()
is commented by
  /* Now write all of the files that we need. */
which makes me believe the list indeed contains
more than one file. 

The surrounding of
  (*opnt->of_write) (discimage);
in mkisofs.c does not suggest single file lists with
freshly determined file sizes either.


I could not find a spot in the code of write_one_file()
where the actual filesize 0 would be detected before the
call to fread().
But even if 0 isn't possible, there is still the
fact that the critizised file may be quite small
and that it wouldn't have failed if it was larger.


> I would need to rethink the problem.

There must be some better solution than "File too large".


Have a nice day :)

Thomas



Reply to: