Actually the logic truncates the data which exceeded the buffer. If the honor limit is set and the size exceeded, the EDIT_MakeFit will return TRUE. The following code after the EDIT_MakeFit will try to take limit to the buffer size.
+ /* Only replace or insert that many characters that can fit into the + edit control. Do this only if honor_limit is TRUE */ + if(honor_limit && strl > es->buffer_limit) + strl = es->buffer_limit - (tl - (e-s));
Krishna
-----Original Message----- From: Alexandre Julliard [mailto:julliard@winehq.org] Sent: Thursday, May 27, 2004 2:30 PM To: Krishna Murthy Cc: wine-devel@winehq.org Subject: Re: FW: Edit Paste operation does not behave same as MS Windows
Krishna Murthy Krishna.Murthy@guptaworldwide.com writes:
- Change log Entry:
EDIT_MakeFit should return TRUE when the honor_limit is set and paste buffer exceeds the limit. Also EDIT_EM_ReplaceSel should compute size which could fit in the edit control by truncating the extra characters to behave similar to MS Windows paste operation.
You are bypassing the reallocation of the buffer when the limit is exceeded, but still adding the data to the buffer. I don't think this will work right.
-- Alexandre Julliard julliard@winehq.org
Krishna Murthy Krishna.Murthy@guptaworldwide.com writes:
Actually the logic truncates the data which exceeded the buffer. If the honor limit is set and the size exceeded, the EDIT_MakeFit will return TRUE. The following code after the EDIT_MakeFit will try to take limit to the buffer size.
- /* Only replace or insert that many characters that can fit into the
- edit control. Do this only if honor_limit is TRUE */
- if(honor_limit && strl > es->buffer_limit)
strl = es->buffer_limit - (tl - (e-s));
That only takes into account the limit, not the current buffer size. It's very possible that you need to grow the buffer even when the limit is not exceeded. Also you only check the length of the inserted string against the limit, you should check the total resulting length instead.