diff options
author | dkf <donal.k.fellows@manchester.ac.uk> | 2005-11-22 11:32:35 (GMT) |
---|---|---|
committer | dkf <donal.k.fellows@manchester.ac.uk> | 2005-11-22 11:32:35 (GMT) |
commit | d8d6f63a208246d2f1b9366a3c009b0438e84e28 (patch) | |
tree | a90c2e014e2a1d92cda19a88347eaa9f722e56f2 /generic | |
parent | f0d62bb7554a60f4229c29e7f8bcd6150fb3a044 (diff) | |
download | tk-d8d6f63a208246d2f1b9366a3c009b0438e84e28.zip tk-d8d6f63a208246d2f1b9366a3c009b0438e84e28.tar.gz tk-d8d6f63a208246d2f1b9366a3c009b0438e84e28.tar.bz2 |
Backport of fixes for [Bug 1353414]
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tkSelect.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/generic/tkSelect.c b/generic/tkSelect.c index d62aa43..73e41d8 100644 --- a/generic/tkSelect.c +++ b/generic/tkSelect.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkSelect.c,v 1.13 2003/01/14 19:24:56 jenglish Exp $ + * RCS: @(#) $Id: tkSelect.c,v 1.13.2.1 2005/11/22 11:32:37 dkf Exp $ */ #include "tkInt.h" @@ -1489,29 +1489,32 @@ TkSelDefaultSelection(infoPtr, target, buffer, maxBytes, typePtr) if (target == dispPtr->targetsAtom) { register TkSelHandler *selPtr; - CONST char *atomString; - int length, atomLength; + int length; + Tcl_DString ds; if (maxBytes < 50) { return -1; } - strcpy(buffer, "MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW"); - length = strlen(buffer); + Tcl_DStringInit(&ds); + Tcl_DStringAppend(&ds, + "MULTIPLE TARGETS TIMESTAMP TK_APPLICATION TK_WINDOW", -1); for (selPtr = winPtr->selHandlerList; selPtr != NULL; selPtr = selPtr->nextPtr) { if ((selPtr->selection == infoPtr->selection) && (selPtr->target != dispPtr->applicationAtom) && (selPtr->target != dispPtr->windowAtom)) { - atomString = Tk_GetAtomName((Tk_Window) winPtr, + CONST char *atomString = Tk_GetAtomName((Tk_Window) winPtr, selPtr->target); - atomLength = strlen(atomString) + 1; - if ((length + atomLength) >= maxBytes) { - return -1; - } - sprintf(buffer+length, " %s", atomString); - length += atomLength; + Tcl_DStringAppendElement(&ds, atomString); } } + length = Tcl_DStringLength(&ds); + if (length >= maxBytes) { + Tcl_DStringFree(&ds); + return -1; + } + memcpy(buffer, Tcl_DStringValue(&ds), (unsigned) (1+length)); + Tcl_DStringFree(&ds); *typePtr = XA_ATOM; return length; } |