1176998Sphk/*- 2176998Sphk * Copyright (c) 2005-2008 Poul-Henning Kamp 3176998Sphk * All rights reserved. 4176998Sphk * 5176998Sphk * Redistribution and use in source and binary forms, with or without 6176998Sphk * modification, are permitted provided that the following conditions 7176998Sphk * are met: 8176998Sphk * 1. Redistributions of source code must retain the above copyright 9176998Sphk * notice, this list of conditions and the following disclaimer. 10176998Sphk * 2. Redistributions in binary form must reproduce the above copyright 11176998Sphk * notice, this list of conditions and the following disclaimer in the 12176998Sphk * documentation and/or other materials provided with the distribution. 13176998Sphk * 14176998Sphk * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15176998Sphk * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16176998Sphk * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17176998Sphk * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18176998Sphk * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19176998Sphk * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20176998Sphk * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21176998Sphk * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22176998Sphk * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23176998Sphk * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24176998Sphk * SUCH DAMAGE. 25176998Sphk * 26176998Sphk * $FreeBSD$ 27176998Sphk */ 28176998Sphk 29219027Sphk#define ALLOC_OBJ(to, type_magic) \ 30176998Sphk do { \ 31176998Sphk (to) = calloc(sizeof *(to), 1); \ 32219027Sphk if ((to) != NULL) \ 33219027Sphk (to)->magic = (type_magic); \ 34176998Sphk } while (0) 35176998Sphk 36176998Sphk#define FREE_OBJ(to) \ 37176998Sphk do { \ 38176998Sphk (to)->magic = (0); \ 39176998Sphk free(to); \ 40176998Sphk } while (0) 41176998Sphk 42219027Sphk#define VALID_OBJ(ptr, type_magic) \ 43219027Sphk ((ptr) != NULL && (ptr)->magic == (type_magic)) 44219027Sphk 45176998Sphk#define CHECK_OBJ(ptr, type_magic) \ 46176998Sphk do { \ 47176998Sphk assert((ptr)->magic == type_magic); \ 48176998Sphk } while (0) 49176998Sphk 50176998Sphk#define CHECK_OBJ_NOTNULL(ptr, type_magic) \ 51176998Sphk do { \ 52176998Sphk assert((ptr) != NULL); \ 53176998Sphk assert((ptr)->magic == type_magic); \ 54176998Sphk } while (0) 55176998Sphk 56219027Sphk#define CHECK_OBJ_ORNULL(ptr, type_magic) \ 57219027Sphk do { \ 58219027Sphk if ((ptr) != NULL) \ 59219027Sphk assert((ptr)->magic == type_magic); \ 60219027Sphk } while (0) 61219027Sphk 62176998Sphk#define CAST_OBJ(to, from, type_magic) \ 63176998Sphk do { \ 64176998Sphk (to) = (from); \ 65176998Sphk if ((to) != NULL) \ 66176998Sphk CHECK_OBJ((to), (type_magic)); \ 67177285Sphk } while (0) 68176998Sphk 69219027Sphk#define CAST_OBJ_NOTNULL(to, from, type_magic) \ 70176998Sphk do { \ 71176998Sphk (to) = (from); \ 72176998Sphk assert((to) != NULL); \ 73176998Sphk CHECK_OBJ((to), (type_magic)); \ 74177285Sphk } while (0) 75