in src/generic/varchannel.c [43:97]
int varchannelInputProc(ClientData clientData,
char *buf, int bufSize, int *errorCodePtr)
{
char *str = NULL;
int strLen = 0;
int remains = 0;
VarChannel *varChannel = NULL;
int isNew = 0;
Tcl_Obj *var = NULL;
if ((clientData == NULL) || (buf == NULL))
return -1;
varChannel = (VarChannel *) clientData;
if (varChannel->varName == NULL)
return -1;
/* --------------------------------------------------------------------------
* get var
* ----------------------------------------------------------------------- */
var = Web_GetOrCreateGlobalVar(varChannel->interp,
varChannel->varName, &isNew);
if (var == NULL)
return -1;
if (isNew)
varChannel->readCursor = 0;
/* str = Tcl_GetStringFromObj(var,&strLen); */
str = (char *) Tcl_GetByteArrayFromObj(var, &strLen);
if (varChannel->readCursor < strLen) {
remains = strLen - varChannel->readCursor;
if (bufSize < remains) {
strncpy(buf, &(str[varChannel->readCursor]), bufSize);
varChannel->readCursor += bufSize;
if (isNew)
Tcl_DecrRefCount(var);
return bufSize;
}
else {
strncpy(buf, &(str[varChannel->readCursor]), remains);
varChannel->readCursor += remains;
if (isNew)
Tcl_DecrRefCount(var);
return remains;
}
}
if (isNew)
Tcl_DecrRefCount(var);
return 0;
}