Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


On Thu, 28 Nov 2013 16:02:06 +0000
Caolán McNamara <caolanm@redhat.com> wrote:

So now UniString is gone we have the chance to make use of OUString for
= 64k paragraphs (#i17171#) but we basically have to decide what to do
with places that currently return STRING_LEN/STRING_MAXLEN in xub_Strlen
(unsigned short). Do we want to return -1 or SAL_MAX_INT32 as the
replacement. -1 is "nice" but there is so much code in existence that
expects the error/boundary condition return value to be > any valid
number that I reckon SAL_MAX_INT32 might be safer as the default.

For a concrete place see OutputDevice::GetTextBreak where STRING_LEN is
returned for the boundary case. See also grepping for STRING_LEN in sw
and think mass search/replace STRING_LEN SAL_MAX_INT32 :-)

For reference, I attach the trivial patches to remove the 16bit length
limits in writer that stop anything larger that 0xFFFF entering it which
are the final bits to be applied once everything else is done.

C.

I'm (slowly) working on this in sw and, from what I 've seen up to now, sometimes 
STRING_LEN/STRING_MAXLEN are used just as an upper bound for some following code, while sometimes 
they report an error condition.
Even if I really would like this conversion process being completed quickly, I can't see a mass 
search/replace as a safe solution. Deciding the right value to be used on a case by case basis is 
also difficult since it involves looking at a lot of (sometimes obscure) code but it has two 
advantages:
* finally separating error from boundary conditions
* incremental work should be easier to debug/fix
If a mass replacement is chosen as the way to go, I would suggest to choose SAL_MAX_INT32.

Cheers
Matteo

PS: in some code also sal_uInt32 was used as an "extentended" xub_StrLen: I was planning to ask on 
the ML for hints about a class that does that and then interfaces with OUStrings, sadly I can't 
remember its name at this moment.

PPS: in order to further improve code clarity and maintainability, I was also thinking about 
introducing a

class OUString
{
[...]
static sal_Int32 maxLength() {return SAL_MAX_INT32;}
};

I can provide a patch, in case this is seen as a good idea.

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.