diff options
Diffstat (limited to 'gio/src/unixfdlist.ccg')
-rw-r--r-- | gio/src/unixfdlist.ccg | 43 |
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 |