summaryrefslogtreecommitdiff
path: root/gio/src/unixfdlist.ccg
diff options
context:
space:
mode:
Diffstat (limited to 'gio/src/unixfdlist.ccg')
-rw-r--r--gio/src/unixfdlist.ccg43
1 files changed, 32 insertions, 11 deletions
diff --git a/gio/src/unixfdlist.ccg b/gio/src/unixfdlist.ccg
index 4fbed4dd..b17b0f6d 100644
--- a/gio/src/unixfdlist.ccg
+++ b/gio/src/unixfdlist.ccg
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
/* Copyright (C) 2010 The giomm Development Team
*
* This library is free software; you can redistribute it and/or
@@ -24,24 +22,47 @@ namespace Gio
{
UnixFDList::UnixFDList(const Glib::ArrayHandle<int>& fds)
-: _CONSTRUCT("fds", fds.data(), "n_fds", fds.size())
-{}
+:
+ // Mark this class as non-derived to allow C++ vfuncs to be skipped.
+ Glib::ObjectBase(0),
+ // g_unix_fd_list_new_from_array() must be called.
+ // Its parameters don't correspond to properties.
+ // _CONSTRUCT() + g_unit_fd_list_append() is not an alternative.
+ // g_unit_fd_list_append() duplicates the file descriptor,
+ // but g_unix_fd_list_new_from_array() does not.
+ Glib::Object((GObject*)g_unix_fd_list_new_from_array(fds.data(), fds.size()))
+{
+}
+
+UnixFDList::UnixFDList(const Glib::ArrayHandle<int>& fds, int n_fds)
+:
+ // Mark this class as non-derived to allow C++ vfuncs to be skipped.
+ Glib::ObjectBase(0),
+ // g_unix_fd_list_new_from_array() must be called.
+ // Its parameters don't correspond to properties.
+ // _CONSTRUCT() + g_unit_fd_list_append() is not an alternative.
+ // g_unit_fd_list_append() duplicates the file descriptor,
+ // but g_unix_fd_list_new_from_array() does not.
+ Glib::Object((GObject*)g_unix_fd_list_new_from_array(fds.data(), n_fds))
+{
+}
const Glib::ArrayHandle<int> UnixFDList::peek_fds() const
{
int length = 0;
- const int* fds = g_unix_fd_list_peek_fds(const_cast<GUnixFDList*>(gobj()),
- &length);
- // (length - 1) is used because the array is terminated with a -1.
- return Glib::ArrayHandle<int>(fds, length - 1, Glib::OWNERSHIP_NONE);
+ const auto fds = g_unix_fd_list_peek_fds(const_cast<GUnixFDList*>(gobj()), &length);
+ // The array is terminated with a -1, but that terminating element is
+ // not included in the length that g_unix_fd_list_peek_fds() returns.
+ return Glib::ArrayHandle<int>(fds, length, Glib::OWNERSHIP_NONE);
}
Glib::ArrayHandle<int> UnixFDList::steal_fds()
{
int length = 0;
- const int* fds = g_unix_fd_list_steal_fds(gobj(), &length);
- // (length - 1) is used because the array is terminated with a -1.
- return Glib::ArrayHandle<int>(fds, length - 1, Glib::OWNERSHIP_DEEP);
+ const auto fds = g_unix_fd_list_steal_fds(gobj(), &length);
+ // The array is terminated with a -1, but that terminating element is
+ // not included in the length that g_unix_fd_list_steal_fds() returns.
+ return Glib::ArrayHandle<int>(fds, length, Glib::OWNERSHIP_DEEP);
}
} // namespace Gio