diff options
Diffstat (limited to 'generic/tclEncoding.c')
| -rw-r--r-- | generic/tclEncoding.c | 18 | 
1 files changed, 11 insertions, 7 deletions
| diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c index 0fa6661..d246cb2 100644 --- a/generic/tclEncoding.c +++ b/generic/tclEncoding.c @@ -182,6 +182,7 @@ TCL_DECLARE_MUTEX(encodingMutex)  static Tcl_Encoding defaultEncoding;  static Tcl_Encoding systemEncoding; +Tcl_Encoding tclIdentityEncoding;  /*   * The following variable is used in the sparse matrix code for a @@ -270,7 +271,7 @@ static int		Iso88591ToUtfProc(ClientData clientData,  			    int *dstCharsPtr);  /* - * A Tcl_ObjType for holding a cached Tcl_Encoding in the otherValuePtr field + * A Tcl_ObjType for holding a cached Tcl_Encoding in the twoPtrValue.ptr1 field   * of the intrep. This should help the lifetime of encodings be more useful.   * See concerns raised in [Bug 1077262].   */ @@ -313,7 +314,7 @@ Tcl_GetEncodingFromObj(  	    return TCL_ERROR;  	}  	TclFreeIntRep(objPtr); -	objPtr->internalRep.otherValuePtr = encoding; +	objPtr->internalRep.twoPtrValue.ptr1 = encoding;  	objPtr->typePtr = &encodingType;      }      *encodingPtr = Tcl_GetEncoding(NULL, name); @@ -334,7 +335,7 @@ static void  FreeEncodingIntRep(      Tcl_Obj *objPtr)  { -    Tcl_FreeEncoding(objPtr->internalRep.otherValuePtr); +    Tcl_FreeEncoding(objPtr->internalRep.twoPtrValue.ptr1);      objPtr->typePtr = NULL;  } @@ -353,7 +354,7 @@ DupEncodingIntRep(      Tcl_Obj *srcPtr,      Tcl_Obj *dupPtr)  { -    dupPtr->internalRep.otherValuePtr = Tcl_GetEncoding(NULL, srcPtr->bytes); +    dupPtr->internalRep.twoPtrValue.ptr1 = Tcl_GetEncoding(NULL, srcPtr->bytes);  }  /* @@ -567,7 +568,7 @@ TclInitEncodingSubsystem(void)      type.freeProc	= NULL;      type.nullSize	= 1;      type.clientData	= NULL; -    Tcl_CreateEncoding(&type); +    tclIdentityEncoding = Tcl_CreateEncoding(&type);      type.encodingName	= "utf-8";      type.toUtfProc	= UtfExtToUtfIntProc; @@ -651,6 +652,7 @@ TclFinalizeEncodingSubsystem(void)      Tcl_MutexLock(&encodingMutex);      encodingsInitialized = 0;      FreeEncoding(systemEncoding); +    FreeEncoding(tclIdentityEncoding);      hPtr = Tcl_FirstHashEntry(&encodingTable, &search);      while (hPtr != NULL) { @@ -1542,7 +1544,8 @@ OpenEncodingFileChannel(      }      if ((NULL == chan) && (interp != NULL)) { -	Tcl_AppendResult(interp, "unknown encoding \"", name, "\"", NULL); +	Tcl_SetObjResult(interp, Tcl_ObjPrintf( +		"unknown encoding \"%s\"", name));  	Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "ENCODING", name, NULL);      }      Tcl_DecrRefCount(fileNameObj); @@ -1616,7 +1619,8 @@ LoadEncodingFile(  	break;      }      if ((encoding == NULL) && (interp != NULL)) { -	Tcl_AppendResult(interp, "invalid encoding file \"", name, "\"", NULL); +	Tcl_SetObjResult(interp, Tcl_ObjPrintf( +		"invalid encoding file \"%s\"", name));  	Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "ENCODING", name, NULL);      }      Tcl_Close(NULL, chan); | 
