void trset_end (void) { client_connection_t * cli = GET_IMMEDIATE_CLIENT_OR_NULL; char *report_linebuf; char *report_ptr; char *line; caddr_t ret; report_linebuf = (char *) THR_ATTR (THREAD_CURRENT_THREAD, TA_REPORT_BUFFER); report_ptr = (char *) THR_ATTR (THREAD_CURRENT_THREAD, TA_REPORT_PTR); if (report_ptr > report_linebuf) { *report_ptr = 0; line = box_dv_short_string (report_linebuf); bif_result_inside_bif (1, line); dk_free_box (line); } dk_free_box (report_linebuf); if (cli && !cli->cli_ws && !cli->cli_resultset_comp_ptr) { ret = list (2, (caddr_t) QA_PROC_RETURN, (caddr_t) 0); PrpcAddAnswer ((caddr_t) ret, DV_ARRAY_OF_POINTER, PARTIAL, 0); dk_free_box (ret); } SET_THR_ATTR (THREAD_CURRENT_THREAD, TA_REPORT_BUFFER, NULL); SET_THR_ATTR (THREAD_CURRENT_THREAD, TA_REPORT_PTR, NULL); SET_THR_ATTR (THREAD_CURRENT_THREAD, TA_REPORT_QST, NULL); }
void trset_printf (const char *str, ...) { char *report_linebuf; char *report_ptr; char *line; char *eol; char *copy; va_list ap; size_t length; report_linebuf = (char *) THR_ATTR (THREAD_CURRENT_THREAD, TA_REPORT_BUFFER); report_ptr = (char *) THR_ATTR (THREAD_CURRENT_THREAD, TA_REPORT_PTR); va_start (ap, str); vsnprintf (report_ptr, REPORT_BUF_MAX - (report_linebuf - report_ptr), str, ap); va_end (ap); for (line = eol = report_linebuf; *line; line = eol) { if ((eol = strchr (line, '\n')) == NULL) break; *eol++ = 0; if (line[0] == 0) line = " "; copy = box_dv_short_string (line); bif_result_inside_bif (1, copy); dk_free_box (copy); } if (eol == NULL) { length = strlen (line); if (report_linebuf != line && length >= 0) memmove (report_linebuf, line, length); } else length = 0; report_ptr = report_linebuf + length; if (length > REPORT_BUF_MAX - EXPLAIN_LINE_MAX) { caddr_t copy = box_dv_short_string (report_linebuf); bif_result_inside_bif (1, copy); dk_free_box (copy); report_ptr = report_linebuf; } SET_THR_ATTR (THREAD_CURRENT_THREAD, TA_REPORT_BUFFER, report_linebuf); SET_THR_ATTR (THREAD_CURRENT_THREAD, TA_REPORT_PTR, report_ptr); }
static MonoThread * get_mono_thread () { #ifndef MONO_AGENT thread_t *thr = THREAD_CURRENT_THREAD; MonoThread *ret_thr = NULL; if (NULL == (ret_thr = (MonoThread *) THR_ATTR (thr, TA_MONO_THREAD))) { ret_thr = mono_thread_attach (virtuoso_domain); SET_THR_ATTR (thr, TA_MONO_THREAD, ret_thr); } return ret_thr; #else return NULL; #endif }