libdivecomputer.c: Try not to pass NULL to fopen()

C99 7.1.4, says nothing about passing NULL to fopen(),
which means that it isn't portable and there are no guaranties
that the return will be a NULL pointer or that that a library
implementation will not assert or SYSSEGV in the middle of the
fopen() branch.

libdivecomputer.c's 'dumpfile_name' and 'logfile_name' could
cause problems in that regard.

A possible fix for #411

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Lubomir I. Ivanov 2014-01-07 16:41:20 +02:00 committed by Dirk Hohndel
parent 3c794d0275
commit 4d8168cc57

View file

@ -676,7 +676,7 @@ static const char *do_device_import(device_data_t *data)
dc_buffer_t *buffer = dc_buffer_new (0);
rc = dc_device_dump (device, buffer);
if (rc == DC_STATUS_SUCCESS) {
if (rc == DC_STATUS_SUCCESS && dumpfile_name) {
FILE* fp = subsurface_fopen(dumpfile_name, "wb");
if (fp != NULL) {
fwrite (dc_buffer_get_data (buffer), 1, dc_buffer_get_size (buffer), fp);
@ -721,7 +721,7 @@ const char *do_libdivecomputer_import(device_data_t *data)
data->device = NULL;
data->context = NULL;
if (data->libdc_log)
if (data->libdc_log && logfile_name)
fp = subsurface_fopen(logfile_name, "w");
rc = dc_context_new(&data->context);