1#include <errno.h> 2#include <stdlib.h> 3#include "libobj.h" 4 5#ifdef LIBACL_DEBUG 6# include <stdio.h> 7#endif 8 9/* object creation, destruction, conversion and validation */ 10 11void * 12__new_var_obj_p(int magic, size_t size) 13{ 14 obj_prefix *obj_p = (obj_prefix *)malloc(size); 15 if (obj_p) { 16 obj_p->p_magic = (long)magic; 17 obj_p->p_flags = OBJ_MALLOC_FLAG; 18 } 19 return obj_p; 20} 21 22 23void 24__new_obj_p_here(int magic, void *here) 25{ 26 obj_prefix *obj_p = here; 27 obj_p->p_magic = (long)magic; 28 obj_p->p_flags = 0; 29} 30 31 32void 33__free_obj_p(obj_prefix *obj_p) 34{ 35 obj_p->p_magic = 0; 36 if (obj_p->p_flags & OBJ_MALLOC_FLAG) 37 free(obj_p); 38} 39 40 41obj_prefix * 42__check_obj_p(obj_prefix *obj_p, int magic) 43{ 44 if (!obj_p || obj_p->p_magic != (long)magic) { 45 errno = EINVAL; 46 return NULL; 47 } 48 return obj_p; 49} 50 51 52#ifdef LIBACL_DEBUG 53obj_prefix * 54__ext2int_and_check(void *ext_p, int magic, const char *typename) 55#else 56obj_prefix * 57__ext2int_and_check(void *ext_p, int magic) 58#endif 59{ 60 obj_prefix *obj_p = ((obj_prefix *)ext_p)-1; 61 if (!ext_p) { 62#ifdef LIBACL_DEBUG 63 fprintf(stderr, "invalid %s object at %p\n", 64 typename, obj_p); 65#endif 66 errno = EINVAL; 67 return NULL; 68 } 69 return __check_obj_p(obj_p, magic); 70} 71 72