mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-26 16:33:45 +01:00 
			
		
		
		
	* Ansi2UnicodeMove:
- Avoid calling Utf8ToUnicode with only three parameters, as this is not reliable if the ansitring contains embedded #0 chars. Use explicit high(SizeUInt) or allocated length explicitly. - Change destLen type to SizeUInt. * UpperAnsiString, LowerAnsiString: Also avoid call to Utf8ToUnicode with only three parameters. Change type of slen and ulen local variables to SizeUInt. * CompareStrAnsiString: Fix sign of return value if l2=0 (was returning negative value) git-svn-id: trunk@38972 -
This commit is contained in:
		
							parent
							
								
									b557bc5627
								
							
						
					
					
						commit
						dfcb34aef2
					
				| @ -303,7 +303,7 @@ end; | ||||
| procedure Ansi2UnicodeMove(source:PAnsiChar; cp:TSystemCodePage; var dest:UnicodeString; len:SizeInt); | ||||
| var | ||||
|   locMap : punicodemap; | ||||
|   destLen : SizeInt; | ||||
|   destLen : SizeUInt; | ||||
| begin | ||||
|   if (len<=0) then | ||||
|     begin | ||||
| @ -313,12 +313,12 @@ begin | ||||
| 
 | ||||
|   if (cp=CP_UTF8) then | ||||
|     begin | ||||
|       destLen:=Utf8ToUnicode(nil,source,len); | ||||
|       destLen:=Utf8ToUnicode(nil,high(SizeUint),source,len); | ||||
|       if destLen > 0 then | ||||
|         SetLength(dest,destLen-1) | ||||
|       else | ||||
|         SetLength(dest,0); | ||||
|       Utf8ToUnicode(@dest[1],source,len); | ||||
|       Utf8ToUnicode(@dest[1],destLen,source,len); | ||||
|       exit; | ||||
|     end; | ||||
|   if (cp=CP_UTF16) then | ||||
| @ -521,13 +521,12 @@ end; | ||||
| function UpperAnsiString(const s : ansistring) : ansistring; | ||||
| var | ||||
|   p        : PAnsiChar; | ||||
|   i, slen, | ||||
|   resindex : SizeInt; | ||||
|   i,resindex : SizeInt; | ||||
|   mblen    : SizeInt; | ||||
|   us,usl   : UnicodeString; | ||||
|   locMap   : punicodemap; | ||||
|   ulen,k, | ||||
|   aalen,ai : SizeInt; | ||||
|   ulen,slen : SizeUint; | ||||
|   k,aalen,ai : SizeInt; | ||||
|   aa       : array[0..8] of AnsiChar; | ||||
| begin | ||||
|   if (Length(s)=0) then | ||||
| @ -535,14 +534,14 @@ begin | ||||
|   if (DefaultSystemCodePage=CP_UTF8) then | ||||
|     begin | ||||
|       //convert to UnicodeString,uppercase,convert back to utf8 | ||||
|       ulen:=Utf8ToUnicode(nil,@s[1],Length(s)); | ||||
|       ulen:=Utf8ToUnicode(nil,high(SizeUint),@s[1],Length(s)); | ||||
|       if ulen>0 then | ||||
|         SetLength(us,ulen-1); | ||||
|       Utf8ToUnicode(@us[1],@s[1],Length(s)); | ||||
|       Utf8ToUnicode(@us[1],ulen,@s[1],Length(s)); | ||||
|       us:=UpperUnicodeString(us); | ||||
| 
 | ||||
|       ulen:=Length(us); | ||||
|       slen:=UnicodeToUtf8(nil,0,@us[1],ulen); | ||||
|       slen:=UnicodeToUtf8(nil,high(SizeUInt),@us[1],ulen); | ||||
|       SetLength(Result,slen); | ||||
|       UnicodeToUtf8(@Result[1],slen,@us[1],ulen); | ||||
|       exit; | ||||
| @ -588,13 +587,12 @@ end; | ||||
| function LowerAnsiString(const s : ansistring) : ansistring; | ||||
| var | ||||
|   p        : PAnsiChar; | ||||
|   i, slen, | ||||
|   resindex : SizeInt; | ||||
|   i,resindex : SizeInt; | ||||
|   mblen    : SizeInt; | ||||
|   us,usl   : UnicodeString; | ||||
|   locMap   : punicodemap; | ||||
|   ulen,k, | ||||
|   aalen,ai : SizeInt; | ||||
|   k,aalen,ai : SizeInt; | ||||
|   slen, ulen : SizeUInt; | ||||
|   aa       : array[0..8] of AnsiChar; | ||||
| begin | ||||
|   if (Length(s)=0) then | ||||
| @ -602,14 +600,14 @@ begin | ||||
|   if (DefaultSystemCodePage=CP_UTF8) then | ||||
|     begin | ||||
|       //convert to UnicodeString,lowercase,convert back to utf8 | ||||
|       ulen:=Utf8ToUnicode(nil,@s[1],Length(s)); | ||||
|       ulen:=Utf8ToUnicode(nil,high(SizeUInt),@s[1],Length(s)); | ||||
|       if ulen>0 then | ||||
|         SetLength(us,ulen-1); | ||||
|       Utf8ToUnicode(@us[1],@s[1],Length(s)); | ||||
|       Utf8ToUnicode(@us[1],ulen,@s[1],Length(s)); | ||||
|       us:=LowerUnicodeString(us); | ||||
| 
 | ||||
|       ulen:=Length(us); | ||||
|       slen:=UnicodeToUtf8(nil,0,@us[1],ulen); | ||||
|       slen:=UnicodeToUtf8(nil,high(SizeUInt),@us[1],ulen); | ||||
|       SetLength(Result,slen); | ||||
|       UnicodeToUtf8(@Result[1],slen,@us[1],ulen); | ||||
|       exit; | ||||
| @ -735,13 +733,8 @@ begin | ||||
|     exit(0); | ||||
|   l1:=Length(S1); | ||||
|   l2:=Length(S2); | ||||
|   if (l1=0) then begin | ||||
|     if (l2=0) then | ||||
|       exit(0); | ||||
|     exit(-l2); | ||||
|   end; | ||||
|   if (l2=0) then | ||||
|     exit(-l1); | ||||
|   if (l1=0) or (l2=0) then | ||||
|     exit(l1-l2); | ||||
|   Result := InternalCompareStrAnsiString(@S1[1],@S2[1],l1,l2); | ||||
| end; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 pierre
						pierre