void __declspec()

in src/generic/log.c [1035:1103]


void __declspec(dllexport) LOG_MSG(Tcl_Interp * interp, int flag, char *filename, int linenr,
	     char *cmd, char *level, char *msg, ...)
{

    Tcl_Obj *errobj = NULL;
    Tcl_Obj *resobj = NULL;
#ifdef DEBUG
    Tcl_Obj *debugobj = NULL;
#endif
    char *msgpart = NULL;

    va_list ap;

    errobj = Tcl_NewObj();
    Tcl_IncrRefCount(errobj);

    resobj = Tcl_NewObj();
    Tcl_IncrRefCount(resobj);

    if (interp == NULL)
	Tcl_AppendToObj(errobj, "interp = null", -1);

#ifdef DEBUG
    debugobj = Tcl_NewIntObj(linenr);
    Tcl_IncrRefCount(debugobj);
    Tcl_AppendStringsToObj(errobj, "File:", filename,
			   ", Line:", Tcl_GetString(debugobj),
			   ", ", (char *) NULL);
#endif

    Tcl_AppendStringsToObj(errobj, cmd, ": ", msg, (char *) NULL);

    if (flag & SET_RESULT)
	Tcl_AppendStringsToObj(resobj, msg, NULL);

    for (va_start(ap, msg); (msgpart = va_arg(ap, char *)) != NULL;) {
	Tcl_AppendStringsToObj(errobj, msgpart, NULL);
	if (flag & SET_RESULT)
	    Tcl_AppendStringsToObj(resobj, msgpart, NULL);
    }

    va_end(ap);

    if (interp != NULL && (flag & WRITE_LOG)) {
	webLog(interp, level, Tcl_GetString(errobj));
    }

#ifdef WRITE_TO_STDOUT
    printf("%s\n", Tcl_GetString(errobj));
    fflush(stdout);
#endif

    if ((flag & INTERP_ERRORINFO) && (interp != NULL)) {
	char *errorInfo = (char *) Tcl_GetVar(interp, "errorInfo", TCL_GLOBAL_ONLY);
	if (errorInfo != NULL)
	    webLog(interp, WEBLOG_DEBUG, errorInfo);
	else
	    webLog(interp, WEBLOG_DEBUG, "panic: errorInfo not set");
    }

    if (flag & SET_RESULT)
	Tcl_SetObjResult(interp, resobj);

    Tcl_DecrRefCount(errobj);
    Tcl_DecrRefCount(resobj);	/* ok, ref count was incremented before */
#ifdef DEBUG
    Tcl_DecrRefCount(debugobj);
#endif
}