Re: [PATCH 5.004_60] Fix goto-in-eval segfault (unwrapped!)
[p5sagit/p5-mst-13.2.git] / mg.h
1 /*    mg.h
2  *
3  *    Copyright (c) 1991-1997, Larry Wall
4  *
5  *    You may distribute under the terms of either the GNU General Public
6  *    License or the Artistic License, as specified in the README file.
7  *
8  */
9
10 struct mgvtbl {
11     int         (*svt_get)      _((SV *sv, MAGIC* mg));
12     int         (*svt_set)      _((SV *sv, MAGIC* mg));
13     U32         (*svt_len)      _((SV *sv, MAGIC* mg));
14     int         (*svt_clear)    _((SV *sv, MAGIC* mg));
15     int         (*svt_free)     _((SV *sv, MAGIC* mg));
16 };
17
18 struct magic {
19     MAGIC*      mg_moremagic;
20     MGVTBL*     mg_virtual;     /* pointer to magic functions */
21     U16         mg_private;
22     char        mg_type;
23     U8          mg_flags;
24     SV*         mg_obj;
25     char*       mg_ptr;
26     I32         mg_len;
27 };
28
29 #define MGf_TAINTEDDIR 1
30 #define MGf_REFCOUNTED 2
31 #define MGf_GSKIP      4
32
33 #define MGf_MINMATCH   1
34
35 #define MgTAINTEDDIR(mg)        (mg->mg_flags & MGf_TAINTEDDIR)
36 #define MgTAINTEDDIR_on(mg)     (mg->mg_flags |= MGf_TAINTEDDIR)
37 #define MgTAINTEDDIR_off(mg)    (mg->mg_flags &= ~MGf_TAINTEDDIR)
38
39 #define MgPV(mg,lp)             (((lp = (mg)->mg_len) == HEf_SVKEY) ?   \
40                                  SvPV((SV*)((mg)->mg_ptr),lp) :         \
41                                  (mg)->mg_ptr)