@@ -1540,7 +1540,7 @@ extern DEFTYPE_API ITypeInfo *makeUnicodeType(unsigned len, IAtom * locale)
15401540 else
15411541 {
15421542 if (isUnknownLength (len))
1543- ret = new CUnicodeTypeInfo (UNKNOWN_LENGTH , locale);
1543+ ret = new CUnicodeTypeInfo (len , locale);
15441544 else
15451545 ret = new CUnicodeTypeInfo (len*2 , locale);
15461546 utt->setValue (key, ret);
@@ -1565,7 +1565,7 @@ extern DEFTYPE_API ITypeInfo *makeVarUnicodeType(unsigned len, IAtom * locale)
15651565 else
15661566 {
15671567 if (isUnknownLength (len))
1568- ret = new CVarUnicodeTypeInfo (UNKNOWN_LENGTH , locale);
1568+ ret = new CVarUnicodeTypeInfo (len , locale);
15691569 else
15701570 ret = new CVarUnicodeTypeInfo ((len+1 )*2 , locale);
15711571 vutt->setValue (key, ret);
@@ -1589,7 +1589,7 @@ extern DEFTYPE_API ITypeInfo *makeUtf8Type(unsigned len, IAtom * locale)
15891589 else
15901590 {
15911591 if (isUnknownLength (len))
1592- ret = new CUtf8TypeInfo (UNKNOWN_LENGTH , locale);
1592+ ret = new CUtf8TypeInfo (len , locale);
15931593 else
15941594 ret = new CUtf8TypeInfo (len*4 , locale);
15951595 u8tt->setValue (key, ret);
@@ -3026,6 +3026,18 @@ ICharsetInfo * getAsciiCharset()
30263026
30273027ITypeInfo * getStretchedType (unsigned newLen, ITypeInfo * type)
30283028{
3029+ #ifdef PRESERVE_STRETCHED_MODIFIERS
3030+ // This code is not currently used, but preserved as a reminder that it might be needed in future.
3031+ if (type->queryModifier () != typemod_none)
3032+ {
3033+ ITypeInfo * srcType = type->queryTypeBase ();
3034+ ITypeInfo * stretchedType = getStretchedType (newLen, srcType);
3035+ if (stretchedType == srcType)
3036+ return LINK (type);
3037+ return cloneModifier (type, stretchedType);
3038+ }
3039+ #endif
3040+
30293041 switch (type->getTypeCode ())
30303042 {
30313043 case type_string:
@@ -3065,6 +3077,8 @@ ITypeInfo * getMaxLengthType(ITypeInfo * type)
30653077 case type_utf8:
30663078 case type_qstring:
30673079 case type_data:
3080+ if (isUnknownLength (type->getStringLen ()))
3081+ return LINK (type);
30683082 return getStretchedType (UNKNOWN_LENGTH, type);
30693083 default :
30703084 return LINK (type);
@@ -3328,6 +3342,25 @@ ITypeInfo * replaceChildType(ITypeInfo * type, ITypeInfo * newChild)
33283342 return cloneModifiers (type, newType);
33293343}
33303344
3345+ bool canOverrideStringLength (type_t tc)
3346+ {
3347+ switch (tc)
3348+ {
3349+ case type_string:
3350+ case type_unicode:
3351+ case type_utf8:
3352+ case type_qstring:
3353+ case type_data:
3354+ return true ;
3355+ }
3356+ return false ;
3357+ }
3358+
3359+ bool canOverrideStringLength (ITypeInfo * type)
3360+ {
3361+ return canOverrideStringLength (type->getTypeCode ());
3362+ }
3363+
33313364// ---------------------------------------------------------------------------
33323365extern DEFTYPE_API ICharsetInfo * deserializeCharsetInfo (MemoryBuffer &src)
33333366{
0 commit comments