Blame libacl/libobj.h

rpm-build 0a0c83
/*
rpm-build 0a0c83
  Copyright (C) 2000, 2002, 2003  Andreas Gruenbacher <agruen@suse.de>
rpm-build 0a0c83
rpm-build 0a0c83
  This program is free software: you can redistribute it and/or modify it
rpm-build 0a0c83
  under the terms of the GNU Lesser General Public License as published by
rpm-build 0a0c83
  the Free Software Foundation, either version 2.1 of the License, or
rpm-build 0a0c83
  (at your option) any later version.
rpm-build 0a0c83
rpm-build 0a0c83
  This program is distributed in the hope that it will be useful,
rpm-build 0a0c83
  but WITHOUT ANY WARRANTY; without even the implied warranty of
rpm-build 0a0c83
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
rpm-build 0a0c83
  GNU Lesser General Public License for more details.
rpm-build 0a0c83
rpm-build 0a0c83
  You should have received a copy of the GNU Lesser General Public License
rpm-build 0a0c83
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
rpm-build 0a0c83
*/
rpm-build 0a0c83
rpm-build 0a0c83
#ifndef __LIBOBJ_H
rpm-build 0a0c83
#define __LIBOBJ_H
rpm-build 0a0c83
rpm-build 0a0c83
#include <stdlib.h>
rpm-build 0a0c83
rpm-build 0a0c83
#include "misc.h"
rpm-build 0a0c83
rpm-build 0a0c83
/* Ugly pointer manipulation */
rpm-build 0a0c83
rpm-build 0a0c83
#ifdef LIBACL_DEBUG
rpm-build 0a0c83
#  define ext2int(T, ext_p) \
rpm-build 0a0c83
	((T##_obj *)__ext2int_and_check(ext_p, T##_MAGIC, #T))
rpm-build 0a0c83
#else
rpm-build 0a0c83
#  define ext2int(T, ext_p) \
rpm-build 0a0c83
	((T##_obj *)__ext2int_and_check(ext_p, T##_MAGIC))
rpm-build 0a0c83
#endif
rpm-build 0a0c83
rpm-build 0a0c83
#define int2ext(int_p) \
rpm-build 0a0c83
	((int_p) ? &(int_p)->i : NULL)
rpm-build 0a0c83
#define new_var_obj_p(T, sz) \
rpm-build 0a0c83
	((T##_obj *)__new_var_obj_p(T##_MAGIC, sizeof(T##_obj) + sz))
rpm-build 0a0c83
#define realloc_var_obj_p(T, p, sz) \
rpm-build 0a0c83
	((T##_obj *)realloc(p, sizeof(T##_obj) + sz))
rpm-build 0a0c83
#define new_obj_p(T) \
rpm-build 0a0c83
	new_var_obj_p(T, 0)
rpm-build 0a0c83
#define new_obj_p_here(T, p) \
rpm-build 0a0c83
	__new_obj_p_here(T##_MAGIC, p)
rpm-build 0a0c83
#define check_obj_p(T, obj_p) \
rpm-build 0a0c83
	((T##_obj *)__check_obj_p((obj_prefix *)(obj_p), T##_MAGIC))
rpm-build 0a0c83
#define free_obj_p(obj_p) \
rpm-build 0a0c83
	(__free_obj_p((obj_prefix *)(obj_p)))
rpm-build 0a0c83
rpm-build 0a0c83
rpm-build 0a0c83
/* prefix for all objects */
rpm-build 0a0c83
/* [Note: p_magic is a long rather than int so that this structure */
rpm-build 0a0c83
/* does not become padded by the compiler on 64-bit architectures] */
rpm-build 0a0c83
rpm-build 0a0c83
typedef struct {
rpm-build 0a0c83
	unsigned long		p_magic:16;
rpm-build 0a0c83
	unsigned long		p_flags:16;
rpm-build 0a0c83
} obj_prefix;
rpm-build 0a0c83
rpm-build 0a0c83
#define pmagic o_prefix.p_magic
rpm-build 0a0c83
#define pflags o_prefix.p_flags
rpm-build 0a0c83
rpm-build 0a0c83
/* magic object values */
rpm-build 0a0c83
#define acl_MAGIC		(0x712C)
rpm-build 0a0c83
#define acl_entry_MAGIC		(0x9D6B)
rpm-build 0a0c83
#define acl_permset_MAGIC	(0x1ED5)
rpm-build 0a0c83
#define qualifier_MAGIC		(0x1C27)
rpm-build 0a0c83
#define string_MAGIC		(0xD5F2)
rpm-build 0a0c83
#define cap_MAGIC		(0x6CA8)
rpm-build 0a0c83
rpm-build 0a0c83
/* object flags */
rpm-build 0a0c83
#define OBJ_MALLOC_FLAG		1
rpm-build 0a0c83
rpm-build 0a0c83
/* object types */
rpm-build 0a0c83
struct string_obj_tag;
rpm-build 0a0c83
typedef struct string_obj_tag string_obj;
rpm-build 0a0c83
rpm-build 0a0c83
/* string object */
rpm-build 0a0c83
struct __string_ext {
rpm-build 0a0c83
	char			s_str[0];
rpm-build 0a0c83
};
rpm-build 0a0c83
struct string_obj_tag {
rpm-build 0a0c83
	obj_prefix		o_prefix;
rpm-build 0a0c83
	struct __string_ext	i;
rpm-build 0a0c83
};
rpm-build 0a0c83
rpm-build 0a0c83
#define sstr i.s_str
rpm-build 0a0c83
rpm-build 0a0c83
/* object creation, destruction, conversion and validation */
rpm-build 0a0c83
void *__new_var_obj_p(int magic, size_t size) hidden;
rpm-build 0a0c83
void __new_obj_p_here(int magic, void *here) hidden;
rpm-build 0a0c83
void __free_obj_p(obj_prefix *obj_p) hidden;
rpm-build 0a0c83
obj_prefix *__check_obj_p(obj_prefix *obj_p, int magic) hidden;
rpm-build 0a0c83
#ifdef LIBACL_DEBUG
rpm-build 0a0c83
obj_prefix *__ext2int_and_check(void *ext_p, int magic,
rpm-build 0a0c83
				const char *typename) hidden;
rpm-build 0a0c83
#else
rpm-build 0a0c83
obj_prefix *__ext2int_and_check(void *ext_p, int magic) hidden;
rpm-build 0a0c83
#endif
rpm-build 0a0c83
rpm-build 0a0c83
#endif /* __LIBOBJ_H */