/* * This file was generated automatically by ExtUtils::ParseXS version 3.45 from the * contents of Project.xs. Do not edit this file, edit Project.xs instead. * * ANY CHANGES MADE HERE WILL BE LOST! * */ #line 1 "Project.xs" /* * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014 Racktop Systems. */ /* * Project.xs contains XS wrappers for the project database maniplulation * functions as provided by libproject and described in getprojent(3EXACCT). */ /* Solaris includes. */ #include #include #include #include #include #include /* Perl includes. */ #include "EXTERN.h" #if __GNUC__ >= 5 #include "perl.h" #else #define _Thread_local #include "perl.h" #undef _Thread_local #undef PERL_GET_CONTEXT #undef PERL_SET_CONTEXT #define PERL_GET_CONTEXT PTHREAD_GETSPECIFIC(PL_thr_key) #define PERL_SET_CONTEXT(t) Perl_set_context((void*)t) #endif #include "XSUB.h" /* * Convert and save a struct project on the perl XS return stack. * In a void context it returns nothing, in a scalar context it returns just * the name of the project and in a list context it returns a 6-element list * consisting of (name, projid, comment, users, groups, attr), where users and * groups are references to arrays containing the appropriate lists. */ static int pushret_project(const struct project *proj) { char **cp; AV *ary; dSP; if (GIMME_V == G_SCALAR) { EXTEND(SP, 1); PUSHs(sv_2mortal(newSVpv(proj->pj_name, 0))); PUTBACK; return (1); } else if (GIMME_V == G_ARRAY) { EXTEND(SP, 6); PUSHs(sv_2mortal(newSVpv(proj->pj_name, 0))); PUSHs(sv_2mortal(newSViv(proj->pj_projid))); PUSHs(sv_2mortal(newSVpv(proj->pj_comment, 0))); ary = newAV(); for (cp = proj->pj_users; *cp != NULL; cp++) { av_push(ary, newSVpv(*cp, 0)); } PUSHs(sv_2mortal(newRV_noinc((SV *)ary))); ary = newAV(); for (cp = proj->pj_groups; *cp != NULL; cp++) { av_push(ary, newSVpv(*cp, 0)); } PUSHs(sv_2mortal(newRV_noinc((SV *)ary))); PUSHs(sv_2mortal(newSVpv(proj->pj_attr, 0))); PUTBACK; return (6); } else { return (0); } } static int pwalk_cb(const projid_t project, void *walk_data) { int *nitemsp; dSP; nitemsp = (int *) walk_data; EXTEND(SP, 1); PUSHs(sv_2mortal(newSViv(project))); (*nitemsp)++; PUTBACK; return (0); } /* * The XS code exported to perl is below here. Note that the XS preprocessor * has its own commenting syntax, so all comments from this point on are in * that form. Note also that the PUTBACK; lines are necessary to synchronise * the local and global views of the perl stack before calling pushret_project, * as the code generated by the perl XS compiler twiddles with the stack on * entry to an XSUB. */ #line 108 "Project.c" #ifndef PERL_UNUSED_VAR # define PERL_UNUSED_VAR(var) if (0) var = var #endif #ifndef dVAR # define dVAR dNOOP #endif /* This stuff is not part of the API! You have been warned. */ #ifndef PERL_VERSION_DECIMAL # define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s) #endif #ifndef PERL_DECIMAL_VERSION # define PERL_DECIMAL_VERSION \ PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION) #endif #ifndef PERL_VERSION_GE # define PERL_VERSION_GE(r,v,s) \ (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s)) #endif #ifndef PERL_VERSION_LE # define PERL_VERSION_LE(r,v,s) \ (PERL_DECIMAL_VERSION <= PERL_VERSION_DECIMAL(r,v,s)) #endif /* XS_INTERNAL is the explicit static-linkage variant of the default * XS macro. * * XS_EXTERNAL is the same as XS_INTERNAL except it does not include * "STATIC", ie. it exports XSUB symbols. You probably don't want that * for anything but the BOOT XSUB. * * See XSUB.h in core! */ /* TODO: This might be compatible further back than 5.10.0. */ #if PERL_VERSION_GE(5, 10, 0) && PERL_VERSION_LE(5, 15, 1) # undef XS_EXTERNAL # undef XS_INTERNAL # if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING) # define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name) # define XS_INTERNAL(name) STATIC XSPROTO(name) # endif # if defined(__SYMBIAN32__) # define XS_EXTERNAL(name) EXPORT_C XSPROTO(name) # define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name) # endif # ifndef XS_EXTERNAL # if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus) # define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__) # define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__) # else # ifdef __cplusplus # define XS_EXTERNAL(name) extern "C" XSPROTO(name) # define XS_INTERNAL(name) static XSPROTO(name) # else # define XS_EXTERNAL(name) XSPROTO(name) # define XS_INTERNAL(name) STATIC XSPROTO(name) # endif # endif # endif #endif /* perl >= 5.10.0 && perl <= 5.15.1 */ /* The XS_EXTERNAL macro is used for functions that must not be static * like the boot XSUB of a module. If perl didn't have an XS_EXTERNAL * macro defined, the best we can do is assume XS is the same. * Dito for XS_INTERNAL. */ #ifndef XS_EXTERNAL # define XS_EXTERNAL(name) XS(name) #endif #ifndef XS_INTERNAL # define XS_INTERNAL(name) XS(name) #endif /* Now, finally, after all this mess, we want an ExtUtils::ParseXS * internal macro that we're free to redefine for varying linkage due * to the EXPORT_XSUB_SYMBOLS XS keyword. This is internal, use * XS_EXTERNAL(name) or XS_INTERNAL(name) in your code if you need to! */ #undef XS_EUPXS #if defined(PERL_EUPXS_ALWAYS_EXPORT) # define XS_EUPXS(name) XS_EXTERNAL(name) #else /* default to internal */ # define XS_EUPXS(name) XS_INTERNAL(name) #endif #ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE #define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params) /* prototype to pass -Wmissing-prototypes */ STATIC void S_croak_xs_usage(const CV *const cv, const char *const params); STATIC void S_croak_xs_usage(const CV *const cv, const char *const params) { const GV *const gv = CvGV(cv); PERL_ARGS_ASSERT_CROAK_XS_USAGE; if (gv) { const char *const gvname = GvNAME(gv); const HV *const stash = GvSTASH(gv); const char *const hvname = stash ? HvNAME(stash) : NULL; if (hvname) Perl_croak_nocontext("Usage: %s::%s(%s)", hvname, gvname, params); else Perl_croak_nocontext("Usage: %s(%s)", gvname, params); } else { /* Pants. I don't think that it should be possible to get here. */ Perl_croak_nocontext("Usage: CODE(0x%" UVxf ")(%s)", PTR2UV(cv), params); } } #undef PERL_ARGS_ASSERT_CROAK_XS_USAGE #define croak_xs_usage S_croak_xs_usage #endif /* NOTE: the prototype of newXSproto() is different in versions of perls, * so we define a portable version of newXSproto() */ #ifdef newXS_flags #define newXSproto_portable(name, c_impl, file, proto) newXS_flags(name, c_impl, file, proto, 0) #else #define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv) #endif /* !defined(newXS_flags) */ #if PERL_VERSION_LE(5, 21, 5) # define newXS_deffile(a,b) Perl_newXS(aTHX_ a,b,file) #else # define newXS_deffile(a,b) Perl_newXS_deffile(aTHX_ a,b) #endif #line 252 "Project.c" XS_EUPXS(XS_Sun__Solaris__Project_getprojid); /* prototype to pass -Wmissing-prototypes */ XS_EUPXS(XS_Sun__Solaris__Project_getprojid) { dVAR; dXSARGS; if (items != 0) croak_xs_usage(cv, ""); { projid_t RETVAL; dXSTARG; RETVAL = getprojid(); XSprePUSH; PUSHi((IV)RETVAL); } XSRETURN(1); } XS_EUPXS(XS_Sun__Solaris__Project_setproject); /* prototype to pass -Wmissing-prototypes */ XS_EUPXS(XS_Sun__Solaris__Project_setproject) { dVAR; dXSARGS; if (items != 3) croak_xs_usage(cv, "name, user_name, flags"); { const char * name = (const char *)SvPV_nolen(ST(0)) ; const char * user_name = (const char *)SvPV_nolen(ST(1)) ; uint_t flags = (uint_t)SvUV(ST(2)) ; int RETVAL; dXSTARG; RETVAL = setproject(name, user_name, flags); XSprePUSH; PUSHi((IV)RETVAL); } XSRETURN(1); } XS_EUPXS(XS_Sun__Solaris__Project_activeprojects); /* prototype to pass -Wmissing-prototypes */ XS_EUPXS(XS_Sun__Solaris__Project_activeprojects) { dVAR; dXSARGS; if (items != 0) croak_xs_usage(cv, ""); PERL_UNUSED_VAR(ax); /* -Wall */ SP -= items; { #line 160 "Project.xs" int nitems; #line 307 "Project.c" #line 162 "Project.xs" PUTBACK; nitems = 0; project_walk(&pwalk_cb, (void*)&nitems); XSRETURN(nitems); #line 313 "Project.c" PUTBACK; return; } } XS_EUPXS(XS_Sun__Solaris__Project_getprojent); /* prototype to pass -Wmissing-prototypes */ XS_EUPXS(XS_Sun__Solaris__Project_getprojent) { dVAR; dXSARGS; if (items != 0) croak_xs_usage(cv, ""); PERL_UNUSED_VAR(ax); /* -Wall */ SP -= items; { #line 170 "Project.xs" struct project proj, *projp; char buf[PROJECT_BUFSZ]; #line 332 "Project.c" #line 173 "Project.xs" PUTBACK; if ((projp = getprojent(&proj, buf, sizeof (buf)))) { XSRETURN(pushret_project(projp)); } else { XSRETURN_EMPTY; } #line 340 "Project.c" PUTBACK; return; } } XS_EUPXS(XS_Sun__Solaris__Project_setprojent); /* prototype to pass -Wmissing-prototypes */ XS_EUPXS(XS_Sun__Solaris__Project_setprojent) { dVAR; dXSARGS; if (items != 0) croak_xs_usage(cv, ""); { setprojent(); } XSRETURN_EMPTY; } XS_EUPXS(XS_Sun__Solaris__Project_endprojent); /* prototype to pass -Wmissing-prototypes */ XS_EUPXS(XS_Sun__Solaris__Project_endprojent) { dVAR; dXSARGS; if (items != 0) croak_xs_usage(cv, ""); { endprojent(); } XSRETURN_EMPTY; } XS_EUPXS(XS_Sun__Solaris__Project_getprojbyname); /* prototype to pass -Wmissing-prototypes */ XS_EUPXS(XS_Sun__Solaris__Project_getprojbyname) { dVAR; dXSARGS; if (items != 1) croak_xs_usage(cv, "name"); PERL_UNUSED_VAR(ax); /* -Wall */ SP -= items; { char * name = (char *)SvPV_nolen(ST(0)) ; #line 190 "Project.xs" struct project proj, *projp; char buf[PROJECT_BUFSZ]; #line 389 "Project.c" #line 193 "Project.xs" PUTBACK; if ((projp = getprojbyname(name, &proj, buf, sizeof (buf)))) { XSRETURN(pushret_project(projp)); } else { XSRETURN_EMPTY; } #line 397 "Project.c" PUTBACK; return; } } XS_EUPXS(XS_Sun__Solaris__Project_getprojbyid); /* prototype to pass -Wmissing-prototypes */ XS_EUPXS(XS_Sun__Solaris__Project_getprojbyid) { dVAR; dXSARGS; if (items != 1) croak_xs_usage(cv, "id"); PERL_UNUSED_VAR(ax); /* -Wall */ SP -= items; { projid_t id = (projid_t)SvIV(ST(0)) ; #line 204 "Project.xs" struct project proj, *projp; char buf[PROJECT_BUFSZ]; #line 418 "Project.c" #line 207 "Project.xs" PUTBACK; if ((projp = getprojbyid(id, &proj, buf, sizeof (buf)))) { XSRETURN(pushret_project(projp)); } else { XSRETURN_EMPTY; } #line 426 "Project.c" PUTBACK; return; } } XS_EUPXS(XS_Sun__Solaris__Project_getdefaultproj); /* prototype to pass -Wmissing-prototypes */ XS_EUPXS(XS_Sun__Solaris__Project_getdefaultproj) { dVAR; dXSARGS; if (items != 1) croak_xs_usage(cv, "user"); PERL_UNUSED_VAR(ax); /* -Wall */ SP -= items; { char * user = (char *)SvPV_nolen(ST(0)) ; #line 218 "Project.xs" struct project proj, *projp; char buf[PROJECT_BUFSZ]; #line 447 "Project.c" #line 221 "Project.xs" PUTBACK; if ((projp = getdefaultproj(user, &proj, buf, sizeof (buf)))) { XSRETURN(pushret_project(projp)); } else { XSRETURN_EMPTY; } #line 455 "Project.c" PUTBACK; return; } } XS_EUPXS(XS_Sun__Solaris__Project_fgetprojent); /* prototype to pass -Wmissing-prototypes */ XS_EUPXS(XS_Sun__Solaris__Project_fgetprojent) { dVAR; dXSARGS; if (items != 1) croak_xs_usage(cv, "fh"); PERL_UNUSED_VAR(ax); /* -Wall */ SP -= items; { FILE * fh = PerlIO_findFILE(IoIFP(sv_2io(ST(0)))) ; #line 232 "Project.xs" struct project proj, *projp; char buf[PROJECT_BUFSZ]; #line 476 "Project.c" #line 235 "Project.xs" PUTBACK; if ((projp = fgetprojent(fh, &proj, buf, sizeof (buf)))) { XSRETURN(pushret_project(projp)); } else { XSRETURN_EMPTY; } #line 484 "Project.c" PUTBACK; return; } } XS_EUPXS(XS_Sun__Solaris__Project_inproj); /* prototype to pass -Wmissing-prototypes */ XS_EUPXS(XS_Sun__Solaris__Project_inproj) { dVAR; dXSARGS; if (items != 2) croak_xs_usage(cv, "user, proj"); { char * user = (char *)SvPV_nolen(ST(0)) ; char * proj = (char *)SvPV_nolen(ST(1)) ; #line 247 "Project.xs" char buf[PROJECT_BUFSZ]; #line 504 "Project.c" bool RETVAL; #line 249 "Project.xs" RETVAL = inproj(user, proj, buf, sizeof (buf)); #line 508 "Project.c" ST(0) = boolSV(RETVAL); } XSRETURN(1); } XS_EUPXS(XS_Sun__Solaris__Project_getprojidbyname); /* prototype to pass -Wmissing-prototypes */ XS_EUPXS(XS_Sun__Solaris__Project_getprojidbyname) { dVAR; dXSARGS; if (items != 1) croak_xs_usage(cv, "proj"); PERL_UNUSED_VAR(ax); /* -Wall */ SP -= items; { char * proj = (char *)SvPV_nolen(ST(0)) ; #line 258 "Project.xs" int id; #line 528 "Project.c" int RETVAL; dXSTARG; #line 260 "Project.xs" if ((id = getprojidbyname(proj)) == -1) { XSRETURN_UNDEF; } else { XSRETURN_IV(id); } #line 537 "Project.c" PUTBACK; return; } } XS_EUPXS(XS_Sun__Solaris__Project_rctl_get_info); /* prototype to pass -Wmissing-prototypes */ XS_EUPXS(XS_Sun__Solaris__Project_rctl_get_info) { dVAR; dXSARGS; if (items != 1) croak_xs_usage(cv, "name"); PERL_UNUSED_VAR(ax); /* -Wall */ SP -= items; { char * name = (char *)SvPV_nolen(ST(0)) ; #line 279 "Project.xs" rctlblk_t *blk1 = NULL; rctlblk_t *blk2 = NULL; rctlblk_t *tmp = NULL; rctl_priv_t priv; rctl_qty_t value; int flags = 0; int ret; int err = 0; char string[24]; /* 24 will always hold a uint64_t */ #line 565 "Project.c" #line 289 "Project.xs" Newc(0, blk1, rctlblk_size(), char, rctlblk_t); if (blk1 == NULL) { err = 1; goto out; } Newc(1, blk2, rctlblk_size(), char, rctlblk_t); if (blk2 == NULL) { err = 1; goto out; } ret = getrctl(name, NULL, blk1, RCTL_FIRST); if (ret != 0) { err = 1; goto out; } priv = rctlblk_get_privilege(blk1); while (priv != RCPRIV_SYSTEM) { tmp = blk2; blk2 = blk1; blk1 = tmp; ret = getrctl(name, blk2, blk1, RCTL_NEXT); if (ret != 0) { err = 1; goto out; } priv = rctlblk_get_privilege(blk1); } value = rctlblk_get_value(blk1); flags = rctlblk_get_global_flags(blk1); ret = sprintf(string, "%llu", value); if (ret <= 0) { err = 1; } out: if (blk1) Safefree(blk1); if (blk2) Safefree(blk2); if (err) XSRETURN(0); XPUSHs(sv_2mortal(newSVpv(string, 0))); XPUSHs(sv_2mortal(newSViv(flags))); XSRETURN(2); #line 611 "Project.c" PUTBACK; return; } } XS_EUPXS(XS_Sun__Solaris__Project_pool_exists); /* prototype to pass -Wmissing-prototypes */ XS_EUPXS(XS_Sun__Solaris__Project_pool_exists) { dVAR; dXSARGS; if (items != 1) croak_xs_usage(cv, "name"); PERL_UNUSED_VAR(ax); /* -Wall */ SP -= items; { char * name = (char *)SvPV_nolen(ST(0)) ; #line 347 "Project.xs" pool_conf_t *conf; pool_t *pool; pool_status_t status; int fd; #line 634 "Project.c" #line 353 "Project.xs" /* * Determine if pools are enabled using /dev/pool directly, as * libpool may not be present. */ if (getzoneid() != GLOBAL_ZONEID) { XSRETURN_IV(1); } if ((fd = open("/dev/pool", O_RDONLY)) < 0) { XSRETURN_IV(1); } if (ioctl(fd, POOL_STATUSQ, &status) < 0) { (void) close(fd); XSRETURN_IV(1); } close(fd); if (status.ps_io_state != 1) { XSRETURN_IV(1); } /* * If pools are enabled, assume libpool is present. */ conf = pool_conf_alloc(); if (conf == NULL) { XSRETURN_IV(1); } if (pool_conf_open(conf, pool_dynamic_location(), PO_RDONLY)) { pool_conf_free(conf); XSRETURN_IV(1); } pool = pool_get_pool(conf, name); if (pool == NULL) { pool_conf_close(conf); pool_conf_free(conf); XSRETURN_IV(1); } pool_conf_close(conf); pool_conf_free(conf); XSRETURN_IV(0); #line 675 "Project.c" PUTBACK; return; } } #ifdef __cplusplus extern "C" #endif XS_EXTERNAL(boot_Sun__Solaris__Project); /* prototype to pass -Wmissing-prototypes */ XS_EXTERNAL(boot_Sun__Solaris__Project) { #if PERL_VERSION_LE(5, 21, 5) dVAR; dXSARGS; #else dVAR; dXSBOOTARGSXSAPIVERCHK; #endif #if PERL_VERSION_LE(5, 8, 999) /* PERL_VERSION_LT is 5.33+ */ char* file = __FILE__; #else const char* file = __FILE__; #endif PERL_UNUSED_VAR(file); PERL_UNUSED_VAR(cv); /* -W */ PERL_UNUSED_VAR(items); /* -W */ #if PERL_VERSION_LE(5, 21, 5) XS_VERSION_BOOTCHECK; # ifdef XS_APIVERSION_BOOTCHECK XS_APIVERSION_BOOTCHECK; # endif #endif (void)newXSproto_portable("Sun::Solaris::Project::getprojid", XS_Sun__Solaris__Project_getprojid, file, ""); (void)newXSproto_portable("Sun::Solaris::Project::setproject", XS_Sun__Solaris__Project_setproject, file, "$$$"); (void)newXSproto_portable("Sun::Solaris::Project::activeprojects", XS_Sun__Solaris__Project_activeprojects, file, ""); (void)newXSproto_portable("Sun::Solaris::Project::getprojent", XS_Sun__Solaris__Project_getprojent, file, ""); (void)newXSproto_portable("Sun::Solaris::Project::setprojent", XS_Sun__Solaris__Project_setprojent, file, ""); (void)newXSproto_portable("Sun::Solaris::Project::endprojent", XS_Sun__Solaris__Project_endprojent, file, ""); (void)newXSproto_portable("Sun::Solaris::Project::getprojbyname", XS_Sun__Solaris__Project_getprojbyname, file, "$"); (void)newXSproto_portable("Sun::Solaris::Project::getprojbyid", XS_Sun__Solaris__Project_getprojbyid, file, "$"); (void)newXSproto_portable("Sun::Solaris::Project::getdefaultproj", XS_Sun__Solaris__Project_getdefaultproj, file, "$"); (void)newXSproto_portable("Sun::Solaris::Project::fgetprojent", XS_Sun__Solaris__Project_fgetprojent, file, "$"); (void)newXSproto_portable("Sun::Solaris::Project::inproj", XS_Sun__Solaris__Project_inproj, file, "$$"); (void)newXSproto_portable("Sun::Solaris::Project::getprojidbyname", XS_Sun__Solaris__Project_getprojidbyname, file, "$"); (void)newXSproto_portable("Sun::Solaris::Project::rctl_get_info", XS_Sun__Solaris__Project_rctl_get_info, file, "$"); (void)newXSproto_portable("Sun::Solaris::Project::pool_exists", XS_Sun__Solaris__Project_pool_exists, file, "$"); /* Initialisation Section */ #line 108 "Project.xs" { HV *stash; char buf[128]; stash = gv_stashpv("Sun::Solaris::Project", TRUE); newCONSTSUB(stash, "MAXPROJID", newSViv(MAXPROJID)); newCONSTSUB(stash, "PROJNAME_MAX", newSViv(PROJNAME_MAX)); newCONSTSUB(stash, "PROJF_PATH", newSVpv(PROJF_PATH, sizeof (PROJF_PATH) - 1)); newCONSTSUB(stash, "PROJECT_BUFSZ", newSViv(PROJECT_BUFSZ)); newCONSTSUB(stash, "SETPROJ_ERR_TASK", newSViv(SETPROJ_ERR_TASK)); newCONSTSUB(stash, "SETPROJ_ERR_POOL", newSViv(SETPROJ_ERR_POOL)); newCONSTSUB(stash, "RCTL_GLOBAL_NOBASIC", newSViv(RCTL_GLOBAL_NOBASIC)); newCONSTSUB(stash, "RCTL_GLOBAL_LOWERABLE", newSViv(RCTL_GLOBAL_LOWERABLE)); newCONSTSUB(stash, "RCTL_GLOBAL_DENY_ALWAYS", newSViv(RCTL_GLOBAL_DENY_ALWAYS)); newCONSTSUB(stash, "RCTL_GLOBAL_DENY_NEVER", newSViv(RCTL_GLOBAL_DENY_NEVER)); newCONSTSUB(stash, "RCTL_GLOBAL_FILE_SIZE", newSViv(RCTL_GLOBAL_FILE_SIZE)); newCONSTSUB(stash, "RCTL_GLOBAL_CPU_TIME", newSViv(RCTL_GLOBAL_CPU_TIME)); newCONSTSUB(stash, "RCTL_GLOBAL_SIGNAL_NEVER", newSViv(RCTL_GLOBAL_SIGNAL_NEVER)); newCONSTSUB(stash, "RCTL_GLOBAL_INFINITE", newSViv(RCTL_GLOBAL_INFINITE)); newCONSTSUB(stash, "RCTL_GLOBAL_UNOBSERVABLE", newSViv(RCTL_GLOBAL_UNOBSERVABLE)); newCONSTSUB(stash, "RCTL_GLOBAL_BYTES", newSViv(RCTL_GLOBAL_BYTES)); newCONSTSUB(stash, "RCTL_GLOBAL_SECONDS", newSViv(RCTL_GLOBAL_SECONDS)); newCONSTSUB(stash, "RCTL_GLOBAL_COUNT", newSViv(RCTL_GLOBAL_COUNT)); sprintf(buf, "%llu", UINT64_MAX); newCONSTSUB(stash, "RCTL_MAX_VALUE", newSVpv(buf, strlen(buf))); } #line 767 "Project.c" /* End of Initialisation Section */ #if PERL_VERSION_LE(5, 21, 5) # if PERL_VERSION_GE(5, 9, 0) if (PL_unitcheckav) call_list(PL_scopestack_ix, PL_unitcheckav); # endif XSRETURN_YES; #else Perl_xs_boot_epilog(aTHX_ ax); #endif }