/* * Licensed under the GNU Lesser General Public License Version 3 * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the license, or * (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library. If not, see . */ // generated automatically - do not change module gio.UnixFDList; private import gi.gio; public import gi.giotypes; private import glib.ConstructionException; private import glib.ErrorG; private import glib.GException; private import gobject.ObjectG; /** * A #GUnixFDList contains a list of file descriptors. It owns the file * descriptors that it contains, closing them when finalized. * * It may be wrapped in a #GUnixFDMessage and sent over a #GSocket in * the %G_SOCKET_ADDRESS_UNIX family by using g_socket_send_message() * and received using g_socket_receive_message(). * * Note that `` belongs to the UNIX-specific GIO * interfaces, thus you have to use the `gio-unix-2.0.pc` pkg-config * file when using it. */ public class UnixFDList : ObjectG { /** the main Gtk struct */ protected GUnixFDList* gUnixFDList; /** Get the main Gtk struct */ public GUnixFDList* getUnixFDListStruct() { return gUnixFDList; } /** the main Gtk struct as a void* */ protected override void* getStruct() { return cast(void*)gUnixFDList; } protected override void setStruct(GObject* obj) { gUnixFDList = cast(GUnixFDList*)obj; super.setStruct(obj); } /** * Sets our main struct and passes it to the parent class. */ public this (GUnixFDList* gUnixFDList, bool ownedRef = false) { this.gUnixFDList = gUnixFDList; super(cast(GObject*)gUnixFDList, ownedRef); } /** */ public static GType getType() { return g_unix_fd_list_get_type(); } /** * Creates a new #GUnixFDList containing no file descriptors. * * Returns: a new #GUnixFDList * * Since: 2.24 * * Throws: ConstructionException GTK+ fails to create the object. */ public this() { auto p = g_unix_fd_list_new(); if(p is null) { throw new ConstructionException("null returned by new"); } this(cast(GUnixFDList*) p, true); } /** * Creates a new #GUnixFDList containing the file descriptors given in * @fds. The file descriptors become the property of the new list and * may no longer be used by the caller. The array itself is owned by * the caller. * * Each file descriptor in the array should be set to close-on-exec. * * If @n_fds is -1 then @fds must be terminated with -1. * * Params: * fds = the initial list of file descriptors * nFds = the length of #fds, or -1 * * Returns: a new #GUnixFDList * * Since: 2.24 * * Throws: ConstructionException GTK+ fails to create the object. */ public this(int[] fds) { auto p = g_unix_fd_list_new_from_array(fds.ptr, cast(int)fds.length); if(p is null) { throw new ConstructionException("null returned by new_from_array"); } this(cast(GUnixFDList*) p, true); } /** * Adds a file descriptor to @list. * * The file descriptor is duplicated using dup(). You keep your copy * of the descriptor and the copy contained in @list will be closed * when @list is finalized. * * A possible cause of failure is exceeding the per-process or * system-wide file descriptor limit. * * The index of the file descriptor in the list is returned. If you use * this index with g_unix_fd_list_get() then you will receive back a * duplicated copy of the same file descriptor. * * Params: * fd = a valid open file descriptor * * Returns: the index of the appended fd in case of success, else -1 * (and @error is set) * * Since: 2.24 * * Throws: GException on failure. */ public int append(int fd) { GError* err = null; auto p = g_unix_fd_list_append(gUnixFDList, fd, &err); if (err !is null) { throw new GException( new ErrorG(err) ); } return p; } /** * Gets a file descriptor out of @list. * * @index_ specifies the index of the file descriptor to get. It is a * programmer error for @index_ to be out of range; see * g_unix_fd_list_get_length(). * * The file descriptor is duplicated using dup() and set as * close-on-exec before being returned. You must call close() on it * when you are done. * * A possible cause of failure is exceeding the per-process or * system-wide file descriptor limit. * * Params: * index = the index into the list * * Returns: the file descriptor, or -1 in case of error * * Since: 2.24 * * Throws: GException on failure. */ public int get(int index) { GError* err = null; auto p = g_unix_fd_list_get(gUnixFDList, index, &err); if (err !is null) { throw new GException( new ErrorG(err) ); } return p; } /** * Gets the length of @list (ie: the number of file descriptors * contained within). * * Returns: the length of @list * * Since: 2.24 */ public int getLength() { return g_unix_fd_list_get_length(gUnixFDList); } /** * Returns the array of file descriptors that is contained in this * object. * * After this call, the descriptors remain the property of @list. The * caller must not close them and must not free the array. The array is * valid only until @list is changed in any way. * * If @length is non-%NULL then it is set to the number of file * descriptors in the returned array. The returned array is also * terminated with -1. * * This function never returns %NULL. In case there are no file * descriptors contained in @list, an empty array is returned. * * Returns: an array of file * descriptors * * Since: 2.24 */ public int[] peekFds() { int length; auto p = g_unix_fd_list_peek_fds(gUnixFDList, &length); return p[0 .. length]; } /** * Returns the array of file descriptors that is contained in this * object. * * After this call, the descriptors are no longer contained in * @list. Further calls will return an empty list (unless more * descriptors have been added). * * The return result of this function must be freed with g_free(). * The caller is also responsible for closing all of the file * descriptors. The file descriptors in the array are set to * close-on-exec. * * If @length is non-%NULL then it is set to the number of file * descriptors in the returned array. The returned array is also * terminated with -1. * * This function never returns %NULL. In case there are no file * descriptors contained in @list, an empty array is returned. * * Returns: an array of file * descriptors * * Since: 2.24 */ public int[] stealFds() { int length; auto p = g_unix_fd_list_steal_fds(gUnixFDList, &length); return p[0 .. length]; } }