1void 2constant(sv) 3 PREINIT: 4#ifdef dXSTARG 5 dXSTARG; /* Faster if we have it. */ 6#else 7 dTARGET; 8#endif 9 STRLEN len; 10 int type; 11 IV iv; 12 /* NV nv; Uncomment this if you need to return NVs */ 13 const char *pv; 14 INPUT: 15 SV * sv; 16 const char * s = SvPV(sv, len); 17 PPCODE: 18 /* Change this to constant(aTHX_ s, len, &iv, &nv); 19 if you need to return both NVs and IVs */ 20 type = constant(aTHX_ s, len, &iv, &pv); 21 /* Return 1 or 2 items. First is error message, or undef if no error. 22 Second, if present, is found value */ 23 switch (type) { 24 case PERL_constant_NOTFOUND: 25 sv = sv_2mortal(newSVpvf("%s is not a valid Sys::Syslog macro", s)); 26 PUSHs(sv); 27 break; 28 case PERL_constant_NOTDEF: 29 sv = sv_2mortal(newSVpvf( 30 "Your vendor has not defined Sys::Syslog macro %s, used", s)); 31 PUSHs(sv); 32 break; 33 case PERL_constant_ISIV: 34 EXTEND(SP, 1); 35 PUSHs(&PL_sv_undef); 36 PUSHi(iv); 37 break; 38 /* Uncomment this if you need to return NOs 39 case PERL_constant_ISNO: 40 EXTEND(SP, 1); 41 PUSHs(&PL_sv_undef); 42 PUSHs(&PL_sv_no); 43 break; */ 44 /* Uncomment this if you need to return NVs 45 case PERL_constant_ISNV: 46 EXTEND(SP, 1); 47 PUSHs(&PL_sv_undef); 48 PUSHn(nv); 49 break; */ 50 case PERL_constant_ISPV: 51 EXTEND(SP, 1); 52 PUSHs(&PL_sv_undef); 53 PUSHp(pv, strlen(pv)); 54 break; 55 /* Uncomment this if you need to return PVNs 56 case PERL_constant_ISPVN: 57 EXTEND(SP, 1); 58 PUSHs(&PL_sv_undef); 59 PUSHp(pv, iv); 60 break; */ 61 /* Uncomment this if you need to return SVs 62 case PERL_constant_ISSV: 63 EXTEND(SP, 1); 64 PUSHs(&PL_sv_undef); 65 PUSHs(sv); 66 break; */ 67 /* Uncomment this if you need to return UNDEFs 68 case PERL_constant_ISUNDEF: 69 break; */ 70 /* Uncomment this if you need to return UVs 71 case PERL_constant_ISUV: 72 EXTEND(SP, 1); 73 PUSHs(&PL_sv_undef); 74 PUSHu((UV)iv); 75 break; */ 76 /* Uncomment this if you need to return YESs 77 case PERL_constant_ISYES: 78 EXTEND(SP, 1); 79 PUSHs(&PL_sv_undef); 80 PUSHs(&PL_sv_yes); 81 break; */ 82 default: 83 sv = sv_2mortal(newSVpvf( 84 "Unexpected return type %d while processing Sys::Syslog macro %s, used", 85 type, s)); 86 PUSHs(sv); 87 } 88