Blame pam/pam_fprintd_autoptrs.h

Packit Service 8ebd8e
/*
Packit Service 8ebd8e
 * pam_fprint: PAM module for fingerprint authentication through fprintd
Packit Service 8ebd8e
 * Copyright (C) 2020 Marco Trevisan <marco.trevisan@canonical.com>
Packit Service 8ebd8e
 *
Packit Service 8ebd8e
 * This program is free software; you can redistribute it and/or modify
Packit Service 8ebd8e
 * it under the terms of the GNU General Public License as published by
Packit Service 8ebd8e
 * the Free Software Foundation; either version 2 of the License, or
Packit Service 8ebd8e
 * (at your option) any later version.
Packit Service 8ebd8e
 *
Packit Service 8ebd8e
 * This program is distributed in the hope that it will be useful,
Packit Service 8ebd8e
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 8ebd8e
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 8ebd8e
 * GNU General Public License for more details.
Packit Service 8ebd8e
 *
Packit Service 8ebd8e
 * You should have received a copy of the GNU General Public License along
Packit Service 8ebd8e
 * with this program; if not, write to the Free Software Foundation, Inc.,
Packit Service 8ebd8e
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Packit Service 8ebd8e
 */
Packit Service 8ebd8e
Packit Service 8ebd8e
#pragma once
Packit Service 8ebd8e
Packit Service 8ebd8e
#include <stdlib.h>
Packit Service 8ebd8e
Packit Service 8ebd8e
/* Define auto-pointers functions, based on GLib Macros */
Packit Service 8ebd8e
Packit Service 8ebd8e
#define _CLEANUP_FUNC(func) __attribute__((cleanup (func)))
Packit Service 8ebd8e
Packit Service 8ebd8e
#define _PF_AUTOPTR_FUNC_NAME(TypeName) pf_autoptr_cleanup_ ## TypeName
Packit Service 8ebd8e
#define _PF_AUTOPTR_TYPENAME(TypeName)  TypeName ## _pf_autoptr
Packit Service 8ebd8e
Packit Service 8ebd8e
#define PF_DEFINE_AUTOPTR_CLEANUP_FUNC(TypeName, cleanup) \
Packit Service 8ebd8e
  typedef TypeName *_PF_AUTOPTR_TYPENAME (TypeName);    \
Packit Service 8ebd8e
  static __attribute__((__unused__)) inline void        \
Packit Service 8ebd8e
  _PF_AUTOPTR_FUNC_NAME (TypeName) (TypeName **_ptr)    \
Packit Service 8ebd8e
  { if (_ptr) (cleanup) (*_ptr); }
Packit Service 8ebd8e
Packit Service 8ebd8e
#define PF_DEFINE_AUTO_CLEAN_FUNC(TypeName, cleanup)  \
Packit Service 8ebd8e
  static __attribute__((__unused__)) inline void    \
Packit Service 8ebd8e
  _PF_AUTOPTR_FUNC_NAME (TypeName) (TypeName *_ptr) \
Packit Service 8ebd8e
  { cleanup (_ptr); }
Packit Service 8ebd8e
Packit Service 8ebd8e
static inline void
Packit Service 8ebd8e
autoptr_cleanup_generic_free (void *p)
Packit Service 8ebd8e
{
Packit Service 8ebd8e
  void **pp = (void **) p;
Packit Service 8ebd8e
Packit Service 8ebd8e
  free (*pp);
Packit Service 8ebd8e
}
Packit Service 8ebd8e
Packit Service 8ebd8e
#define pf_autofree _CLEANUP_FUNC (autoptr_cleanup_generic_free)
Packit Service 8ebd8e
#define pf_autoptr(TypeName) \
Packit Service 8ebd8e
  _CLEANUP_FUNC (_PF_AUTOPTR_FUNC_NAME (TypeName)) \
Packit Service 8ebd8e
  _PF_AUTOPTR_TYPENAME (TypeName)
Packit Service 8ebd8e
#define pf_auto(TypeName) \
Packit Service 8ebd8e
  _CLEANUP_FUNC (_PF_AUTOPTR_FUNC_NAME (TypeName)) TypeName
Packit Service 8ebd8e
Packit Service 8ebd8e
PF_DEFINE_AUTOPTR_CLEANUP_FUNC (sd_bus, sd_bus_unref)
Packit Service 8ebd8e
PF_DEFINE_AUTOPTR_CLEANUP_FUNC (sd_bus_message, sd_bus_message_unref)
Packit Service 8ebd8e
PF_DEFINE_AUTOPTR_CLEANUP_FUNC (sd_bus_slot, sd_bus_slot_unref)
Packit Service 8ebd8e
Packit Service 8ebd8e
PF_DEFINE_AUTO_CLEAN_FUNC (sd_bus_error, sd_bus_error_free)