-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
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
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.
-906c5c4082e30b7a0d07df89a42566461e2113507c5a0b339827ca0822b8fe84
\ No newline at end of file
+97e2c9621e3e01048e33da63ca4146ededa33cf6adefa996fa49b8c6a8d555b5
\ No newline at end of file
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.
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);