From: larrybr Date: Mon, 13 Nov 2023 12:53:47 +0000 (+0000) Subject: Slight cleanup of length-limited strpbrk() replacement, and eliminate strpbrk() call. X-Git-Tag: version-3.45.0~134^2~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c270dad95d64bf0ec66ae421d977532806db2edf;p=thirdparty%2Fsqlite.git Slight cleanup of length-limited strpbrk() replacement, and eliminate strpbrk() call. FossilOrigin-Name: 97e2c9621e3e01048e33da63ca4146ededa33cf6adefa996fa49b8c6a8d555b5 --- diff --git a/manifest b/manifest index 1769d0a02b..e985a98d08 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhance\sconsole_io\sto\spermit\semits\slimited\sin\svarious\sways,\ssuch\sas\svalid\sUTF-8,\supto\scontrol\schars,\sor\swith\scounted\slimits,\sall\sgetting\saway\sfrom\s0-termination\sas\sthe\ssole\slimit.\sIn\sCLI,\suse\sthis\scapability\sto\savoid\scertain\semit-chars-singly\sprocedures\sthat\swere\sbreaking\sup\sUTF-8\scharacters.\sThis\sfixes\sbroken\sjson\smode\soutput\s(on\sWindows)\sand\s(maybe)\sC-literal-like\semits. -D 2023-11-13T05:24:00.316 +C Slight\scleanup\sof\slength-limited\sstrpbrk()\sreplacement,\sand\seliminate\sstrpbrk()\scall. +D 2023-11-13T12:53:47.904 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -728,7 +728,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c d017bad7ba8e778617701a0e986fdeb393d67d6afa84fb28ef4e8b8ad2acf916 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 503331aca8785254a7bf3d74ab338a99118fa297e1184a4dde33b3cdf7a9d341 -F src/shell.c.in adb9a11d6c7c0d2260ad381468d22f4d0d68240a061e5553fce73e7e1ad40410 +F src/shell.c.in 0bc051f506f812be03351673aa206cc87cfac47ccc04e60191c984bb79e38265 F src/sqlite.h.in 4f841d3d117b830ee5ee45e8d89ceff1195f3ebb72d041ace8d116ba4c103b35 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54 @@ -2142,8 +2142,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P a731cdddbb99dbd3f9d1875cad5094239b78969c84fe4c56ecd63e33a5874e3f -R 1643036426e25a342daef2af41a2624b +P 906c5c4082e30b7a0d07df89a42566461e2113507c5a0b339827ca0822b8fe84 +R ea455f9417313759f4a37b1578d0b70c U larrybr -Z 98b08e37ed82f681bcbba6df6ae3a4d3 +Z 3d1eb938bb91a620d97eb2c42b47a7fe # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index ba0909751a..9359c7a103 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -906c5c4082e30b7a0d07df89a42566461e2113507c5a0b339827ca0822b8fe84 \ No newline at end of file +97e2c9621e3e01048e33da63ca4146ededa33cf6adefa996fa49b8c6a8d555b5 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 63ab46ad5a..bb542fd1c4 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -1819,18 +1819,22 @@ static void output_quoted_escaped_string(const char *z){ setTextMode(pfO, 1); } -/* Like strpbrk, but with an optional limit on search length. */ -static const char *anyOfInStr(const char *s, const char *zAny, i64 n){ - if( n<0 ) return strpbrk(s, zAny); - else{ - void *pcFirst = (void*)(s+(size_t)n); - while(*zAny){ - void *pc = memchr(s, *zAny&0xff, n); - if( pc && pc < pcFirst ) pcFirst = pc; - ++zAny; +/* +** Find earliest of chars within s specified in zAny. +** With ns == ~0, is like strpbrk(s,zAny) and s must be 0-terminated. +*/ +static const char *anyOfInStr(const char *s, const char *zAny, size_t ns){ + if( ns == ~0 ) ns = strlen(s); + const char *pcFirst = 0; + while(*zAny){ + const char *pc = (const char*)memchr(s, *zAny&0xff, ns); + if( pc ){ + pcFirst = pc; + ns = pcFirst - s; } - return (const char*)(((const char*)pcFirst < s+(size_t)n)? pcFirst : 0); + ++zAny; } + return pcFirst; } /* ** Output the given string as a quoted according to C or TCL quoting rules. @@ -1844,7 +1848,7 @@ static void output_c_string(const char *z){ char cbsSay; oputz(zq); while( *z!=0 ){ - char *pcDQBSRO = strpbrk(z, zDQBSRO); + const char *pcDQBSRO = anyOfInStr(z, zDQBSRO, ~0); const char *pcPast = z + fPutbUtf8(0, z, INT_MAX, ctrlMask); const char *pcEnd = (pcDQBSRO && pcDQBSRO < pcPast)? pcDQBSRO : pcPast; if( pcEnd > z ) oPutbUtf8(z, (int)(pcEnd-z), 0);