[ruby-core:82748] [Ruby trunk Feature#13873] Optimize Dir.glob with FNM_EXTGLOB

From: pdahorek@...
Date: 2017-09-11 14:07:19 UTC
List: ruby-core #82748
SXNzdWUgIzEzODczIGhhcyBiZWVuIHVwZGF0ZWQgYnkgYWhvcmVrIChQYXZlbCBSb3NpY2vDvSku
CgoKdmVyeSBuaWNlIGltcHJvdmVtZW50IQoKaG93ZXZlciB0aGlzIG9uZSBzaG91bGQgYmUgaGFu
ZGxlZCBldmVuIGlmIHRoaXMgcGF0dGVybiBtYWtlcyBubyBzZW5zZQoKfn5+CkRpclsnYzovdGVz
dHtjOi90ZXN0fXsuaHRtbH0nXQpFcnJubzo6RUlOVkFMOiBJbnZhbGlkIGFyZ3VtZW50IC0gYzov
dGVzdGM6Cn5+fgoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRmVh
dHVyZSAjMTM4NzM6IE9wdGltaXplIERpci5nbG9iIHdpdGggRk5NX0VYVEdMT0IKaHR0cHM6Ly9i
dWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzEzODczI2NoYW5nZS02NjYwNQoKKiBBdXRob3I6IG5h
cnVzZSAoWXVpIE5BUlVTRSkKKiBTdGF0dXM6IE9wZW4KKiBQcmlvcml0eTogTm9ybWFsCiogQXNz
aWduZWU6IAoqIFRhcmdldCB2ZXJzaW9uOiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQpSYWlscyBvZnRlbiBxdWVyaWVzIERpci5nbG9iIHdpdGggY29tcGxleCBwYXR0
ZXJuLgoKT24gYWNjZXNzaW5nIFJhaWxzIHNpdGUsIGl0IGNhbGxzIGdsb2IgYXMgZm9sbG93cyBv
biBxdWVyeWluZyB0ZW1wbGF0ZXMuCk5vdGUgdGhhdCBEaXJbXSBpbnNpc3RzIEZpbGU6OkZOTV9F
WFRHTE9CLgoKYGBgcnVieQogICAgICBkZWYgZmluZF90ZW1wbGF0ZV9wYXRocyhxdWVyeSkKICAg
ICAgICBEaXJbcXVlcnldLnVuaXEucmVqZWN0IGRvIHxmaWxlbmFtZXwKICAgICAgICAgIEZpbGUu
ZGlyZWN0b3J5PyhmaWxlbmFtZSkgfHwKICAgICAgICAgICAgIyBkZWFscyB3aXRoIGNhc2UtaW5z
ZW5zaXRpdmUgZmlsZSBzeXN0ZW1zLgogICAgICAgICAgICAhRmlsZS5mbm1hdGNoKHF1ZXJ5LCBm
aWxlbmFtZSwgRmlsZTo6Rk5NX0VYVEdMT0IpCiAgICAgICAgZW5kCiAgICAgIGVuZApgYGAKaHR0
cHM6Ly9naXRodWIuY29tL3JhaWxzL3JhaWxzL2Jsb2IvNmYxYzE4MzA4ZWJmZmM5N2Q1MTQ0MGNk
ZWVkN2JlNzFkZTU4ZjI2YS9hY3Rpb252aWV3L2xpYi9hY3Rpb25fdmlldy90ZW1wbGF0ZS9yZXNv
bHZlci5yYiNMMjQ3CgpGb3IgZXhhbXBsZSBvbiBhY2Nlc3NpbmcgaW5kZXggcGFnZSBvZiBQb3N0
IE1vZGVsICgvcG9zdHMpLCBpdCBjYWxscyBmb2xsb3dpbmcgZ2xvYjoKRGlyWyIvaG9tZS9uYXJ1
c2UvZm9vL2FwcC92aWV3cy9wb3N0cy9pbmRleHsuZW4sfXsuaHRtbCwudGV4dCwuanMsLmNzcywu
aWNzLC5jc3YsLnZjZiwucG5nLC5qcGVnLC5naWYsLmJtcCwudGlmZiwuc3ZnLC5tcGVnLC54bWws
LnJzcywuYXRvbSwueWFtbCwubXVsdGlwYXJ0X2Zvcm0sLnVybF9lbmNvZGVkX2Zvcm0sLmpzb24s
LnBkZiwuemlwLC5nemlwLH17fXsucmF3LC5lcmIsLmh0bWwsLmJ1aWxkZXIsLnJ1YnksLmNvZmZl
ZSwuamJ1aWxkZXIsfSJdJwoKSXQgY2FsbHMgbWFueSBzdGF0IGFzIGZvbGxvd3M6CmBgYAolIHN1
ZG8gc3RyYWNlIC4vbWluaXJ1Ynk1ODg4MiAtZSdEaXJbIi9ob21lL25hcnVzZS9mb28vYXBwL3Zp
ZXdzL3Bvc3RzL2luZGV4ey5lbix9ey5odG1sLC50ZXh0LC5qcywuY3NzLC5pY3MsLmNzdiwudmNm
LC5wbmcsLmpwZWcsLmdpZiwuYm1wLC50aWZmLC5zdmcsLm1wZWcsLnhtbCwucnNzLC5hdG9tLC55
YW1sLC5tdWx0aXBhcnRfZm9ybSwudXJsX2VuY29kZWRfZm9ybSwuanNvbiwucGRmLC56aXAsLmd6
aXAsfXt9ey5yYXcsLmVyYiwuaHRtbCwuYnVpbGRlciwucnVieSwuY29mZmVlLC5qYnVpbGRlcix9
Il0nfCZncmVwIG5ld2ZzdGF0YXR8d2MgLWwKNDAwCmBgYAoKQmVjYXVzZSBjdXJyZW50IGdsb2Ig
aW1wbGVtZW50YXRpb24gaGFuZGxlcyBicmFjZXMgaW4gZWFybHkgc3RhZ2UsCnRoZW4gY2FsbHMg
c3RhdCBmb3IgZWFjaCBjb21iaW5hdGlvbiBvZiBicmFjZSBwYXR0ZXJucyBpbnN0ZWFkIG9mIHVz
aW5nIHJlYWRkaXIgcmVzdWx0cy4KCkJlbG93IGlzIGEgcGF0Y2ggdG8gdXNlIHJlYWRkaXIgaW5z
dGVhZCBvZiBodW5kcmVkcyBvZiBzeXNjYWxscy4KTm90ZSB0aGF0IHRoaXMgcGF0Y2ggY2hhbmdl
cyB0aGUgb3JkZXIgb2YgdGhlIHJlc3VsdCBhcyBmb2xsb3dzOgoKYGBgCiAgMSkgRmFpbHVyZToK
VGVzdERpciN0ZXN0X2dsb2IgWy9ob21lL25hcnVzZS9ydWJ5L3Rlc3QvcnVieS90ZXN0X2Rpci5y
YjoxNTddOgo8WyIvdG1wL3Rlc3QtYWxsL19fdGVzdF9kaXJfXzIwMTcwOTA2LTg2MjAta2E4eXF1
L319e30iLAogIi90bXAvdGVzdC1hbGwvX190ZXN0X2Rpcl9fMjAxNzA5MDYtODYyMC1rYTh5cXUv
fX1hIl0+IGV4cGVjdGVkIGJ1dCB3YXMKPFsiL3RtcC90ZXN0LWFsbC9fX3Rlc3RfZGlyX18yMDE3
MDkwNi04NjIwLWthOHlxdS99fWEiLAogIi90bXAvdGVzdC1hbGwvX190ZXN0X2Rpcl9fMjAxNzA5
MDYtODYyMC1rYTh5cXUvfX17fSJdPi4KYGBgCgpgYGAKZGlmZiAtLWdpdCBhL2Rpci5jIGIvZGly
LmMKaW5kZXggYjdhZmFlYzRlMC4uN2NhODRmYThjNSAxMDA2NDQKLS0tIGEvZGlyLmMKKysrIGIv
ZGlyLmMKQEAgLTI5MCw2ICsyOTAsOCBAQCBicmFja2V0KAogI2RlZmluZSBVTkVTQ0FQRShwKSAo
ZXNjYXBlICYmICoocCkgPT0gJ1xcJyA/IChwKSArIDEgOiAocCkpCiAjZGVmaW5lIElTRU5EKHAp
ICghKihwKSB8fCAocGF0aG5hbWUgJiYgKihwKSA9PSAnLycpKQogI2RlZmluZSBSRVRVUk4odmFs
KSByZXR1cm4gKnBjdXIgPSBwLCAqc2N1ciA9IHMsICh2YWwpOworI2RlZmluZSBGTk1BVENIX0FM
TE9DX04odHlwZSwgbikgKCh0eXBlICopbWFsbG9jKHNpemVvZih0eXBlKSAqIChuKSkpCisjZGVm
aW5lIEZOTUFUQ0hfRlJFRShwdHIpIGZyZWUocHRyKQogCiBzdGF0aWMgaW50CiBmbm1hdGNoX2hl
bHBlcigKQEAgLTM0OCw2ICszNTAsNTYgQEAgZm5tYXRjaF9oZWxwZXIoCiAJICAgIH0KIAkgICAg
Z290byBmYWlsZWQ7CiAJICB9CisKKwkgIGNhc2UgJ3snOiB7CisJICAgIHNpemVfdCBsZW4gPSBw
ZW5kIC0gcDsKKwkgICAgY2hhciAqYnVmID0gRk5NQVRDSF9BTExPQ19OKGNoYXIsIGxlbik7CisJ
ICAgIGNvbnN0IGNoYXIgKnJicmFjZSA9IE5VTEw7CisJICAgIHdoaWxlIChwIDwgcGVuZCkgewor
CQljb25zdCBjaGFyICp0ID0gKytwOworCQlpbnQgbmVzdCA9IDA7CisJCXdoaWxlIChwIDwgcGVu
ZCAmJiAhKCpwID09ICcsJyAmJiBuZXN0ID09IDApKSB7CisJCSAgICBpZiAoKnAgPT0gJ3snKSBu
ZXN0Kys7CisJCSAgICBpZiAoKnAgPT0gJ30nKSB7CisJCQlpZiAobmVzdCA9PSAwKSB7CisJCQkg
ICAgaWYgKCFyYnJhY2UpIHJicmFjZSA9IHA7CisJCQkgICAgZ290byByZXN0OworCQkJfQorCQkJ
bmVzdC0tOworCQkgICAgfQorCQkgICAgaWYgKCpwID09ICdcXCcgJiYgZXNjYXBlKSB7CisJCQlp
ZiAoKytwID49IHBlbmQpIGJyZWFrOworCQkgICAgfQorCQkgICAgSW5jKHAsIHBlbmQsIGVuYyk7
CisJCX0KKwkJaWYgKCFyYnJhY2UpIHsKKwkJICAgIHJicmFjZSA9IHA7CisJCSAgICB3aGlsZSAo
cmJyYWNlIDwgcGVuZCAmJiAhKCpyYnJhY2UgPT0gJ30nICYmIG5lc3QgPT0gMCkpIHsKKwkJCWlm
ICgqcmJyYWNlID09ICd7JykgbmVzdCsrOworCQkJaWYgKCpyYnJhY2UgPT0gJ30nKSBuZXN0LS07
CisJCQlpZiAoKnJicmFjZSA9PSAnXFwnICYmIGVzY2FwZSkgeworCQkJICAgIGlmICgrK3AgPj0g
cGVuZCkgYnJlYWs7CisJCQl9CisJCQlJbmMocmJyYWNlLCBwZW5kLCBlbmMpOworCQkgICAgfQor
CQl9CityZXN0OgorCQltZW1jcHkoYnVmLCB0LCBwLXQpOworCQlidWZbcC10XT0wOworCQlzdHJs
Y3B5KGJ1ZisocC10KSwgcmJyYWNlKzEsIGxlbi0ocC10KSk7CisJCXsKKwkJICAgIGNvbnN0IGNo
YXIgKnBwID0gYnVmLCAqc3MgPSBzOworCQkgICAgciA9IGZubWF0Y2hfaGVscGVyKChjb25zdCBj
aGFyICoqKSZwcCwgJnNzLCBmbGFnc3xGTk1fRE9UTUFUQ0gsIGVuYyk7CisJCX0KKwkJaWYgKHIg
PT0gMCkgeworCQkgICAgcCA9IGJ1ZjsKKwkJICAgIEZOTUFUQ0hfRlJFRShidWYpOworCQkgICAg
UkVUVVJOKDApOworCQl9CisJCWlmIChwID49IHJicmFjZSkgYnJlYWs7CisJICAgIH0KKwkgICAg
Rk5NQVRDSF9GUkVFKGJ1Zik7CisJICB9CiAJfQogCiAJLyogb3JkaW5hcnkgKi8KQEAgLTE0MjYs
NiArMTQ3OCwxMiBAQCBoYXNfbWFnaWMoY29uc3QgY2hhciAqcCwgY29uc3QgY2hhciAqcGVuZCwg
aW50IGZsYWdzLCByYl9lbmNvZGluZyAqZW5jKQogCSAgY2FzZSAnWyc6CiAJICAgIHJldHVybiBN
QUdJQ0FMOwogCisJICBjYXNlICd7JzoKKwkgICAgaWYgKGZsYWdzICYgRk5NX0VYVEdMT0IpIHsK
KwkgICAgICByZXR1cm4gTUFHSUNBTDsKKwkgICAgfQorCSAgICBicmVhazsKKwogCSAgY2FzZSAn
XFwnOgogCSAgICBpZiAoZXNjYXBlICYmIHArKyA+PSBwZW5kKQogCQljb250aW51ZTsKQEAgLTIy
NzIsNiArMjMzMCwxMyBAQCBwdXNoX3BhdHRlcm4oY29uc3QgY2hhciAqcGF0aCwgVkFMVUUgYXJ5
LCB2b2lkICplbmMpCiAgICAgcmJfYXJ5X3B1c2goYXJ5LCBuYW1lKTsKIH0KIAorc3RydWN0IHB1
c2hfZ2xvYl9hcmdzIHsKKyAgICBzdHJ1Y3QgZ2xvYl9hcmdzIGdsb2I7CisgICAgaW50IGZsYWdz
OworICAgIGludCBmZDsKK307CitzdGF0aWMgaW50IHB1c2hfY2FsbGVyKGNvbnN0IGNoYXIgKnBh
dGgsIFZBTFVFIHZhbCwgdm9pZCAqZW5jKTsKKwogc3RhdGljIGludAogcnVieV9icmFjZV9leHBh
bmQoY29uc3QgY2hhciAqc3RyLCBpbnQgZmxhZ3MsIHJ1YnlfZ2xvYl9mdW5jICpmdW5jLCBWQUxV
RSBhcmcsCiAJCSAgcmJfZW5jb2RpbmcgKmVuYywgVkFMVUUgdmFyKQpAQCAtMjI4MCw3ICsyMzQ1
LDcgQEAgcnVieV9icmFjZV9leHBhbmQoY29uc3QgY2hhciAqc3RyLCBpbnQgZmxhZ3MsIHJ1Ynlf
Z2xvYl9mdW5jICpmdW5jLCBWQUxVRSBhcmcsCiAgICAgY29uc3QgY2hhciAqcCA9IHN0cjsKICAg
ICBjb25zdCBjaGFyICpwZW5kID0gcCArIHN0cmxlbihwKTsKICAgICBjb25zdCBjaGFyICpzID0g
cDsKLSAgICBjb25zdCBjaGFyICpsYnJhY2UgPSAwLCAqcmJyYWNlID0gMDsKKyAgICBjb25zdCBj
aGFyICpsYnJhY2UgPSBOVUxMLCAqcmJyYWNlID0gTlVMTDsKICAgICBpbnQgbmVzdCA9IDAsIHN0
YXR1cyA9IDA7CiAKICAgICB3aGlsZSAoKnApIHsKQEAgLTIyOTksOSArMjM2NCwxOCBAQCBydWJ5
X2JyYWNlX2V4cGFuZChjb25zdCBjaGFyICpzdHIsIGludCBmbGFncywgcnVieV9nbG9iX2Z1bmMg
KmZ1bmMsIFZBTFVFIGFyZywKIAogICAgIGlmIChsYnJhY2UgJiYgcmJyYWNlKSB7CiAJc2l6ZV90
IGxlbiA9IHN0cmxlbihzKSArIDE7Ci0JY2hhciAqYnVmID0gR0xPQl9BTExPQ19OKGNoYXIsIGxl
bik7CisJY2hhciAqYnVmOwogCWxvbmcgc2hpZnQ7CiAKKwlpZiAoZnVuYyA9PSBwdXNoX2NhbGxl
ciAmJiAhc3RyY2hyKGxicmFjZSwgJy8nKSkgeworCSAgICAvKiBOb3cgaXQgcmVhY2hlcyBmaWxl
IGJhc2VuYW1lIGVudHJ5LiAqLworCSAgICAvKiBIYW5kbGUgYnJhY2VzIGluIGdsb2JfaGVscGVy
ICovCisJICAgIHN0cnVjdCBwdXNoX2dsb2JfYXJncyAqYSA9IChzdHJ1Y3QgcHVzaF9nbG9iX2Fy
Z3MgKilhcmc7CisJICAgIGEtPmZsYWdzIHw9IEZOTV9FWFRHTE9COworCSAgICByZXR1cm4gZ2xv
Yl9jYWxsX2Z1bmMoZnVuYywgcywgYXJnLCBlbmMpOworCX0KKworCWJ1ZiA9IEdMT0JfQUxMT0Nf
TihjaGFyLCBsZW4pOwogCWlmICghYnVmKSByZXR1cm4gLTE7CiAJbWVtY3B5KGJ1ZiwgcywgbGJy
YWNlLXMpOwogCXNoaWZ0ID0gKGxicmFjZS1zKTsKQEAgLTIzNjUsMTIgKzI0MzksNiBAQCBydWJ5
X2JyYWNlX2dsb2IoY29uc3QgY2hhciAqc3RyLCBpbnQgZmxhZ3MsIHJ1YnlfZ2xvYl9mdW5jICpm
dW5jLCBWQUxVRSBhcmcpCiAgICAgcmV0dXJuIHJ1YnlfYnJhY2VfZ2xvYl93aXRoX2VuYyhzdHIs
IGZsYWdzLCBmdW5jLCBhcmcsIHJiX2FzY2lpOGJpdF9lbmNvZGluZygpKTsKIH0KIAotc3RydWN0
IHB1c2hfZ2xvYl9hcmdzIHsKLSAgICBzdHJ1Y3QgZ2xvYl9hcmdzIGdsb2I7Ci0gICAgaW50IGZs
YWdzOwotICAgIGludCBmZDsKLX07Ci0KIHN0YXRpYyBpbnQKIHB1c2hfY2FsbGVyKGNvbnN0IGNo
YXIgKnBhdGgsIFZBTFVFIHZhbCwgdm9pZCAqZW5jKQogewpgYGAKCgoKLS0gCmh0dHBzOi8vYnVn
cy5ydWJ5LWxhbmcub3JnLwoKVW5zdWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3JlLXJlcXVlc3RA
cnVieS1sYW5nLm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3RzLnJ1YnktbGFu
Zy5vcmcvY2dpLWJpbi9tYWlsbWFuL29wdGlvbnMvcnVieS1jb3JlPgo=

In This Thread

Prev Next