Fixing bugs.
authorClaude Heiland-Allen <claude@mathr.co.uk>
Sat, 21 Dec 2013 11:53:30 +0000 (11:53 +0000)
committerClaude Heiland-Allen <claude@mathr.co.uk>
Sat, 21 Dec 2013 11:53:30 +0000 (11:53 +0000)
commit64692c684bf50d22bed4f4cc4303dba070243788
treee0019837debb3201a951b9cfea709c2bd7fbb485
parent99e73f934ddd79ebdbbb2f6d929e6ffd3562df9a
Fixing bugs.

Our programs crash if we try to access files that don't exist (reading
from a file that isn't there, or trying to save a file into a directory
that isn't there):

    $ ./colour nonexistant >out.ppm
    Segmentation fault
    $ ./render 0 0 2 1 directory/nonexistant
    Segmentation fault
    $

We forgot to check the result of fopen(): it returns a null pointer
(one that points nowhere) if the file couldn't be opened.  When reading
or writing to a file, the C library code dereferences the file pointer,
and dereferencing a null pointer causes a segfault crash.  We fix the crash
in colour.c by exiting with an error if the file pointer is null, and also
fix a lesser bug by remembering to close the files we've opened (the C
library will close all the open files and free all memory when the program
ends, but for longer-running programs it's important to clean up as you go).

We have the same bug in the image_save() function used by the render program,
to fix the crash we do nothing if the file couldn't be opened for writing,
while noting that this is far from ideal:  we might lose a lot of calculation
effort without noticing that the files weren't saved correctly.
colour.c
mandelbrot.h