search for: xmlnewnod

Displaying 2 results from an estimated 2 matches for "xmlnewnod".

Did you mean: xmlnewnode
2015 Nov 23
4
Custom C finalizers for .Call
...ing the .Call procedure, but these are rare. A lot of C code in packages might become safer and cleaner if authors would have an option to let this be automated. The most general feature would a hook for adding custom C functions to the .Call exit, similar to on.exit() in R: xmlNodePtr *node = xmlNewNode(...); Rf_on_exit(xmlFreeNode, node); EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(...); Rf_on_exit(EVP_PKEY_CTX_free, ctx); SEXP out = PROTECT(allocVector(...)); Rf_on_exit(UNPROTECT, 1); I don't know R's internals well enough to estimate if something like this would be possible. I did...
2015 Nov 25
0
Custom C finalizers for .Call
...ould write a macro to make this one-liner) my_context_t* c = (my_context_t*) R_Calloc(1, my_context_t); SEXP res = PROTECT(R_MakeExternalPtr(c, R_NilValue, R_NilValue)); R_RegisterCFinalizer(res, context_fin); // do all work here ... you safely abort at any point without memory leaks c->node = xmlNewNode(...); c->ctx = EVP_PKEY_CTX_new(...); [...] The point of using a finalizer is that no matter what happens the memory is always released. The structure with all allocations is protected until you unprotect it or there is any interrupt/error. Since all regular R rules apply, you can also assign...