X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Op.xs;h=d6dc30c3a9ebda75a9d9218b904bc1c2e58c89ec;hb=984cdc340cbc0920a576e89f27fe9ea3ea50feba;hp=17fa468fc11fad06ff19b269e215cdb9acdf4541;hpb=159088ccddecdea45fdae8093319b41c097adc86;p=perl%2Fmodules%2FSub-Op.git diff --git a/Op.xs b/Op.xs index 17fa468..d6dc30c 100644 --- a/Op.xs +++ b/Op.xs @@ -146,15 +146,23 @@ void sub_op_register(pTHX_ const sub_op_config_t *c, U32 flags) { } sub_op_config_t *sub_op_dup(pTHX_ const sub_op_config_t *orig) { + STRLEN len; 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); + len = orig->namelen; + if (orig->name) { + dupe->name = PerlMemShared_malloc(len + 1); + Copy(orig->name, dupe->name, len, char); + ((char *) dupe->name)[len] = '\0'; + } else { + dupe->name = NULL; + } + dupe->namelen = len; + - dupe->pp = orig->pp; - dupe->check = orig->check; - dupe->ud = orig->ud; + dupe->pp = orig->pp; + dupe->check = orig->check; + dupe->ud = orig->ud; return dupe; }