xref: /illumos-gate/usr/src/common/ficl/callback.c (revision afc2ba1d)
1*afc2ba1dSToomas Soome #include "ficl.h"
2*afc2ba1dSToomas Soome 
3*afc2ba1dSToomas Soome extern ficlSystem *ficlSystemGlobal;
4*afc2ba1dSToomas Soome 
5*afc2ba1dSToomas Soome /*
6*afc2ba1dSToomas Soome  * f i c l C a l l b a c k T e x t O u t
7*afc2ba1dSToomas Soome  * Feeds text to the vm's output callback
8*afc2ba1dSToomas Soome  */
9*afc2ba1dSToomas Soome void
ficlCallbackTextOut(ficlCallback * callback,char * text)10*afc2ba1dSToomas Soome ficlCallbackTextOut(ficlCallback *callback, char *text)
11*afc2ba1dSToomas Soome {
12*afc2ba1dSToomas Soome 	ficlOutputFunction textOut = NULL;
13*afc2ba1dSToomas Soome 
14*afc2ba1dSToomas Soome 	if (callback != NULL) {
15*afc2ba1dSToomas Soome 		if (callback->textOut != NULL)
16*afc2ba1dSToomas Soome 			textOut = callback->textOut;
17*afc2ba1dSToomas Soome 		else if ((callback->system != NULL) &&
18*afc2ba1dSToomas Soome 		    (callback != &(callback->system->callback))) {
19*afc2ba1dSToomas Soome 			ficlCallbackTextOut(&(callback->system->callback),
20*afc2ba1dSToomas Soome 			    text);
21*afc2ba1dSToomas Soome 			return;
22*afc2ba1dSToomas Soome 		}
23*afc2ba1dSToomas Soome 	}
24*afc2ba1dSToomas Soome 
25*afc2ba1dSToomas Soome 	if ((textOut == NULL) && (ficlSystemGlobal != NULL)) {
26*afc2ba1dSToomas Soome 		callback = &(ficlSystemGlobal->callback);
27*afc2ba1dSToomas Soome 		textOut = callback->textOut;
28*afc2ba1dSToomas Soome 	}
29*afc2ba1dSToomas Soome 
30*afc2ba1dSToomas Soome 	if (textOut == NULL)
31*afc2ba1dSToomas Soome 		textOut = ficlCallbackDefaultTextOut;
32*afc2ba1dSToomas Soome 
33*afc2ba1dSToomas Soome 	(textOut)(callback, text);
34*afc2ba1dSToomas Soome }
35*afc2ba1dSToomas Soome 
36*afc2ba1dSToomas Soome /*
37*afc2ba1dSToomas Soome  * f i c l C a l l b a c k E r r o r O u t
38*afc2ba1dSToomas Soome  * Feeds text to the vm's error output callback
39*afc2ba1dSToomas Soome  */
40*afc2ba1dSToomas Soome void
ficlCallbackErrorOut(ficlCallback * callback,char * text)41*afc2ba1dSToomas Soome ficlCallbackErrorOut(ficlCallback *callback, char *text)
42*afc2ba1dSToomas Soome {
43*afc2ba1dSToomas Soome 	ficlOutputFunction errorOut = NULL;
44*afc2ba1dSToomas Soome 
45*afc2ba1dSToomas Soome 	if (callback != NULL) {
46*afc2ba1dSToomas Soome 		if (callback->errorOut != NULL)
47*afc2ba1dSToomas Soome 			errorOut = callback->errorOut;
48*afc2ba1dSToomas Soome 		else if ((callback->system != NULL) &&
49*afc2ba1dSToomas Soome 		    (callback != &(callback->system->callback))) {
50*afc2ba1dSToomas Soome 			ficlCallbackErrorOut(&(callback->system->callback),
51*afc2ba1dSToomas Soome 			    text);
52*afc2ba1dSToomas Soome 			return;
53*afc2ba1dSToomas Soome 		}
54*afc2ba1dSToomas Soome 	}
55*afc2ba1dSToomas Soome 
56*afc2ba1dSToomas Soome 	if ((errorOut == NULL) && (ficlSystemGlobal != NULL)) {
57*afc2ba1dSToomas Soome 		callback = &(ficlSystemGlobal->callback);
58*afc2ba1dSToomas Soome 		errorOut = callback->errorOut;
59*afc2ba1dSToomas Soome 	}
60*afc2ba1dSToomas Soome 
61*afc2ba1dSToomas Soome 	if (errorOut == NULL) {
62*afc2ba1dSToomas Soome 		ficlCallbackTextOut(callback, text);
63*afc2ba1dSToomas Soome 		return;
64*afc2ba1dSToomas Soome 	}
65*afc2ba1dSToomas Soome 
66*afc2ba1dSToomas Soome 	(errorOut)(callback, text);
67*afc2ba1dSToomas Soome }
68