diff --git a/lib/vector/diglib/spindex.c b/lib/vector/diglib/spindex.c index 4f06630afff..abd371241d4 100644 --- a/lib/vector/diglib/spindex.c +++ b/lib/vector/diglib/spindex.c @@ -48,25 +48,45 @@ int dig_spidx_init(struct Plus_head *Plus) filename = G_tempfile(); fd = open(filename, O_RDWR | O_CREAT | O_EXCL, 0600); Plus->Node_spidx = RTreeCreateTree(fd, 0, ndims); - remove(filename); + if (fd != -1) { + close(fd); + } + if (remove(filename) != 0) { + G_fatal_error(_("Unable to remove file %s"), filename); + } G_free(filename); filename = G_tempfile(); fd = open(filename, O_RDWR | O_CREAT | O_EXCL, 0600); Plus->Line_spidx = RTreeCreateTree(fd, 0, ndims); - remove(filename); + if (fd != -1) { + close(fd); + } + if (remove(filename) != 0) { + G_fatal_error(_("Unable to remove file %s"), filename); + } G_free(filename); filename = G_tempfile(); fd = open(filename, O_RDWR | O_CREAT | O_EXCL, 0600); Plus->Area_spidx = RTreeCreateTree(fd, 0, ndims); - remove(filename); + if (fd != -1) { + close(fd); + } + if (remove(filename) != 0) { + G_fatal_error(_("Unable to remove file %s"), filename); + } G_free(filename); filename = G_tempfile(); fd = open(filename, O_RDWR | O_CREAT | O_EXCL, 0600); Plus->Isle_spidx = RTreeCreateTree(fd, 0, ndims); - remove(filename); + if (fd != -1) { + close(fd); + } + if (remove(filename) != 0) { + G_fatal_error(_("Unable to remove file %s"), filename); + } G_free(filename); Plus->Face_spidx = NULL; @@ -125,7 +145,12 @@ void dig_spidx_free_nodes(struct Plus_head *Plus) filename = G_tempfile(); fd = open(filename, O_RDWR | O_CREAT | O_EXCL, 0600); Plus->Node_spidx = RTreeCreateTree(fd, 0, ndims); - remove(filename); + if (fd != -1) { + close(fd); + } + if (remove(filename) != 0) { + G_fatal_error(_("Unable to remove file %s"), filename); + } if (!Plus->Spidx_new) close(Plus->Node_spidx->fd); G_free(filename); @@ -158,7 +183,12 @@ void dig_spidx_free_lines(struct Plus_head *Plus) filename = G_tempfile(); fd = open(filename, O_RDWR | O_CREAT | O_EXCL, 0600); Plus->Line_spidx = RTreeCreateTree(fd, 0, ndims); - remove(filename); + if (fd != -1) { + close(fd); + } + if (remove(filename) != 0) { + G_fatal_error(_("Unable to remove file %s"), filename); + } if (!Plus->Spidx_new) close(Plus->Line_spidx->fd); G_free(filename); @@ -191,7 +221,12 @@ void dig_spidx_free_areas(struct Plus_head *Plus) filename = G_tempfile(); fd = open(filename, O_RDWR | O_CREAT | O_EXCL, 0600); Plus->Area_spidx = RTreeCreateTree(fd, 0, ndims); - remove(filename); + if (fd != -1) { + close(fd); + } + if (remove(filename) != 0) { + G_fatal_error(_("Unable to remove file %s"), filename); + } if (!Plus->Spidx_new) close(Plus->Area_spidx->fd); G_free(filename); @@ -224,7 +259,12 @@ void dig_spidx_free_isles(struct Plus_head *Plus) filename = G_tempfile(); fd = open(filename, O_RDWR | O_CREAT | O_EXCL, 0600); Plus->Isle_spidx = RTreeCreateTree(fd, 0, ndims); - remove(filename); + if (fd != -1) { + close(fd); + } + if (remove(filename) != 0) { + G_fatal_error(_("Unable to remove file %s"), filename); + } if (!Plus->Spidx_new) close(Plus->Isle_spidx->fd); G_free(filename);