Fossil SCM

Use strspn() to improve the performance of validate16().

drh 2019-09-12 16:51 trunk
Commit c550d6e0215e33e5e42916aebb742e837c41d311c09247dbacafb14cad9244cc
1 file changed +3
--- src/encode.c
+++ src/encode.c
@@ -646,10 +646,13 @@
646646
** If any invalid characters appear in the string, return false.
647647
*/
648648
int validate16(const char *zIn, int nIn){
649649
int i;
650650
if( nIn<0 ) nIn = (int)strlen(zIn);
651
+ if( zIn[nIn]==0 ){
652
+ return strspn(zIn,"0123456789abcdefABCDEF")==nIn;
653
+ }
651654
for(i=0; i<nIn; i++, zIn++){
652655
if( zDecode[zIn[0]&0xff]>63 ){
653656
return zIn[0]==0;
654657
}
655658
}
656659
--- src/encode.c
+++ src/encode.c
@@ -646,10 +646,13 @@
646 ** If any invalid characters appear in the string, return false.
647 */
648 int validate16(const char *zIn, int nIn){
649 int i;
650 if( nIn<0 ) nIn = (int)strlen(zIn);
 
 
 
651 for(i=0; i<nIn; i++, zIn++){
652 if( zDecode[zIn[0]&0xff]>63 ){
653 return zIn[0]==0;
654 }
655 }
656
--- src/encode.c
+++ src/encode.c
@@ -646,10 +646,13 @@
646 ** If any invalid characters appear in the string, return false.
647 */
648 int validate16(const char *zIn, int nIn){
649 int i;
650 if( nIn<0 ) nIn = (int)strlen(zIn);
651 if( zIn[nIn]==0 ){
652 return strspn(zIn,"0123456789abcdefABCDEF")==nIn;
653 }
654 for(i=0; i<nIn; i++, zIn++){
655 if( zDecode[zIn[0]&0xff]>63 ){
656 return zIn[0]==0;
657 }
658 }
659

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button