DLL_EXPORT_SYM gint rlib_free(rlib *r) { int i; rlib_charencoder_free(r->output_encoder); g_free(r->output_encoder_name); rlib_free_results_and_queries(r); rlib_free_tree(r); xmlCleanupParser(); for (i = 0; i < r->inputs_count; i++) { rlib_charencoder_free(r->inputs[i].input->info.encoder); r->inputs[i].input->input_close(r->inputs[i].input); r->inputs[i].input->free(r->inputs[i].input); if (r->inputs[i].handle != NULL) g_module_close(r->inputs[i].handle); g_free(r->inputs[i].name); } if (r->did_execute && OUTPUT(r)) { OUTPUT(r)->free(r); } ENVIRONMENT(r)->free(r); g_hash_table_destroy(r->output_parameters); g_hash_table_destroy(r->input_metadata); g_hash_table_destroy(r->parameters); rlib_free_follower(r); g_free(r->special_locale); g_free(r->current_locale); g_free(r); return 0; }
static void local_rlogit(rlib *r, const gchar *message) { if(r != NULL && r->html_debugging) { ENVIRONMENT(r)->rlib_write_output("<p><b>RLIB Error:</b> ", strlen("<p><b>RLIB Error:</b> ")); /* escape '&','<','>' as HTML character entities */ char *htmlEncoded=(char *)malloc(strlen(message)*5+1); /* 5 times the original length is the worst-case-scenario: replacing '&' with "&" */ guint i; int h = 0; for (i = 0; i < strlen(message); ++i) { switch(message[i]) { case '&': htmlEncoded[h++]='&'; htmlEncoded[h++]='a'; htmlEncoded[h++]='m'; htmlEncoded[h++]='p'; htmlEncoded[h++]=';'; break; case '<': htmlEncoded[h++]='&'; htmlEncoded[h++]='l'; htmlEncoded[h++]='t'; htmlEncoded[h++]=';'; break; case '>': htmlEncoded[h++]='&'; htmlEncoded[h++]='g'; htmlEncoded[h++]='t'; htmlEncoded[h++]=';'; break; default: htmlEncoded[h++]=message[i]; } } htmlEncoded[h]=0; ENVIRONMENT(r)->rlib_write_output((char *)htmlEncoded, strlen(htmlEncoded)); free(htmlEncoded); ENVIRONMENT(r)->rlib_write_output("</p>", strlen("</p>")); } fputs(message, stderr); return; }
void rlib_php_free(rlib *r) { efree(ENVIRONMENT(r)); }