Hi!

On Tue, Jul 20, 2021 at 05:19:54PM -0500, Bill Schmidt wrote:
> See the main function.  All three files are guaranteed to have been 
> opened for writing when this is called, but some of them may have 
> already been closed.  So the fclose calls may fail to do anything, but 
> the unlinks will always delete the output files. This is done to avoid 
> leaving garbage lying around after a parsing failure.

That is much worse actually!  From the C spec:
  The value of a pointer to a FILE object is indeterminate after the
  associated file is closed
so this is undefined behaviour.

Please fix that?  Just assign 0 after closing, and guard the fclose on
error with that?

> >>+  pgm_path = argv[0];
> >This isn't portable (depending on what you use it for -- argv[0] is not
> >necessarily a path at all).
> 
> The only thing it's used for is as a documentation string in the output 
> files, indicating the path to the program that built them. So long as 
> argv[0] is a NULL-terminated string, which it had better be, this is 
> harmless.

It is allowed to be a null pointer as well.  (gfortran does not work on
systems that do that, so I wouldn't worry to much about it, but still).

> ISO C11:  "If the value of|argc|is greater than zero, the string pointed 
> to by|argv[0]|represents the program name;|argv[0][0]|shall be the null 
> character if the program name is not available from the host environment."
> 
> So I think we're good here.

Yup, we'll survive, argc > 0 pretty much everywhere (but technically it
isn't even required by POSIX afaics).

Thanks,


Segher

Reply via email to