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 304f5e8569
commit 065221aac7

View file

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