mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-14 22:37:15 +01:00
Fix double close of file descriptor on error. (#82139, Wayne Schuller)
Mon May 20 15:35:59 2002 Owen Taylor <otaylor@redhat.com> * glib/gfileutils.c (get_contents_regfile): Fix double close of file descriptor on error. (#82139, Wayne Schuller) * glib/gspawn.c (close_and_invalidate): Don't close fd's that have already been closed. (Fix from Michael Meeks, #81959) * glib/giochannel.c (g_io_channel_close): If not flushing, dump the contents of the write buffers, so we won't try to write them to an invalid fd later. (Patch from Ron Steinke, fixing #78290, Andreas Persenius.)
This commit is contained in:
parent
60f59976d9
commit
81ad1bb215
14
ChangeLog
14
ChangeLog
@ -1,3 +1,17 @@
|
|||||||
|
Mon May 20 15:35:59 2002 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
|
* glib/gfileutils.c (get_contents_regfile): Fix double
|
||||||
|
close of file descriptor on error. (#82139, Wayne Schuller)
|
||||||
|
|
||||||
|
* glib/gspawn.c (close_and_invalidate): Don't close
|
||||||
|
fd's that have already been closed. (Fix from Michael
|
||||||
|
Meeks, #81959)
|
||||||
|
|
||||||
|
* glib/giochannel.c (g_io_channel_close): If not flushing,
|
||||||
|
dump the contents of the write buffers, so we won't try
|
||||||
|
to write them to an invalid fd later. (Patch from Ron Steinke,
|
||||||
|
fixing #78290, Andreas Persenius.)
|
||||||
|
|
||||||
2002-05-18 Matthias Clasen <maclas@gmx.de>
|
2002-05-18 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* tests/markups/fail-36.gmarkup:
|
* tests/markups/fail-36.gmarkup:
|
||||||
|
@ -1,3 +1,17 @@
|
|||||||
|
Mon May 20 15:35:59 2002 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
|
* glib/gfileutils.c (get_contents_regfile): Fix double
|
||||||
|
close of file descriptor on error. (#82139, Wayne Schuller)
|
||||||
|
|
||||||
|
* glib/gspawn.c (close_and_invalidate): Don't close
|
||||||
|
fd's that have already been closed. (Fix from Michael
|
||||||
|
Meeks, #81959)
|
||||||
|
|
||||||
|
* glib/giochannel.c (g_io_channel_close): If not flushing,
|
||||||
|
dump the contents of the write buffers, so we won't try
|
||||||
|
to write them to an invalid fd later. (Patch from Ron Steinke,
|
||||||
|
fixing #78290, Andreas Persenius.)
|
||||||
|
|
||||||
2002-05-18 Matthias Clasen <maclas@gmx.de>
|
2002-05-18 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* tests/markups/fail-36.gmarkup:
|
* tests/markups/fail-36.gmarkup:
|
||||||
|
@ -1,3 +1,17 @@
|
|||||||
|
Mon May 20 15:35:59 2002 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
|
* glib/gfileutils.c (get_contents_regfile): Fix double
|
||||||
|
close of file descriptor on error. (#82139, Wayne Schuller)
|
||||||
|
|
||||||
|
* glib/gspawn.c (close_and_invalidate): Don't close
|
||||||
|
fd's that have already been closed. (Fix from Michael
|
||||||
|
Meeks, #81959)
|
||||||
|
|
||||||
|
* glib/giochannel.c (g_io_channel_close): If not flushing,
|
||||||
|
dump the contents of the write buffers, so we won't try
|
||||||
|
to write them to an invalid fd later. (Patch from Ron Steinke,
|
||||||
|
fixing #78290, Andreas Persenius.)
|
||||||
|
|
||||||
2002-05-18 Matthias Clasen <maclas@gmx.de>
|
2002-05-18 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* tests/markups/fail-36.gmarkup:
|
* tests/markups/fail-36.gmarkup:
|
||||||
|
@ -1,3 +1,17 @@
|
|||||||
|
Mon May 20 15:35:59 2002 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
|
* glib/gfileutils.c (get_contents_regfile): Fix double
|
||||||
|
close of file descriptor on error. (#82139, Wayne Schuller)
|
||||||
|
|
||||||
|
* glib/gspawn.c (close_and_invalidate): Don't close
|
||||||
|
fd's that have already been closed. (Fix from Michael
|
||||||
|
Meeks, #81959)
|
||||||
|
|
||||||
|
* glib/giochannel.c (g_io_channel_close): If not flushing,
|
||||||
|
dump the contents of the write buffers, so we won't try
|
||||||
|
to write them to an invalid fd later. (Patch from Ron Steinke,
|
||||||
|
fixing #78290, Andreas Persenius.)
|
||||||
|
|
||||||
2002-05-18 Matthias Clasen <maclas@gmx.de>
|
2002-05-18 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* tests/markups/fail-36.gmarkup:
|
* tests/markups/fail-36.gmarkup:
|
||||||
|
@ -1,3 +1,17 @@
|
|||||||
|
Mon May 20 15:35:59 2002 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
|
* glib/gfileutils.c (get_contents_regfile): Fix double
|
||||||
|
close of file descriptor on error. (#82139, Wayne Schuller)
|
||||||
|
|
||||||
|
* glib/gspawn.c (close_and_invalidate): Don't close
|
||||||
|
fd's that have already been closed. (Fix from Michael
|
||||||
|
Meeks, #81959)
|
||||||
|
|
||||||
|
* glib/giochannel.c (g_io_channel_close): If not flushing,
|
||||||
|
dump the contents of the write buffers, so we won't try
|
||||||
|
to write them to an invalid fd later. (Patch from Ron Steinke,
|
||||||
|
fixing #78290, Andreas Persenius.)
|
||||||
|
|
||||||
2002-05-18 Matthias Clasen <maclas@gmx.de>
|
2002-05-18 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* tests/markups/fail-36.gmarkup:
|
* tests/markups/fail-36.gmarkup:
|
||||||
|
@ -1,3 +1,17 @@
|
|||||||
|
Mon May 20 15:35:59 2002 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
|
* glib/gfileutils.c (get_contents_regfile): Fix double
|
||||||
|
close of file descriptor on error. (#82139, Wayne Schuller)
|
||||||
|
|
||||||
|
* glib/gspawn.c (close_and_invalidate): Don't close
|
||||||
|
fd's that have already been closed. (Fix from Michael
|
||||||
|
Meeks, #81959)
|
||||||
|
|
||||||
|
* glib/giochannel.c (g_io_channel_close): If not flushing,
|
||||||
|
dump the contents of the write buffers, so we won't try
|
||||||
|
to write them to an invalid fd later. (Patch from Ron Steinke,
|
||||||
|
fixing #78290, Andreas Persenius.)
|
||||||
|
|
||||||
2002-05-18 Matthias Clasen <maclas@gmx.de>
|
2002-05-18 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* tests/markups/fail-36.gmarkup:
|
* tests/markups/fail-36.gmarkup:
|
||||||
|
@ -1,3 +1,17 @@
|
|||||||
|
Mon May 20 15:35:59 2002 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
|
* glib/gfileutils.c (get_contents_regfile): Fix double
|
||||||
|
close of file descriptor on error. (#82139, Wayne Schuller)
|
||||||
|
|
||||||
|
* glib/gspawn.c (close_and_invalidate): Don't close
|
||||||
|
fd's that have already been closed. (Fix from Michael
|
||||||
|
Meeks, #81959)
|
||||||
|
|
||||||
|
* glib/giochannel.c (g_io_channel_close): If not flushing,
|
||||||
|
dump the contents of the write buffers, so we won't try
|
||||||
|
to write them to an invalid fd later. (Patch from Ron Steinke,
|
||||||
|
fixing #78290, Andreas Persenius.)
|
||||||
|
|
||||||
2002-05-18 Matthias Clasen <maclas@gmx.de>
|
2002-05-18 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* tests/markups/fail-36.gmarkup:
|
* tests/markups/fail-36.gmarkup:
|
||||||
|
@ -416,8 +416,6 @@ get_contents_regfile (const gchar *filename,
|
|||||||
{
|
{
|
||||||
if (errno != EINTR)
|
if (errno != EINTR)
|
||||||
{
|
{
|
||||||
close (fd);
|
|
||||||
|
|
||||||
g_free (buf);
|
g_free (buf);
|
||||||
|
|
||||||
g_set_error (error,
|
g_set_error (error,
|
||||||
|
@ -346,7 +346,9 @@ g_io_channel_shutdown (GIOChannel *channel,
|
|||||||
g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
|
g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
|
||||||
g_return_val_if_fail (err == NULL || *err == NULL, G_IO_STATUS_ERROR);
|
g_return_val_if_fail (err == NULL || *err == NULL, G_IO_STATUS_ERROR);
|
||||||
|
|
||||||
if (flush && channel->write_buf && channel->write_buf->len > 0)
|
if (channel->write_buf && channel->write_buf->len > 0)
|
||||||
|
{
|
||||||
|
if (flush)
|
||||||
{
|
{
|
||||||
GIOFlags flags;
|
GIOFlags flags;
|
||||||
|
|
||||||
@ -357,16 +359,22 @@ g_io_channel_shutdown (GIOChannel *channel,
|
|||||||
g_io_channel_set_flags (channel, flags & ~G_IO_FLAG_NONBLOCK, NULL);
|
g_io_channel_set_flags (channel, flags & ~G_IO_FLAG_NONBLOCK, NULL);
|
||||||
|
|
||||||
result = g_io_channel_flush (channel, &tmperr);
|
result = g_io_channel_flush (channel, &tmperr);
|
||||||
|
|
||||||
if (channel->partial_write_buf[0] != '\0')
|
|
||||||
{
|
|
||||||
g_warning ("Partial character at end of write buffer not flushed.\n");
|
|
||||||
channel->partial_write_buf[0] = '\0';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
result = G_IO_STATUS_NORMAL;
|
result = G_IO_STATUS_NORMAL;
|
||||||
|
|
||||||
|
g_string_truncate(channel->write_buf, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
result = G_IO_STATUS_NORMAL;
|
||||||
|
|
||||||
|
if (channel->partial_write_buf[0] != '\0')
|
||||||
|
{
|
||||||
|
if (flush)
|
||||||
|
g_warning ("Partial character at end of write buffer not flushed.\n");
|
||||||
|
channel->partial_write_buf[0] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
status = channel->funcs->io_close (channel, err);
|
status = channel->funcs->io_close (channel, err);
|
||||||
|
|
||||||
channel->close_on_unref = FALSE; /* Because we already did */
|
channel->close_on_unref = FALSE; /* Because we already did */
|
||||||
|
@ -119,8 +119,13 @@ close_and_invalidate (gint *fd)
|
|||||||
{
|
{
|
||||||
gint ret;
|
gint ret;
|
||||||
|
|
||||||
|
if (*fd < 0)
|
||||||
|
return -1;
|
||||||
|
else
|
||||||
|
{
|
||||||
ret = close (*fd);
|
ret = close (*fd);
|
||||||
*fd = -1;
|
*fd = -1;
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user