/* * virautoclean.h: automatic scope-based memory clearing helper macros for * use in header files * * 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 2.1 of the License, or (at your option) any later version. * * This library 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 * . * */ #pragma once /** * DEPRECATION WARNING * * The macros in this file should not be used in newly written code. * Use the equivalent GLib macros instead. * * For existing code, use of the libvirt and GLib macros must NEVER * be mixed within a single method. * * The use of the libvirt VIR_FREE macros should also not be mixed * with GLib auto-free macros and vice-verca. * * Existing code should be converted to the new GLib macros and * g_free APIs as needed. */ /** * VIR_DEFINE_AUTOPTR_FUNC: * @type: type of the variable to be freed automatically * @func: cleanup function to be automatically called * * This macro defines a function for automatic freeing of * resources allocated to a variable of type @type. This newly * defined function works as a necessary wrapper around @func. */ #define VIR_DEFINE_AUTOPTR_FUNC(t, f) \ G_DEFINE_AUTOPTR_CLEANUP_FUNC(t, f) /** * VIR_DEFINE_AUTOCLEAN_FUNC: * @type: type of the variable to be cleared automatically * @func: cleanup function to be automatically called * * This macro defines a function for automatic clearing of * resources in a stack'd variable of type @type. Note that @func must * take pointer to @type. */ #define VIR_DEFINE_AUTOCLEAN_FUNC(type, func) \ G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(type, func) /** * VIR_AUTOPTR: * @type: type of the variable to be freed automatically * * Macro to automatically free the memory allocated to * the variable declared with it by calling the function * defined by VIR_DEFINE_AUTOPTR_FUNC when the variable * goes out of scope. * * Note that this macro must NOT be used with vectors! The freeing function * will not free any elements beyond the first. */ #define VIR_AUTOPTR(type) g_autoptr(type) /** * VIR_AUTOCLEAN: * @type: type of the variable to be cleared automatically * * Macro to automatically call clearing function registered for variable of @type * when the variable goes out of scope. * The cleanup function is registered by VIR_DEFINE_AUTOCLEAN_FUNC macro for * the given type. * * Note that this macro must NOT be used with vectors! The cleaning function * will not clean any elements beyond the first. */ #define VIR_AUTOCLEAN(type) g_auto(type)