int putsCmdImpl()

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;
}