BRL-CAD
magic.h
Go to the documentation of this file.
1 /* M A G I C . H
2  * BRL-CAD
3  *
4  * Copyright (c) 2008-2014 United States Government as represented by
5  * the U.S. Army Research Laboratory.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public License
9  * version 2.1 as published by the Free Software Foundation.
10  *
11  * This library is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this file; see the file named COPYING for more
18  * information.
19  */
20 
21 #ifndef BU_MAGIC_H
22 #define BU_MAGIC_H
23 
24 #include "common.h"
25 
26 #include "bu/defines.h"
27 
28 
29 /** @addtogroup magic */
30 /** @{ */
31 /** @file magic.h
32  *
33  * Global registry of recognized magic numbers.
34  *
35  * This file is part of LIBBU even though it provides magic numbers
36  * for structures in other libraries.
37  *
38  * The defines should be considered PRIVATE (even though they are not)
39  * and should NEVER be referenced by value.
40  */
41 
43 
44 /* libbu */
45 
46 #define BU_AVS_MAGIC 0x41765321 /**< AvS! */
47 #define BU_BITV_MAGIC 0x62697476 /**< bitv */
48 #define BU_COLOR_MAGIC 0x6275636c /**< bucl */
49 #define BU_EXTERNAL_MAGIC 0x768dbbd0 /**< v??? */
50 #define BU_HASH_ENTRY_MAGIC 0x48454e54 /**< HENT */
51 #define BU_HASH_RECORD_MAGIC 0x68617368 /**< hash */
52 #define BU_HASH_TBL_MAGIC 0x48415348 /**< HASH */
53 #define BU_HIST_MAGIC 0x48697374 /**< Hist */
54 #define BU_HOOK_LIST_MAGIC 0x90d5dead /**< ???? => Nietzsche? */
55 #define BU_IMAGE_FILE_MAGIC 0x6269666d /**< bifm */
56 #define BU_LIST_HEAD_MAGIC 0x01016580 /**< ??e? */
57 #define BU_MAPPED_FILE_MAGIC 0x4d617066 /**< Mapf */
58 #define BU_OBSERVER_MAGIC 0x65796573 /**< eyes */
59 #define BU_PTBL_MAGIC 0x7074626c /**< ptbl */
60 #define BU_RB_LIST_MAGIC 0x72626c73 /**< rbls */
61 #define BU_RB_NODE_MAGIC 0x72626e6f /**< rbno */
62 #define BU_RB_PKG_MAGIC 0x7262706b /**< rbpk */
63 #define BU_RB_TREE_MAGIC 0x72627472 /**< rbtr */
64 #define BU_VLB_MAGIC 0x5f564c42 /**< _VLB */
65 #define BU_VLS_MAGIC 0x89333bbb /**< ?3;? */
66 
67 /* libbn */
68 
69 #define BN_GAUSS_MAGIC 0x1e886880 /**< ??h? => 512256128 */
70 #define BN_POLY_MAGIC 0x506f4c79 /**< PoLy */
71 #define BN_SPM_MAGIC 0x41278678 /**< A'?x */
72 #define BN_TABDATA_MAGIC 0x53736d70 /**< Ssmp */
73 #define BN_TABLE_MAGIC 0x53706374 /**< Spct */
74 #define BN_TOL_MAGIC 0x98c734bb /**< ??4? */
75 #define BN_UNIF_MAGIC 0x00be7460 /**< ??t` => 12481632 */
76 #define BN_VLBLOCK_MAGIC 0x981bd112 /**< ???? */
77 #define BN_VLIST_MAGIC 0x98237474 /**< ?\#tt */
78 
79 /* primitive internals */
80 
81 #define RT_ARBN_INTERNAL_MAGIC 0x18236461 /**< ?\#da */
82 #define RT_ARB_INTERNAL_MAGIC 0x9befd010 /**< ???? */
83 #define RT_ARS_INTERNAL_MAGIC 0x77ddbbe3 /**< w??? */
84 #define RT_BINUNIF_INTERNAL_MAGIC 0x42696e55 /**< BinU */
85 #define RT_BOT_INTERNAL_MAGIC 0x626f7472 /**< botr */
86 #define RT_BREP_INTERNAL_MAGIC 0x42524550 /**< BREP */
87 #define RT_CLINE_INTERNAL_MAGIC 0x43767378 /**< CLIN */
88 #define RT_DSP_INTERNAL_MAGIC 0x00000de6 /**< ???? */
89 #define RT_EBM_INTERNAL_MAGIC 0xf901b231 /**< ???1 */
90 #define RT_EHY_INTERNAL_MAGIC 0xaaccee91 /**< ???? */
91 #define RT_ELL_INTERNAL_MAGIC 0x93bb23ff /**< ??\#? */
92 #define RT_EPA_INTERNAL_MAGIC 0xaaccee90 /**< ???? */
93 #define RT_ETO_INTERNAL_MAGIC 0xaaccee92 /**< ???? */
94 #define RT_EXTRUDE_INTERNAL_MAGIC 0x65787472 /**< extr */
95 #define RT_GRIP_INTERNAL_MAGIC 0x31196205 /**< 1?b? */
96 #define RT_HALF_INTERNAL_MAGIC 0xaa87bbdd /**< ???? */
97 #define RT_HF_INTERNAL_MAGIC 0x4846494d /**< HFIM */
98 #define RT_HYP_INTERNAL_MAGIC 0x68797065 /**< hype */
99 #define RT_JOINT_INTERNAL_MAGIC 0x4a6f696e /**< Join */
100 #define RT_METABALL_INTERNAL_MAGIC 0x62616c6c /**< ball */
101 #define RT_NURB_INTERNAL_MAGIC 0x002b2bdd /**< ?++? */
102 #define RT_PART_INTERNAL_MAGIC 0xaaccee87 /**< ???? */
103 #define RT_PG_INTERNAL_MAGIC 0x9bfed887 /**< ???? */
104 #define RT_PIPE_INTERNAL_MAGIC 0x7dd7bb3e /**< }??> */
105 #define RT_REVOLVE_INTERNAL_MAGIC 0x7265766C /**< revl */
106 #define RT_RHC_INTERNAL_MAGIC 0xaaccee89 /**< ???? */
107 #define RT_RPC_INTERNAL_MAGIC 0xaaccee88 /**< ???? */
108 #define RT_SKETCH_INTERNAL_MAGIC 0x736b6574 /**< sket */
109 #define RT_SUBMODEL_INTERNAL_MAGIC 0x7375626d /**< subm */
110 #define RT_SUPERELL_INTERNAL_MAGIC 0xff93bb23 /**< ???? */
111 #define RT_TGC_INTERNAL_MAGIC 0xaabbdd87 /**< ???? */
112 #define RT_TOR_INTERNAL_MAGIC 0x9bffed87 /**< ???? */
113 #define RT_VOL_INTERNAL_MAGIC 0x987ba1d0 /**< ?{?? */
114 #define RT_PNTS_INTERNAL_MAGIC 0x706e7473 /**< pnts */
115 #define RT_ANNOTATION_INTERNAL_MAGIC 0x616e6e6f /**< anno */
116 #define RT_HRT_INTERNAL_MAGIC 0x6872743f /**< hrt? */
117 /* n-manifold geometry */
118 
119 #define NMG_EDGEUSE2_MAGIC 0x91919191 /**< ???? => used in eu->l2.magic */
120 #define NMG_EDGEUSE_MAGIC 0x90909090 /**< ???? */
121 #define NMG_EDGE_G_CNURB_MAGIC 0x636e7262 /**< cnrb */
122 #define NMG_EDGE_G_LSEG_MAGIC 0x6c696768 /**< ligh */
123 #define NMG_EDGE_MAGIC 0x33333333 /**< 3333 */
124 #define NMG_FACEUSE_MAGIC 0x56565656 /**< VVVV */
125 #define NMG_FACE_G_PLANE_MAGIC 0x726b6e65 /**< rkne */
126 #define NMG_FACE_G_SNURB_MAGIC 0x736e7262 /**< snrb */
127 #define NMG_FACE_MAGIC 0x45454545 /**< EEEE */
128 #define NMG_INTER_STRUCT_MAGIC 0x99912120 /**< ??! */
129 #define NMG_KNOT_VECTOR_MAGIC 0x6b6e6f74 /**< knot */
130 #define NMG_LOOPUSE_MAGIC 0x78787878 /**< xxxx */
131 #define NMG_LOOP_G_MAGIC 0x6420224c /**< d "L */
132 #define NMG_LOOP_MAGIC 0x67676767 /**< gggg */
133 #define NMG_MODEL_MAGIC 0x12121212 /**< ???? */
134 #define NMG_RADIAL_MAGIC 0x52614421 /**< RaD! */
135 #define NMG_RAY_DATA_MAGIC 0x01651771 /**< ?e?q */
136 #define NMG_REGION_A_MAGIC 0x696e6720 /**< ing */
137 #define NMG_REGION_MAGIC 0x23232323 /**< \#\#\#\# */
138 #define NMG_RT_HIT_MAGIC 0x48697400 /**< Hit? */
139 #define NMG_RT_HIT_SUB_MAGIC 0x48696d00 /**< Him? */
140 #define NMG_RT_MISS_MAGIC 0x4d697300 /**< Mis? */
141 #define NMG_SHELL_A_MAGIC 0x65207761 /**< e wa */
142 #define NMG_SHELL_MAGIC 0x71077345 /**< q?sE => shell oil */
143 #define NMG_VERTEXUSE_A_CNURB_MAGIC 0x20416e64 /**< And */
144 #define NMG_VERTEXUSE_A_PLANE_MAGIC 0x69676874 /**< ight */
145 #define NMG_VERTEXUSE_MAGIC 0x12341234 /**< ?4?4 */
146 #define NMG_VERTEX_G_MAGIC 0x72737707 /**< rsw? */
147 #define NMG_VERTEX_MAGIC 0x00123123 /**< ??1\# */
148 
149 /* raytrace */
150 
151 #define RT_ANP_MAGIC 0x41507270 /**< APrp */
152 #define RT_AP_MAGIC 0x4170706c /**< Appl */
153 #define RT_COMB_MAGIC 0x436f6d49 /**< ComI */
154 #define RT_CONSTRAINT_MAGIC 0x7063696d /**< pcim */
155 #define RT_CTS_MAGIC 0x98989123 /**< ???\# */
156 #define RT_DB_TRAVERSE_MAGIC 0x64627472 /**< dbtr */
157 #define RT_DBTS_MAGIC 0x64627473 /**< dbts */
158 #define RT_DB_INTERNAL_MAGIC 0x0dbbd867 /**< ???g */
159 #define RT_DIR_MAGIC 0x05551212 /**< ?U?? => Directory assistance */
160 #define RT_FUNCTAB_MAGIC 0x46754e63 /**< FuNc */
161 #define RT_HIT_MAGIC 0x20686974 /**< hit */
162 #define RT_HTBL_MAGIC 0x6874626c /**< htbl */
163 #define RT_PIECELIST_MAGIC 0x70636c73 /**< pcls */
164 #define RT_PIECESTATE_MAGIC 0x70637374 /**< pcst */
165 #define RT_RAY_MAGIC 0x78726179 /**< xray */
166 #define RT_REGION_MAGIC 0xdffb8001 /**< ???? */
167 #define RT_SEG_MAGIC 0x98bcdef1 /**< ???? */
168 #define RT_SOLTAB2_MAGIC 0x92bfcde2 /**< ???? => l2.magic */
169 #define RT_SOLTAB_MAGIC 0x92bfcde0 /**< ???? => l.magic */
170 #define RT_TESS_TOL_MAGIC 0xb9090dab /**< ???? */
171 #define RT_TREE_MAGIC 0x91191191 /**< ???? */
172 #define RT_WDB_MAGIC 0x5f576462 /**< _Wdb */
173 
174 /* ged */
175 
176 #define GED_CMD_MAGIC 0x65786563 /**< exec */
177 
178 /* fb */
179 
180 #define FB_MAGIC 0xfbfb00fb /**< ???? */
181 #define FB_WGL_MAGIC 0x574f4642 /**< WOFB */
182 #define FB_OGL_MAGIC 0x584f4642 /**< XOFB */
183 #define FB_X24_MAGIC 0x58324642 /**< X2FB */
184 #define FB_TK_MAGIC 0x544b4642 /**< TKFB */
185 #define FB_QT_MAGIC 0x51544642 /**< QTFB */
186 #define FB_DEBUG_MAGIC 0x44424642 /**< DBFB */
187 #define FB_DISK_MAGIC 0x44494642 /**< STFB */
188 #define FB_STK_MAGIC 0x53544642 /**< STFB */
189 #define FB_MEMORY_MAGIC 0x4d454642 /**< MEFB */
190 #define FB_REMOTE_MAGIC 0x524d4642 /**< MEFB */
191 #define FB_NULL_MAGIC 0x4e554642 /**< NUFB */
192 #define FB_OSGL_MAGIC 0x4f474642 /**< OGFB */
193 
194 /* misc */
195 
196 #define ANIMATE_MAGIC 0x414e4963 /**< ANIc */
197 #define CURVE_BEZIER_MAGIC 0x62657a69 /**< bezi */
198 #define CURVE_CARC_MAGIC 0x63617263 /**< carc */
199 #define CURVE_LSEG_MAGIC 0x6c736567 /**< lseg */
200 #define CURVE_NURB_MAGIC 0x6e757262 /**< nurb */
201 #define DB5_RAW_INTERNAL_MAGIC 0x64357269 /**< d5ri */
202 #define DBI_MAGIC 0x57204381 /**< W C? */
203 #define DB_FULL_PATH_MAGIC 0x64626670 /**< dbfp */
204 #define LIGHT_MAGIC 0xdbddbdb7 /**< ???? */
205 #define MF_MAGIC 0x55968058 /**< U??X */
206 #define PIXEL_EXT_MAGIC 0x50787400 /**< Pxt */
207 #define PL_MAGIC 0x0beef00d /**< ???? => mm. bee food. */
208 #define PT_HD_MAGIC 0x87687680 /**< ?hv? */
209 #define PT_MAGIC 0x87687681 /**< ?hv? */
210 #define RESOURCE_MAGIC 0x83651835 /**< ?e?5 */
211 #define RTI_MAGIC 0x99101658 /**< ???X */
212 #define VERT_TREE_MAGIC 0x56455254 /**< VERT */
213 #define WDB_METABALLPT_MAGIC 0x6d627074 /**< mbpt */
214 #define WDB_PIPESEG_MAGIC 0x9723ffef /**< ?\#?? */
215 #define WMEMBER_MAGIC 0x43128912 /**< C??? */
216 #define ICV_IMAGE_MAGIC 0x6269666d /**< bifm */
217 
218 
219 /** @file badmagic.c
220  *
221  * Routines involved with handling "magic numbers" used to identify
222  * various in-memory data structures.
223  *
224  */
225 
226 /**
227  * Macros to check and validate a structure pointer, given that the
228  * first entry in the structure is a magic number. ((void)(1?0:((_ptr), void(), 0)))
229  */
230 #ifdef NO_BOMBING_MACROS
231 # define BU_CKMAG(_ptr, _magic, _str) BU_IGNORE((_ptr))
232 #else
233 # define BU_CKMAG(_ptr, _magic, _str) { \
234  const uintptr_t _ptrval = (const uintptr_t)(_ptr); \
235  if (UNLIKELY((_ptrval == 0) || (_ptrval & (sizeof(_ptrval)-1)) || *((const uint32_t *)(_ptr)) != (uint32_t)(_magic))) { \
236  bu_badmagic((const uint32_t *)(_ptr), (uint32_t)_magic, _str, __FILE__, __LINE__); \
237  } \
238  }
239 #endif
240 
241 
242 /**
243  * Support routine for BU_CKMAG macro.
244  */
245 BU_EXPORT extern void bu_badmagic(const uint32_t *ptr, uint32_t magic, const char *str, const char *file, int line);
246 
247 
248 
249 /** @file magic.c
250  *
251  * Routines involved with handling "magic numbers" used to identify
252  * various in-memory data structures. Magic numbers provide a means
253  * to perform run-time sanity checks for memory corruption and
254  * uninitialized data.
255  *
256  * The one ugly thing about this implementation is that every BRL-CAD
257  * structure needs to have its magic number registered here and in
258  * the header.
259  *
260  */
261 /**
262  * Given a number which has been found in the magic number field of a
263  * structure (which is typically the first entry), determine what kind
264  * of structure this magic number pertains to. This is called by the
265  * macro BU_CK_MAGIC() to provide a "hint" as to what sort of pointer
266  * error might have been made.
267  */
268 BU_EXPORT extern const char *bu_identify_magic(uint32_t magic);
269 
270 
271 /** @} */
272 
274 
275 #endif /* BU_MAGIC_H */
276 
277 /*
278  * Local Variables:
279  * tab-width: 8
280  * mode: C
281  * indent-tabs-mode: t
282  * c-file-style: "stroustrup"
283  * End:
284  * ex: shiftwidth=4 tabstop=8
285  */
Header file for the BRL-CAD common definitions.
#define __BEGIN_DECLS
Definition: common.h:73
oldeumate l2 magic
Definition: nmg_mod.c:3843
void bu_badmagic(const uint32_t *ptr, uint32_t magic, const char *str, const char *file, int line)
Definition: badmagic.c:31
#define __END_DECLS
Definition: common.h:74
const char * bu_identify_magic(uint32_t magic)