From a9dddaa86c84f3b6667d04529d938c8b524f14db Mon Sep 17 00:00:00 2001 From: Nuno Cruces Date: Thu, 19 Oct 2023 15:28:46 +0100 Subject: [PATCH] Optimize VFS search. --- embed/sqlite3.wasm | Bin 1452903 -> 1452931 bytes sqlite3/vfs.c | 25 ++++++++++-------- vfs/tests/mptest/testdata/mptest.wasm.bz2 | 4 +-- .../speedtest1/testdata/speedtest1.wasm.bz2 | 4 +-- 4 files changed, 18 insertions(+), 15 deletions(-) diff --git a/embed/sqlite3.wasm b/embed/sqlite3.wasm index 6db87582c137db7b276d88e4c06262b8fc129c9c..9361e4e672d4573735c7e502bacd84122bfba6b1 100755 GIT binary patch delta 1738 zcma)6O=u)V6t1fNsp{(PnNG4<#8r6Rn+&-Kf{??)nt8#Q(SxA3)teWUp3^LgCrJnP zkfVrT=d>*BQ5QrHYrGh5Mv<5W^(Nj_P>@B%gUkB8o@CaG;LNoM(q&AR9P3%-rj;*kFr;OQ+j~cT zaz18L%RZZFWpkBc2jBLU{iW4Q_a9f~3b}BHR!Ebt;f)95+iym+k`^yl@hBX!Eo~O3 z6tmh?$~2@osw>;x_`R({jl)W+-21 zHCb_1#`0!{IPw6&_eZ&+K3^PTv8?Md!Q1*IH@uDvG$nGT>hs}S-Dz&0{?fa~*2qvc zip7STjdBAM0V1V>^|eE`Z*VfBqUQb#MjvYWHHX)(R$TzOee_{$$R0LgiN+v8hnQmC zn&gVN$~X&B(Xk$fjYK~f=OLEMSTdbr!vH9H!4Eq8JR_T_RHcHDqts({NhwN^Y(!A| zx+^pJV#E*d31*_wbrmDQQ7#3I7hA|JuDQXkUg%0Uukl%}r3lkrpp1@FKDZGfrl8o) zBXCA#QOZC47L|$oVU)#aTA1Ron70ogsB!rBf&WX#5%^yln#?3gp%cy5S=3-McEC!8!f`x8qdUQM=)XdVA7zHg72*8 z?lGlA=21qE;xm51lsLv2SKt2ka7Smu4JR_VWZ}RgPy4r5a$v#Aggm+0 zp-lsOg|t}6Ar?|nf;=?@+QAC7gJXX|yLS87Kh;E}WLiM_u1ryhEI@SFjHv5bB;|-? zvbEfcf;aycAI$M`sr-li_V;6d;vC3IF(vI+U;BM++gDHg+6y48^aOJzd3g?}Wi0ti z1#nM+EZy96H(B?j&ve2*83tIu8RQ~N@$F|n^qyOzptA>sO(`TVwhiT2Fg*NZy@rc) fZ*tc|Qb-2LAw5VRQb3j<%a9ewxjU1)tMt-8<^4JW delta 1696 zcma)6J!~9B6yBNLotfL&xm(*Yf1!A@{*fCb5RnTc%Qq2sM}rVuprDCF&|bBXMTNW; zDO@5NHdPcUB}9s#2&Ta$j)W3N0ywcx>0f6OUgD~&p4d4I z`rXj0DXYSura^eD8B`(JxmtD@oPOppJS6WVumO++$R1$nusv~6*!DV)E$f;f#tA2| zK6VL~EiAdP)C&@ZtY`c6&VH7Z$|DAfEQ)ND5`c!HpD{;^Lx9!I3CWZTRum)EoZC zL5hPU?Cm|}GX%flUD&&2I32wKTKw|;haam6xL1UIQN!fVUEjFyRm%=;-ZHk-8!{>t zx3MEY*IrU*&}hK5Li1@*Ttsb|Qb~nB13q@Iy2#GLu^)%PIf+eq4vX28MfmL?r92c> zaT5d&BF}9@8OnOHTfYL&o$>0-n8Kqk*qG+VF^mz|QBi}S7AVm7d09EC={hoT0&tj& zDr`;Qd3{oY1CDE-4C7%CzSl9aYX?$o5EkPFHo$m=)0^)AZ;H3Ti&I_7^9WKS!5IVC zJElweUce~81ut_#bb*)@zRv^R8=b-09@l^}BbcOyouHCz-+2+;qb0-R$kRvqlwWYg zfdSN1w=vu1bhcBN&sb-=xg~`FTq5;X7V!&btjxlfO^xz_`VpW<{%sY0{-(#h)7azD z_hu8lA&bJmjUr8;18-kG4@f%XmG5;U!rFXO;{vluIl{{Px_pckR~wjD&9A zx}Uw+7>c-aX^6W@7%wOVm%$c8DQaG(oN>y-EBLBod-;FuX=~6ccu-vAS{!i zec|cFC)+zaOBYsf;lm|#xQ7$6>|RoV1tSukuU2tm?q7bGK`bPPI7lBdfE17g$RcD3 Ma_;Wshs*TFKL+zM$p8QV diff --git a/sqlite3/vfs.c b/sqlite3/vfs.c index 0819de3..fb67b27 100644 --- a/sqlite3/vfs.c +++ b/sqlite3/vfs.c @@ -90,22 +90,25 @@ int localtime_s(struct tm *const pTm, time_t const *const pTime) { sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName) { if (zVfsName) { static sqlite3_vfs *go_vfs_list; - sqlite3_vfs *found = NULL; - for (sqlite3_vfs **next = &go_vfs_list; *next;) { - sqlite3_vfs *it = *next; + + for (sqlite3_vfs *it = go_vfs_list; it; it = it->pNext) { + if (!strcmp(zVfsName, it->zName) && go_vfs_find(it->zName)) { + return it; + } + } + + for (sqlite3_vfs **ptr = &go_vfs_list; *ptr;) { + sqlite3_vfs *it = *ptr; if (go_vfs_find(it->zName)) { - if (!strcmp(zVfsName, it->zName)) found = it; - next = &it->pNext; + ptr = &it->pNext; } else { - *next = it->pNext; + *ptr = it->pNext; free(it); } } - if (found) { - return found; - } + if (go_vfs_find(zVfsName)) { - sqlite3_vfs *prev = go_vfs_list; + sqlite3_vfs *head = go_vfs_list; go_vfs_list = malloc(sizeof(sqlite3_vfs) + strlen(zVfsName) + 1); char *name = (char *)(go_vfs_list + 1); strcpy(name, zVfsName); @@ -114,7 +117,7 @@ sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName) { .szOsFile = sizeof(struct go_file), .mxPathname = 512, .zName = name, - .pNext = prev, + .pNext = head, .xOpen = go_open_wrapper, .xDelete = go_delete, diff --git a/vfs/tests/mptest/testdata/mptest.wasm.bz2 b/vfs/tests/mptest/testdata/mptest.wasm.bz2 index 659d11f..db9b87e 100644 --- a/vfs/tests/mptest/testdata/mptest.wasm.bz2 +++ b/vfs/tests/mptest/testdata/mptest.wasm.bz2 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:816ddd36a255d2b3995f75924bdebd9dc7c4378eeccbe28176751434cfb788ca -size 508404 +oid sha256:da493a827d5b2985ba80d7425092a891311633d6c80c559119f87609d0f0e02a +size 508796 diff --git a/vfs/tests/speedtest1/testdata/speedtest1.wasm.bz2 b/vfs/tests/speedtest1/testdata/speedtest1.wasm.bz2 index df2fa97..d7f1fa2 100644 --- a/vfs/tests/speedtest1/testdata/speedtest1.wasm.bz2 +++ b/vfs/tests/speedtest1/testdata/speedtest1.wasm.bz2 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c0c551f14aeb338ab652f2bded33ba58188b76f2cb24ca076576c968341f841e -size 523315 +oid sha256:c5ffb1dc0f046bb7e4ea4cd992e1d625c05c7d5cf33c78edc5a2155eb3d3c097 +size 523393