int logToChannel()

in src/generic/logtochannel.c [155:195]


int logToChannel(Tcl_Interp * interp, ClientData clientData, char *msg)
{

    LogToChannelData *logToChannelData;
    int res;

    if ((interp == NULL) || (clientData == NULL) || (msg == NULL))
	return TCL_ERROR;

    logToChannelData = (LogToChannelData *) clientData;

    /* get channel every time, as it might have been closed
       and this can only be detected that way */
    if (logToChannelData->channelName != NULL) {
      int mode;
      Tcl_Channel channel = NULL;
      channel = Tcl_GetChannel(interp, logToChannelData->channelName, &mode);
      
      if (channel == NULL) {
	return TCL_ERROR;
      }

      if (!(mode & TCL_WRITABLE)) {
	return TCL_ERROR;
      }
      
      /* No seek function because it might well not exist, and we ought
       * to be at the end anyway. */

      res = Tcl_WriteChars(channel, msg, -1);
      if (res < 0)
	return TCL_ERROR;
      if (logToChannelData->isBuffered == TCL_ERROR)
	return Tcl_Flush(channel);

      return TCL_OK;

    } else {
      return TCL_ERROR;
    }
}