示例#1
0
文件: free.c 项目: SICOM/rlib
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;
}
示例#2
0
文件: util.c 项目: SICOM/rlib
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 "&amp;" */
		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;
}
示例#3
0
文件: environment.c 项目: gplv2/rlib
void rlib_php_free(rlib *r) {
	efree(ENVIRONMENT(r));
}