X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FSub-Op.git;a=blobdiff_plain;f=Op.xs;h=ecdac3a3cbfe578bfd3fc47bab22f6e25c41499a;hp=634ddc873f87e8297bf1dc030b9b1a32ba3730ed;hb=c987524f0641ca6a25d5e3072c9d1a2ecef2f57c;hpb=e6ff1534ace858986b43cfdbe20a3d86346a628b diff --git a/Op.xs b/Op.xs index 634ddc8..ecdac3a 100644 --- a/Op.xs +++ b/Op.xs @@ -113,6 +113,16 @@ typedef struct { #include "sub_op.h" +void sub_op_init(sub_op_config_t *c) { + c->name = NULL; + c->namelen = 0; + c->pp = 0; + c->check = 0; + c->ud = NULL; + + return; +} + void sub_op_register(pTHX_ const sub_op_config_t *c) { SV *key = newSViv(PTR2IV(c->pp)); @@ -136,6 +146,27 @@ void sub_op_register(pTHX_ const sub_op_config_t *c) { } } +sub_op_config_t *sub_op_dup(pTHX_ const sub_op_config_t *orig) { + sub_op_config_t *dupe = PerlMemShared_malloc(sizeof *dupe); + + dupe->namelen = orig->namelen; + dupe->name = PerlMemShared_malloc(dupe->namelen); + Copy(orig->name, dupe->name, dupe->namelen, char); + + dupe->pp = orig->pp; + dupe->check = orig->check; + dupe->ud = orig->ud; + + return dupe; +} + +void sub_op_free(pTHX_ sub_op_config_t *c) { + PerlMemShared_free((char *) c->name); + PerlMemShared_free(c); + + return; +} + /* --- Private helpers ----------------------------------------------------- */ STATIC IV so_hint(pTHX) {