mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-14 00:22:38 +03:00
Fix the %c substitution in printf() so that it works with unicode characters.
FossilOrigin-Name: c35be1d9e9132fbadc74d207c1088e5a710a151c0835c38a63bf3c8e6fd711a0
This commit is contained in:
12
manifest
12
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Make\sthe\salternate-form-2\sflag\s("!")\schange\sthe\smeaning\sof\swidth\sand\sprecision\nfrom\sbytes\sto\scharacters\sfor\sthe\s%q,\s%Q,\sand\s%w\sextensions\sof\sprintf().
|
C Fix\sthe\s%c\ssubstitution\sin\sprintf()\sso\sthat\sit\sworks\swith\sunicode\scharacters.
|
||||||
D 2018-02-19T18:03:10.959
|
D 2018-02-19T18:56:52.191
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F Makefile.in 7a3f714b4fcf793108042b7b0a5c720b0b310ec84314d61ba7f3f49f27e550ea
|
F Makefile.in 7a3f714b4fcf793108042b7b0a5c720b0b310ec84314d61ba7f3f49f27e550ea
|
||||||
@@ -484,7 +484,7 @@ F src/pcache1.c 716975564c15eb6679e97f734cec1bfd6c16ac3d4010f05f1f8e509fc7d19880
|
|||||||
F src/pragma.c bea56df3ae0637768c0da4fbbb8f2492f780980d95000034a105ff291bf7ca69
|
F src/pragma.c bea56df3ae0637768c0da4fbbb8f2492f780980d95000034a105ff291bf7ca69
|
||||||
F src/pragma.h bb83728944b42f6d409c77f5838a8edbdb0fe83046c5496ffc9602b40340a324
|
F src/pragma.h bb83728944b42f6d409c77f5838a8edbdb0fe83046c5496ffc9602b40340a324
|
||||||
F src/prepare.c 259f4e7960c47082c9653f3d5f0c294abd68bb9c3aab86de7630700cba1c20fb
|
F src/prepare.c 259f4e7960c47082c9653f3d5f0c294abd68bb9c3aab86de7630700cba1c20fb
|
||||||
F src/printf.c ab91b63394bf07a430af0c644f8e42ca136c015e2533544f585dab8b0a408b84
|
F src/printf.c 721a26a112e895ec7c7388fab9e8a1eb1c3fe55493cd14a19eb26ffd8ea9798e
|
||||||
F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
|
F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
|
||||||
F src/resolve.c bbee7e31d369a18a2f4836644769882e9c5d40ef4a3af911db06410b65cb3730
|
F src/resolve.c bbee7e31d369a18a2f4836644769882e9c5d40ef4a3af911db06410b65cb3730
|
||||||
F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac
|
F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac
|
||||||
@@ -1707,7 +1707,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P ca31c6630422fca70e626dd38aae96296bd8535d491ca52391624a5e7e663636
|
P 391540acbea34eb88c75b1152b458d8936b3fdfff47633b9ec897775b015ba4c
|
||||||
R d4aa6a8346f9339a7533b828b4137a72
|
R 71fe5339e526e4b9a6fb2ef9bc7b6d4e
|
||||||
U drh
|
U drh
|
||||||
Z bc6f530d4e962e8540ac43cd25813033
|
Z 27f720e6a7a3028447e586595bfbe60c
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
391540acbea34eb88c75b1152b458d8936b3fdfff47633b9ec897775b015ba4c
|
c35be1d9e9132fbadc74d207c1088e5a710a151c0835c38a63bf3c8e6fd711a0
|
||||||
38
src/printf.c
38
src/printf.c
@@ -624,9 +624,37 @@ void sqlite3VXPrintf(
|
|||||||
case etCHARX:
|
case etCHARX:
|
||||||
if( bArgList ){
|
if( bArgList ){
|
||||||
bufpt = getTextArg(pArgList);
|
bufpt = getTextArg(pArgList);
|
||||||
c = bufpt ? bufpt[0] : 0;
|
length = 0;
|
||||||
|
if( bufpt ){
|
||||||
|
buf[0] = c = *(bufpt++);
|
||||||
|
length = 1;
|
||||||
|
if( (c&0xc0)==0xc0 ){
|
||||||
|
while( length<4 && (bufpt[0]&0xc0)==0x80 ){
|
||||||
|
buf[length++] = *(bufpt++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
c = va_arg(ap,int);
|
unsigned int ch = va_arg(ap,unsigned int);
|
||||||
|
if( ch<0x00080 ){
|
||||||
|
buf[0] = ch & 0xff;
|
||||||
|
length = 1;
|
||||||
|
}else if( ch<0x00800 ){
|
||||||
|
buf[0] = 0xc0 + (u8)((ch>>6)&0x1f);
|
||||||
|
buf[1] = 0x80 + (u8)(ch & 0x3f);
|
||||||
|
length = 2;
|
||||||
|
}else if( ch<0x10000 ){
|
||||||
|
buf[0] = 0xe0 + (u8)((ch>>12)&0x0f);
|
||||||
|
buf[1] = 0x80 + (u8)((ch>>6) & 0x3f);
|
||||||
|
buf[2] = 0x80 + (u8)(ch & 0x3f);
|
||||||
|
length = 3;
|
||||||
|
}else{
|
||||||
|
buf[0] = 0xf0 + (u8)((ch>>18) & 0x07);
|
||||||
|
buf[1] = 0x80 + (u8)((ch>>12) & 0x3f);
|
||||||
|
buf[2] = 0x80 + (u8)((ch>>6) & 0x3f);
|
||||||
|
buf[3] = 0x80 + (u8)(ch & 0x3f);
|
||||||
|
length = 4;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if( precision>1 ){
|
if( precision>1 ){
|
||||||
width -= precision-1;
|
width -= precision-1;
|
||||||
@@ -634,10 +662,10 @@ void sqlite3VXPrintf(
|
|||||||
sqlite3AppendChar(pAccum, width-1, ' ');
|
sqlite3AppendChar(pAccum, width-1, ' ');
|
||||||
width = 0;
|
width = 0;
|
||||||
}
|
}
|
||||||
sqlite3AppendChar(pAccum, precision-1, c);
|
while( precision-- > 1 ){
|
||||||
|
sqlite3StrAccumAppend(pAccum, buf, length);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
length = 1;
|
|
||||||
buf[0] = c;
|
|
||||||
bufpt = buf;
|
bufpt = buf;
|
||||||
break;
|
break;
|
||||||
case etSTRING:
|
case etSTRING:
|
||||||
|
|||||||
Reference in New Issue
Block a user