in src/generic/weboutint.c [478:540]
int putsCmdImpl(Tcl_Interp * interp, ResponseObj * responseObj, Tcl_Obj * str)
{
Tcl_Obj *sendString = NULL;
long bytesSent = 0;
Tcl_Channel channel;
Tcl_DString translation;
/* --------------------------------------------------------------------------
* sanity
* ----------------------------------------------------------------------- */
if ((responseObj == NULL) || (str == NULL))
return TCL_ERROR;
/* printf("DBG putsCmdImpl - got '%s'\n",Tcl_GetString(str)); fflush(stdout); */
channel = getChannel(interp, responseObj);
if (channel == NULL)
return TCL_ERROR;
sendString = Tcl_NewObj();
Tcl_IncrRefCount(sendString);
if (responseObj->sendHeader) {
responseObj->headerHandler(interp, responseObj, sendString);
}
Tcl_AppendObjToObj(sendString, str);
/* make sure there is no additional newline translation */
Tcl_DStringInit(&translation);
Tcl_GetChannelOption(interp, channel, "-translation", &translation);
Tcl_SetChannelOption(interp, channel, "-translation", "lf");
if ((bytesSent = Tcl_WriteObj(channel, sendString)) == -1) {
LOG_MSG(interp, WRITE_LOG | SET_RESULT,
__FILE__, __LINE__,
"web::put", WEBLOG_ERROR,
"error writing to response object:",
Tcl_GetStringResult(interp), NULL);
Tcl_DecrRefCount(sendString);
Tcl_SetChannelOption(interp, channel, "-translation", Tcl_DStringValue(&translation));
Tcl_DStringFree(&translation);
return TCL_ERROR;
}
Tcl_SetChannelOption(interp, channel, "-translation", Tcl_DStringValue(&translation));
Tcl_DStringFree(&translation);
responseObj->bytesSent += bytesSent;
/* flush varchannel */
if (responseObj->name != NULL) {
char *channelName = Tcl_GetString(responseObj->name);
if (channelName != NULL)
if (channelName[0] == '#')
Tcl_Flush(channel);
}
Tcl_DecrRefCount(sendString);
return TCL_OK;
}