1662cb04cSPoul-Henning Kamp /*- 2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 31de7b4b8SPedro F. Giffuni * 4662cb04cSPoul-Henning Kamp * Copyright (c) 2005-2008 Poul-Henning Kamp 5662cb04cSPoul-Henning Kamp * All rights reserved. 6662cb04cSPoul-Henning Kamp * 7662cb04cSPoul-Henning Kamp * Redistribution and use in source and binary forms, with or without 8662cb04cSPoul-Henning Kamp * modification, are permitted provided that the following conditions 9662cb04cSPoul-Henning Kamp * are met: 10662cb04cSPoul-Henning Kamp * 1. Redistributions of source code must retain the above copyright 11662cb04cSPoul-Henning Kamp * notice, this list of conditions and the following disclaimer. 12662cb04cSPoul-Henning Kamp * 2. Redistributions in binary form must reproduce the above copyright 13662cb04cSPoul-Henning Kamp * notice, this list of conditions and the following disclaimer in the 14662cb04cSPoul-Henning Kamp * documentation and/or other materials provided with the distribution. 15662cb04cSPoul-Henning Kamp * 16662cb04cSPoul-Henning Kamp * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17662cb04cSPoul-Henning Kamp * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18662cb04cSPoul-Henning Kamp * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19662cb04cSPoul-Henning Kamp * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20662cb04cSPoul-Henning Kamp * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21662cb04cSPoul-Henning Kamp * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22662cb04cSPoul-Henning Kamp * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23662cb04cSPoul-Henning Kamp * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24662cb04cSPoul-Henning Kamp * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25662cb04cSPoul-Henning Kamp * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26662cb04cSPoul-Henning Kamp * SUCH DAMAGE. 27662cb04cSPoul-Henning Kamp */ 28662cb04cSPoul-Henning Kamp 29662cb04cSPoul-Henning Kamp #define ALLOC_OBJ(to, type_magic) \ 30662cb04cSPoul-Henning Kamp do { \ 3160e600c8SPedro F. Giffuni (to) = calloc(1, sizeof *(to)); \ 32fb4f6172SPoul-Henning Kamp if ((to) != NULL) \ 33662cb04cSPoul-Henning Kamp (to)->magic = (type_magic); \ 34662cb04cSPoul-Henning Kamp } while (0) 35662cb04cSPoul-Henning Kamp 36662cb04cSPoul-Henning Kamp #define FREE_OBJ(to) \ 37662cb04cSPoul-Henning Kamp do { \ 38662cb04cSPoul-Henning Kamp (to)->magic = (0); \ 39662cb04cSPoul-Henning Kamp free(to); \ 40662cb04cSPoul-Henning Kamp } while (0) 41662cb04cSPoul-Henning Kamp 42fb4f6172SPoul-Henning Kamp #define VALID_OBJ(ptr, type_magic) \ 43fb4f6172SPoul-Henning Kamp ((ptr) != NULL && (ptr)->magic == (type_magic)) 44fb4f6172SPoul-Henning Kamp 45662cb04cSPoul-Henning Kamp #define CHECK_OBJ(ptr, type_magic) \ 46662cb04cSPoul-Henning Kamp do { \ 47662cb04cSPoul-Henning Kamp assert((ptr)->magic == type_magic); \ 48662cb04cSPoul-Henning Kamp } while (0) 49662cb04cSPoul-Henning Kamp 50662cb04cSPoul-Henning Kamp #define CHECK_OBJ_NOTNULL(ptr, type_magic) \ 51662cb04cSPoul-Henning Kamp do { \ 52662cb04cSPoul-Henning Kamp assert((ptr) != NULL); \ 53662cb04cSPoul-Henning Kamp assert((ptr)->magic == type_magic); \ 54662cb04cSPoul-Henning Kamp } while (0) 55662cb04cSPoul-Henning Kamp 56fb4f6172SPoul-Henning Kamp #define CHECK_OBJ_ORNULL(ptr, type_magic) \ 57fb4f6172SPoul-Henning Kamp do { \ 58fb4f6172SPoul-Henning Kamp if ((ptr) != NULL) \ 59fb4f6172SPoul-Henning Kamp assert((ptr)->magic == type_magic); \ 60fb4f6172SPoul-Henning Kamp } while (0) 61fb4f6172SPoul-Henning Kamp 62662cb04cSPoul-Henning Kamp #define CAST_OBJ(to, from, type_magic) \ 63662cb04cSPoul-Henning Kamp do { \ 64662cb04cSPoul-Henning Kamp (to) = (from); \ 65662cb04cSPoul-Henning Kamp if ((to) != NULL) \ 66662cb04cSPoul-Henning Kamp CHECK_OBJ((to), (type_magic)); \ 679371f063SPoul-Henning Kamp } while (0) 68662cb04cSPoul-Henning Kamp 69662cb04cSPoul-Henning Kamp #define CAST_OBJ_NOTNULL(to, from, type_magic) \ 70662cb04cSPoul-Henning Kamp do { \ 71662cb04cSPoul-Henning Kamp (to) = (from); \ 72662cb04cSPoul-Henning Kamp assert((to) != NULL); \ 73662cb04cSPoul-Henning Kamp CHECK_OBJ((to), (type_magic)); \ 749371f063SPoul-Henning Kamp } while (0) 75