[easytag/wip/taglib-mp4-cxx: 20/20] Remove auto pointer template
- From: David King <davidk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [easytag/wip/taglib-mp4-cxx: 20/20] Remove auto pointer template
- Date: Fri, 11 Apr 2014 11:22:06 +0000 (UTC)
commit 35bfa52882ed147b39ff5a53fcdbd2f6a1941a67
Author: David King <amigadave amigadave com>
Date: Fri Apr 11 11:29:07 2014 +0100
Remove auto pointer template
Additionally, unref the stream on destruction of GIO_InputStream, as
closing the stream is not sufficient.
src/gio_wrapper.cc | 96 ++++++++++------------------------------------------
1 files changed, 18 insertions(+), 78 deletions(-)
---
diff --git a/src/gio_wrapper.cc b/src/gio_wrapper.cc
index 2d24cb7..3fd8a9f 100644
--- a/src/gio_wrapper.cc
+++ b/src/gio_wrapper.cc
@@ -19,71 +19,6 @@
#include "gio_wrapper.h"
-template<class T> class SimpleAutoPtr
-{
-public:
- SimpleAutoPtr (T *item, GDestroyNotify dest) : ptr (item), dtor (dest)
- {
- }
-
- ~SimpleAutoPtr ()
- {
- clear ();
- }
-
- SimpleAutoPtr<T> &operator= (T *item)
- {
- clear ();
- ptr = item;
-
- return *this;
- }
-
- operator T * ()
- {
- return ptr;
- }
-
- operator GTypeInstance * ()
- {
- return (GTypeInstance *)ptr;
- }
-
- operator bool ()
- {
- return !!ptr;
- }
-
- T &operator* ()
- {
- return *ptr;
- }
-
- T **operator& ()
- {
- return &ptr;
- }
-
- T *operator-> ()
- {
- return ptr;
- }
-
- void clear ()
- {
- if (ptr)
- {
- dtor ((void *)ptr);
- }
-
- ptr = NULL;
- }
-
-private:
- T *ptr;
- GDestroyNotify dtor;
-};
-
GIO_InputStream::GIO_InputStream (GFile * file_) :
file ((GFile *)g_object_ref (gpointer (file_))),
filename (g_file_get_uri (file)),
@@ -96,14 +31,9 @@ GIO_InputStream::~GIO_InputStream ()
{
clear ();
- if (stream)
- {
- g_input_stream_close (G_INPUT_STREAM (stream), NULL, &error);
- clear ();
- }
-
+ g_clear_object (&stream);
g_free (filename);
- g_object_unref (G_OBJECT (file));
+ g_object_unref (file);
}
TagLib::FileName
@@ -321,10 +251,9 @@ GIO_IOStream::insert (TagLib::ByteVector const &data,
return;
}
- SimpleAutoPtr<GFileIOStream> tstr (NULL,
- (GDestroyNotify)g_io_stream_close);
- SimpleAutoPtr<GFile> tmp (g_file_new_tmp ("easytag-XXXXXX", &tstr, NULL),
- g_object_unref);
+ GFileIOStream *tstr;
+ /* FIXME: Check for NULL. */
+ GFile *tmp = g_file_new_tmp ("easytag-XXXXXX", &tstr, NULL);
char *buffer[4096];
gsize r;
@@ -347,6 +276,8 @@ GIO_IOStream::insert (TagLib::ByteVector const &data,
if (error)
{
+ g_object_unref (tstr);
+ g_object_unref (tmp);
return;
}
@@ -356,6 +287,8 @@ GIO_IOStream::insert (TagLib::ByteVector const &data,
if (error)
{
+ g_object_unref (tstr);
+ g_object_unref (tmp);
return;
}
@@ -365,6 +298,8 @@ GIO_IOStream::insert (TagLib::ByteVector const &data,
if (error)
{
+ g_object_unref (tstr);
+ g_object_unref (tmp);
return;
}
@@ -381,22 +316,27 @@ GIO_IOStream::insert (TagLib::ByteVector const &data,
if (error)
{
+ g_object_unref (tstr);
+ g_object_unref (tmp);
return;
}
}
- tstr = NULL;
- g_io_stream_close (G_IO_STREAM (stream), NULL, NULL);
+ g_object_unref (tstr);
+ g_object_unref (stream);
stream = NULL;
g_file_move (tmp, file, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, &error);
if (error)
{
+ g_object_unref (tmp);
return;
}
stream = g_file_open_readwrite (file, NULL, &error);
+
+ g_object_unref (tmp);
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]