From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Clark Date: Sun, 10 Sep 2017 07:21:20 -0400 Subject: [U-Boot] [PATCH v3 2/9] fs/fat: introduce new director iterators In-Reply-To: <20170910112149.21358-1-robdclark@gmail.com> References: <20170910112149.21358-1-robdclark@gmail.com> Message-ID: <20170910112149.21358-4-robdclark@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1254" Content-Transfer-Encoding: base64 To: u-boot@lists.denx.de VW50YW5nbGUgZGlyZWN0b3J5IHRyYXZlcnNhbCBpbnRvIGEgc2ltcGxlIGl0ZXJhdG9yLCB0byBy ZXBsYWNlIHRoZQpleGlzdGluZyBtdWx0aS1wdXJwb3NlIGRvX2ZhdF9yZWFkX2F0KCkgKyBnZXRf ZGVudGZyb21kaXIoKS4KClNpZ25lZC1vZmYtYnk6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWls LmNvbT4KUmV2aWV3ZWQtYnk6IMWBdWthc3ogTWFqZXdza2kgPGx1a21hQGRlbnguZGU+Ci0tLQog ZnMvZmF0L2ZhdC5jICB8IDM1NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKystCiBpbmNsdWRlL2ZhdC5oIHwgICA3ICsrCiAyIGZpbGVzIGNo YW5nZWQsIDM2MCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Zz L2ZhdC9mYXQuYyBiL2ZzL2ZhdC9mYXQuYwppbmRleCBlMWMwYTE1ZGM3Li5lZTJiYmUzOGYxIDEw MDY0NAotLS0gYS9mcy9mYXQvZmF0LmMKKysrIGIvZnMvZmF0L2ZhdC5jCkBAIC04MTIsNyArODEy LDYgQEAgc3RhdGljIGludCBnZXRfZnNfaW5mbyhmc2RhdGEgKm15ZGF0YSkKIHsKIAlib290X3Nl Y3RvciBiczsKIAl2b2x1bWVfaW5mbyB2b2xpbmZvOwotCV9fdTMyIHJvb3RfY2x1c3RlciA9IDA7 CiAJaW50IHJldDsKIAogCXJldCA9IHJlYWRfYm9vdHNlY3RhbmR2aSgmYnMsICZ2b2xpbmZvLCAm bXlkYXRhLT5mYXRzaXplKTsKQEAgLTgyMiw3ICs4MjEsNiBAQCBzdGF0aWMgaW50IGdldF9mc19p bmZvKGZzZGF0YSAqbXlkYXRhKQogCX0KIAogCWlmIChteWRhdGEtPmZhdHNpemUgPT0gMzIpIHsK LQkJcm9vdF9jbHVzdGVyID0gYnMucm9vdF9jbHVzdGVyOwogCQlteWRhdGEtPmZhdGxlbmd0aCA9 IGJzLmZhdDMyX2xlbmd0aDsKIAl9IGVsc2UgewogCQlteWRhdGEtPmZhdGxlbmd0aCA9IGJzLmZh dF9sZW5ndGg7CkBAIC04NDMsNiArODQxLDcgQEAgc3RhdGljIGludCBnZXRfZnNfaW5mbyhmc2Rh dGEgKm15ZGF0YSkKIAlpZiAobXlkYXRhLT5mYXRzaXplID09IDMyKSB7CiAJCW15ZGF0YS0+ZGF0 YV9iZWdpbiA9IG15ZGF0YS0+cm9vdGRpcl9zZWN0IC0KIAkJCQkJKG15ZGF0YS0+Y2x1c3Rfc2l6 ZSAqIDIpOworCQlteWRhdGEtPnJvb3RfY2x1c3RlciA9IGJzLnJvb3RfY2x1c3RlcjsKIAl9IGVs c2UgewogCQlteWRhdGEtPnJvb3RkaXJfc2l6ZSA9ICgoYnMuZGlyX2VudHJpZXNbMV0gICogKGlu dCkyNTYgKwogCQkJCQkgYnMuZGlyX2VudHJpZXNbMF0pICoKQEAgLTg1MSw2ICs4NTAsOSBAQCBz dGF0aWMgaW50IGdldF9mc19pbmZvKGZzZGF0YSAqbXlkYXRhKQogCQlteWRhdGEtPmRhdGFfYmVn aW4gPSBteWRhdGEtPnJvb3RkaXJfc2VjdCArCiAJCQkJCW15ZGF0YS0+cm9vdGRpcl9zaXplIC0K IAkJCQkJKG15ZGF0YS0+Y2x1c3Rfc2l6ZSAqIDIpOworCQlteWRhdGEtPnJvb3RfY2x1c3RlciA9 IChteWRhdGEtPnJvb3RkaXJfc2VjdCAtCisJCQkJCW15ZGF0YS0+ZGF0YV9iZWdpbikgLworCQkJ CQlteWRhdGEtPmNsdXN0X3NpemU7CiAJfQogCiAJbXlkYXRhLT5mYXRidWZudW0gPSAtMTsKQEAg LTg2OCw3ICs4NzAsNyBAQCBzdGF0aWMgaW50IGdldF9mc19pbmZvKGZzZGF0YSAqbXlkYXRhKQog CSAgICAgICBteWRhdGEtPmZhdHNpemUsIG15ZGF0YS0+ZmF0X3NlY3QsIG15ZGF0YS0+ZmF0bGVu Z3RoKTsKIAlkZWJ1ZygiUm9vdGRpciBiZWdpbnMgYXQgY2x1c3RlcjogJWQsIHNlY3RvcjogJWQs IG9mZnNldDogJXhcbiIKIAkgICAgICAgIkRhdGEgYmVnaW5zIGF0OiAlZFxuIiwKLQkgICAgICAg cm9vdF9jbHVzdGVyLAorCSAgICAgICBteWRhdGEtPnJvb3RfY2x1c3RlciwKIAkgICAgICAgbXlk YXRhLT5yb290ZGlyX3NlY3QsCiAJICAgICAgIG15ZGF0YS0+cm9vdGRpcl9zZWN0ICogbXlkYXRh LT5zZWN0X3NpemUsIG15ZGF0YS0+ZGF0YV9iZWdpbik7CiAJZGVidWcoIlNlY3RvciBzaXplOiAl ZCwgY2x1c3RlciBzaXplOiAlZFxuIiwgbXlkYXRhLT5zZWN0X3NpemUsCkBAIC0xMjQ1LDYgKzEy NDcsMzU0IEBAIGV4aXQ6CiAJcmV0dXJuIHJldDsKIH0KIAorCisvKgorICogRGlyZWN0b3J5IGl0 ZXJhdG9yLCB0byBzaW1wbGlmeSBmaWxlc3lzdGVtIHRyYXZlcnNhbAorICoKKyAqIEltcGxlbWVu dHMgYW4gaXRlcmF0b3IgcGF0dGVybiB0byB0cmF2ZXJzZSBkaXJlY3RvcnkgdGFibGVzLAorICog dHJhbnNwYXJlbnRseSBoYW5kbGluZyBkaXJlY3RvcnkgdGFibGVzIHNwbGl0IGFjcm9zcyBtdWx0 aXBsZQorICogY2x1c3RlcnMsIGFuZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEZBVDEyL0ZBVDE2 IHJvb3QgZGlyZWN0b3J5CisgKiAoY29udGlndW91cykgYW5kIHN1YmRpcmVjdG9yaWVzICsgRkFU MzIgcm9vdCAoY2hhaW5lZCkuCisgKgorICogUm91Z2ggdXNhZ2U6CisgKgorICogICBmb3IgKGZh dF9pdHJfcm9vdCgmaXRyLCBmc2RhdGEpOyBmYXRfaXRyX25leHQoJml0cik7ICkgeworICogICAg ICAvLyB0byB0cmF2ZXJzZSBkb3duIHRvIGEgc3ViZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkKKyAq ICAgICAgLy8gY3VycmVudCBpdGVyYXRvciBwb3NpdGlvbjoKKyAqICAgICAgZmF0X2l0cl9jaGls ZCgmaXRyLCAmaXRyKTsKKyAqICAgfQorICoKKyAqIEZvciBtb3JlIGNvbXBsZXRlIGV4YW1wbGUs IHNlZSBmYXRfaXRyX3Jlc29sdmUoKQorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlmc2RhdGEg ICAgKmZzZGF0YTsgICAgICAgIC8qIGZpbGVzeXN0ZW0gcGFyYW1ldGVycyAqLworCXVuc2lnbmVk ICAgY2x1c3Q7ICAgICAgICAgLyogY3VycmVudCBjbHVzdGVyICovCisJaW50ICAgICAgICBsYXN0 X2NsdXN0ZXI7ICAvKiBzZXQgb25jZSB3ZSd2ZSByZWFkIGxhc3QgY2x1c3RlciAqLworCWludCAg ICAgICAgaXNfcm9vdDsgICAgICAgLyogaXMgaXRlcmF0b3IgYXQgcm9vdCBkaXJlY3RvcnkgKi8K KwlpbnQgICAgICAgIHJlbWFpbmluZzsgICAgIC8qIHJlbWFpbmluZyBkZW50J3MgaW4gY3VycmVu dCBjbHVzdGVyICovCisKKwkvKiBjdXJyZW50IGl0ZXJhdG9yIHBvc2l0aW9uIHZhbHVlczogKi8K KwlkaXJfZW50cnkgKmRlbnQ7ICAgICAgICAgIC8qIGN1cnJlbnQgZGlyZWN0b3J5IGVudHJ5ICov CisJY2hhciAgICAgICBsX25hbWVbVkZBVF9NQVhMRU5fQllURVNdOyAgICAvKiBsb25nICh2ZmF0 KSBuYW1lICovCisJY2hhciAgICAgICBzX25hbWVbMTRdOyAgICAvKiBzaG9ydCA4LjMgbmFtZSAq LworCWNoYXIgICAgICAqbmFtZTsgICAgICAgICAgLyogbF9uYW1lIGlmIHRoZXJlIGlzIG9uZSwg ZWxzZSBzX25hbWUgKi8KKworCS8qIHN0b3JhZ2UgZm9yIGN1cnJlbnQgY2x1c3RlciBpbiBtZW1v cnk6ICovCisJdTggICAgICAgICBibG9ja1tNQVhfQ0xVU1RTSVpFXSBfX2FsaWduZWQoQVJDSF9E TUFfTUlOQUxJR04pOworfSBmYXRfaXRyOworCitzdGF0aWMgaW50IGZhdF9pdHJfaXNkaXIoZmF0 X2l0ciAqaXRyKTsKKworLyoqCisgKiBmYXRfaXRyX3Jvb3QoKSAtIGluaXRpYWxpemUgYW4gaXRl cmF0b3IgdG8gc3RhcnQgYXQgdGhlIHJvb3QKKyAqIGRpcmVjdG9yeQorICoKKyAqIEBpdHI6IGl0 ZXJhdG9yIHRvIGluaXRpYWxpemUKKyAqIEBmc2RhdGE6IGZpbGVzeXN0ZW0gZGF0YSBmb3IgdGhl IHBhcnRpdGlvbgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGVsc2UgLWVycm5vCisgKi8KK3N0 YXRpYyBpbnQgZmF0X2l0cl9yb290KGZhdF9pdHIgKml0ciwgZnNkYXRhICpmc2RhdGEpCit7CisJ aWYgKGdldF9mc19pbmZvKGZzZGF0YSkpCisJCXJldHVybiAtRU5YSU87CisKKwlpdHItPmZzZGF0 YSA9IGZzZGF0YTsKKwlpdHItPmNsdXN0ID0gZnNkYXRhLT5yb290X2NsdXN0ZXI7CisJaXRyLT5k ZW50ID0gTlVMTDsKKwlpdHItPnJlbWFpbmluZyA9IDA7CisJaXRyLT5sYXN0X2NsdXN0ZXIgPSAw OworCWl0ci0+aXNfcm9vdCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBmYXRfaXRy X2NoaWxkKCkgLSBpbml0aWFsaXplIGFuIGl0ZXJhdG9yIHRvIGRlc2NlbmQgaW50byBhIHN1Yi0K KyAqIGRpcmVjdG9yeQorICoKKyAqIEluaXRpYWxpemVzICdpdHInIHRvIGl0ZXJhdGUgdGhlIGNv bnRlbnRzIG9mIHRoZSBkaXJlY3RvcnkgYXQKKyAqIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlv biBvZiAncGFyZW50Jy4gIEl0IGlzIGFuIGVycm9yIHRvCisgKiBjYWxsIHRoaXMgaWYgdGhlIGN1 cnJlbnQgY3Vyc29yIG9mICdwYXJlbnQnIGlzIHBvaW50aW5nIGF0IGEKKyAqIHJlZ3VsYXIgZmls ZS4KKyAqCisgKiBOb3RlIHRoYXQgJ2l0cicgYW5kICdwYXJlbnQnIGNhbiBiZSB0aGUgc2FtZSBw b2ludGVyIGlmIHlvdSBkbworICogbm90IG5lZWQgdG8gcHJlc2VydmUgJ3BhcmVudCcgYWZ0ZXIg dGhpcyBjYWxsLCB3aGljaCBpcyB1c2VmdWwKKyAqIGZvciB0cmF2ZXJzaW5nIGRpcmVjdG9yeSBz dHJ1Y3R1cmUgdG8gcmVzb2x2ZSBhIGZpbGUvZGlyZWN0b3J5LgorICoKKyAqIEBpdHI6IGl0ZXJh dG9yIHRvIGluaXRpYWxpemUKKyAqIEBwYXJlbnQ6IHRoZSBpdGVyYXRvciBwb2ludGluZyBhdCBh IGRpcmVjdG9yeSBlbnRyeSBpbiB0aGUKKyAqICAgIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIGRp cmVjdG9yeSB0byBpdGVyYXRlCisgKi8KK3N0YXRpYyB2b2lkIGZhdF9pdHJfY2hpbGQoZmF0X2l0 ciAqaXRyLCBmYXRfaXRyICpwYXJlbnQpCit7CisJZnNkYXRhICpteWRhdGEgPSBwYXJlbnQtPmZz ZGF0YTsgIC8qIGZvciBzaWxseSBtYWNyb3MgKi8KKwl1bnNpZ25lZCBjbHVzdG51bSA9IFNUQVJU KHBhcmVudC0+ZGVudCk7CisKKwlhc3NlcnQoZmF0X2l0cl9pc2RpcihwYXJlbnQpKTsKKworCWl0 ci0+ZnNkYXRhID0gcGFyZW50LT5mc2RhdGE7CisJaWYgKGNsdXN0bnVtID4gMCkgeworCQlpdHIt PmNsdXN0ID0gY2x1c3RudW07CisJfSBlbHNlIHsKKwkJaXRyLT5jbHVzdCA9IHBhcmVudC0+ZnNk YXRhLT5yb290X2NsdXN0ZXI7CisJfQorCWl0ci0+ZGVudCA9IE5VTEw7CisJaXRyLT5yZW1haW5p bmcgPSAwOworCWl0ci0+bGFzdF9jbHVzdGVyID0gMDsKKwlpdHItPmlzX3Jvb3QgPSAwOworfQor CitzdGF0aWMgdm9pZCAqbmV4dF9jbHVzdGVyKGZhdF9pdHIgKml0cikKK3sKKwlmc2RhdGEgKm15 ZGF0YSA9IGl0ci0+ZnNkYXRhOyAgLyogZm9yIHNpbGx5IG1hY3JvcyAqLworCWludCByZXQ7CisJ dTMyIHNlY3Q7CisKKwkvKiBoYXZlIHdlIHJlYWNoZWQgdGhlIGVuZD8gKi8KKwlpZiAoaXRyLT5s YXN0X2NsdXN0ZXIpCisJCXJldHVybiBOVUxMOworCisJc2VjdCA9IGNsdXN0X3RvX3NlY3QoaXRy LT5mc2RhdGEsIGl0ci0+Y2x1c3QpOworCisJZGVidWcoIkZBVCByZWFkKHNlY3Q9JWQpLCBjbHVz dF9zaXplPSVkLCBESVJFTlRTUEVSQkxPQ0s9JXpkXG4iLAorCSAgICAgIHNlY3QsIGl0ci0+ZnNk YXRhLT5jbHVzdF9zaXplLCBESVJFTlRTUEVSQkxPQ0spOworCisJLyoKKwkgKiBOT1RFOiBkb19m YXRfcmVhZF9hdCgpIGhhZCBjb21wbGljYXRlZCBsb2dpYyB0byBkZWFsIHcvCisJICogdmZhdCBu YW1lcyB0aGF0IHNwYW4gbXVsdGlwbGUgY2x1c3RlcnMgaW4gdGhlIGZhdDE2IGNhc2UsCisJICog d2hpY2ggZ2V0X2RlbnRmcm9tZGlyKCkgcHJvYmFibHkgYWxzbyBuZWVkZWQgKGFuZCB3YXMKKwkg KiBtaXNzaW5nKS4gIEFuZCBub3QgZW50aXJlbHkgc3VyZSB3aGF0IGZhdDMyIGRpZG4ndCBoYXZl CisJICogdGhlIHNhbWUgaXNzdWUuLiAgV2Ugc29sdmUgdGhhdCBieSBvbmx5IGNhcmluZyBhYm91 dCBvbmUKKwkgKiBkZW50IGF0IGEgdGltZSBhbmQgaXRlcmF0aXZlbHkgY29uc3RydWN0aW5nIHRo ZSB2ZmF0IGxvbmcKKwkgKiBuYW1lLgorCSAqLworCXJldCA9IGRpc2tfcmVhZChzZWN0LCBpdHIt PmZzZGF0YS0+Y2x1c3Rfc2l6ZSwKKwkJCWl0ci0+YmxvY2spOworCWlmIChyZXQgPCAwKSB7CisJ CWRlYnVnKCJFcnJvcjogcmVhZGluZyBibG9ja1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKwor CWlmIChpdHItPmlzX3Jvb3QgJiYgaXRyLT5mc2RhdGEtPmZhdHNpemUgIT0gMzIpIHsKKwkJaXRy LT5jbHVzdCsrOworCQlzZWN0ID0gY2x1c3RfdG9fc2VjdChpdHItPmZzZGF0YSwgaXRyLT5jbHVz dCk7CisJCWlmIChzZWN0IC0gaXRyLT5mc2RhdGEtPnJvb3RkaXJfc2VjdCA+PQorCQkgICAgaXRy LT5mc2RhdGEtPnJvb3RkaXJfc2l6ZSkgeworCQkJZGVidWcoImN1cnNlY3Q6IDB4JXhcbiIsIGl0 ci0+Y2x1c3QpOworCQkJaXRyLT5sYXN0X2NsdXN0ZXIgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJ aXRyLT5jbHVzdCA9IGdldF9mYXRlbnQoaXRyLT5mc2RhdGEsIGl0ci0+Y2x1c3QpOworCQlpZiAo Q0hFQ0tfQ0xVU1QoaXRyLT5jbHVzdCwgaXRyLT5mc2RhdGEtPmZhdHNpemUpKSB7CisJCQlkZWJ1 ZygiY3Vyc2VjdDogMHgleFxuIiwgaXRyLT5jbHVzdCk7CisJCQlpdHItPmxhc3RfY2x1c3RlciA9 IDE7CisJCX0KKwl9CisKKwlyZXR1cm4gaXRyLT5ibG9jazsKK30KKworc3RhdGljIGRpcl9lbnRy eSAqbmV4dF9kZW50KGZhdF9pdHIgKml0cikKK3sKKwlpZiAoaXRyLT5yZW1haW5pbmcgPT0gMCkg eworCQlzdHJ1Y3QgZGlyX2VudHJ5ICpkZW50ID0gbmV4dF9jbHVzdGVyKGl0cik7CisJCXVuc2ln bmVkIG5ieXRlcyA9IGl0ci0+ZnNkYXRhLT5zZWN0X3NpemUgKgorCQkJaXRyLT5mc2RhdGEtPmNs dXN0X3NpemU7CisKKwkJLyogaGF2ZSB3ZSByZWFjaGVkIHRoZSBsYXN0IGNsdXN0ZXI/ICovCisJ CWlmICghZGVudCkKKwkJCXJldHVybiBOVUxMOworCisJCWl0ci0+cmVtYWluaW5nID0gbmJ5dGVz IC8gc2l6ZW9mKGRpcl9lbnRyeSkgLSAxOworCQlpdHItPmRlbnQgPSBkZW50OworCX0gZWxzZSB7 CisJCWl0ci0+cmVtYWluaW5nLS07CisJCWl0ci0+ZGVudCsrOworCX0KKworCS8qIGhhdmUgd2Ug cmVhY2hlZCB0aGUgbGFzdCB2YWxpZCBlbnRyeT8gKi8KKwlpZiAoaXRyLT5kZW50LT5uYW1lWzBd ID09IDApCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGl0ci0+ZGVudDsKK30KKworc3RhdGlj IGRpcl9lbnRyeSAqZXh0cmFjdF92ZmF0X25hbWUoZmF0X2l0ciAqaXRyKQoreworCXN0cnVjdCBk aXJfZW50cnkgKmRlbnQgPSBpdHItPmRlbnQ7CisJaW50IHNlcW4gPSBpdHItPmRlbnQtPm5hbWVb MF0gJiB+TEFTVF9MT05HX0VOVFJZX01BU0s7CisJdTggY2hrc3VtLCBhbGlhc19jaGVja3N1bSA9 ICgoZGlyX3Nsb3QgKilkZW50KS0+YWxpYXNfY2hlY2tzdW07CisJaW50IG4gPSAwOworCisJd2hp bGUgKHNlcW4tLSkgeworCQljaGFyIGJ1ZlsxM107CisJCWludCBpZHggPSAwOworCisJCXNsb3Qy c3RyKChkaXJfc2xvdCAqKWRlbnQsIGJ1ZiwgJmlkeCk7CisKKwkJLyogc2hpZnQgYWNjdW11bGF0 ZWQgbG9uZy1uYW1lIHVwIGFuZCBjb3B5IG5ldyBwYXJ0IGluOiAqLworCQltZW1tb3ZlKGl0ci0+ bF9uYW1lICsgaWR4LCBpdHItPmxfbmFtZSwgbik7CisJCW1lbWNweShpdHItPmxfbmFtZSwgYnVm LCBpZHgpOworCQluICs9IGlkeDsKKworCQlkZW50ID0gbmV4dF9kZW50KGl0cik7CisJCWlmICgh ZGVudCkKKwkJCXJldHVybiBOVUxMOworCX0KKworCWl0ci0+bF9uYW1lW25dID0gJ1wwJzsKKwor CWNoa3N1bSA9IG1rY2tzdW0oZGVudC0+bmFtZSwgZGVudC0+ZXh0KTsKKworCS8qIGNoZWNrc3Vt IG1pc21hdGNoIGNvdWxkIG1lYW4gZGVsZXRlZCBmaWxlLCBldGMuLiBza2lwIGl0OiAqLworCWlm IChjaGtzdW0gIT0gYWxpYXNfY2hlY2tzdW0pIHsKKwkJZGVidWcoIioqIGNoa3N1bT0leCwgYWxp YXNfY2hlY2tzdW09JXgsIGxfbmFtZT0lcywgc19uYW1lPSU4cy4lM3NcbiIsCisJCSAgICAgIGNo a3N1bSwgYWxpYXNfY2hlY2tzdW0sIGl0ci0+bF9uYW1lLCBkZW50LT5uYW1lLCBkZW50LT5leHQp OworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gZGVudDsKK30KKworLyoqCisgKiBmYXRf aXRyX25leHQoKSAtIHN0ZXAgdG8gdGhlIG5leHQgZW50cnkgaW4gYSBkaXJlY3RvcnkKKyAqCisg KiBNdXN0IGJlIGNhbGxlZCBvbmNlIG9uIGEgbmV3IGl0ZXJhdG9yIGJlZm9yZSB0aGUgY3Vyc29y IGlzIHZhbGlkLgorICoKKyAqIEBpdHI6IHRoZSBpdGVyYXRvciB0byBpdGVyYXRlCisgKiBAcmV0 dXJuIGJvb2xlYW4sIDEgaWYgc3VjY2VzcyBvciAwIGlmIG5vIG1vcmUgZW50cmllcyBpbiB0aGUK KyAqICAgIGN1cnJlbnQgZGlyZWN0b3J5CisgKi8KK3N0YXRpYyBpbnQgZmF0X2l0cl9uZXh0KGZh dF9pdHIgKml0cikKK3sKKwlkaXJfZW50cnkgKmRlbnQ7CisKKwlpdHItPm5hbWUgPSBOVUxMOwor CisJd2hpbGUgKDEpIHsKKwkJZGVudCA9IG5leHRfZGVudChpdHIpOworCQlpZiAoIWRlbnQpCisJ CQlyZXR1cm4gMDsKKworCQlpZiAoZGVudC0+bmFtZVswXSA9PSBERUxFVEVEX0ZMQUcgfHwKKwkJ ICAgIGRlbnQtPm5hbWVbMF0gPT0gYVJJTkcpCisJCQljb250aW51ZTsKKworCQlpZiAoZGVudC0+ YXR0ciAmIEFUVFJfVk9MVU1FKSB7CisJCQlpZiAodmZhdF9lbmFibGVkICYmCisJCQkgICAgKGRl bnQtPmF0dHIgJiBBVFRSX1ZGQVQpID09IEFUVFJfVkZBVCAmJgorCQkJICAgIChkZW50LT5uYW1l WzBdICYgTEFTVF9MT05HX0VOVFJZX01BU0spKSB7CisJCQkJZGVudCA9IGV4dHJhY3RfdmZhdF9u YW1lKGl0cik7CisJCQkJaWYgKCFkZW50KQorCQkJCQljb250aW51ZTsKKwkJCQlpdHItPm5hbWUg PSBpdHItPmxfbmFtZTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJLyogVm9sdW1lIGxh YmVsIG9yIFZGQVQgZW50cnksIHNraXAgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJ CWJyZWFrOworCX0KKworCWdldF9uYW1lKGRlbnQsIGl0ci0+c19uYW1lKTsKKwlpZiAoIWl0ci0+ bmFtZSkKKwkJaXRyLT5uYW1lID0gaXRyLT5zX25hbWU7CisKKwlyZXR1cm4gMTsKK30KKworLyoq CisgKiBmYXRfaXRyX2lzZGlyKCkgLSBpcyBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBwb2ludGlu ZyB0byBhIGRpcmVjdG9yeQorICoKKyAqIEBpdHI6IHRoZSBpdGVyYXRvcgorICogQHJldHVybiB0 cnVlIGlmIGN1cnNvciBpcyBhdCBhIGRpcmVjdG9yeQorICovCitzdGF0aWMgaW50IGZhdF9pdHJf aXNkaXIoZmF0X2l0ciAqaXRyKQoreworCXJldHVybiAhIShpdHItPmRlbnQtPmF0dHIgJiBBVFRS X0RJUik7Cit9CisKKy8qCisgKiBIZWxwZXJzOgorICovCisKKyNkZWZpbmUgVFlQRV9GSUxFIDB4 MQorI2RlZmluZSBUWVBFX0RJUiAgMHgyCisjZGVmaW5lIFRZUEVfQU5ZICAoVFlQRV9GSUxFIHwg VFlQRV9ESVIpCisKKy8qKgorICogZmF0X2l0cl9yZXNvbHZlKCkgLSB0cmF2ZXJzZSBkaXJlY3Rv cnkgc3RydWN0dXJlIHRvIHJlc29sdmUgdGhlCisgKiByZXF1ZXN0ZWQgcGF0aC4KKyAqCisgKiBU cmF2ZXJzZSBkaXJlY3Rvcnkgc3RydWN0dXJlIHRvIHRoZSByZXF1ZXN0ZWQgcGF0aC4gIElmIHRo ZSBzcGVjaWZpZWQKKyAqIHBhdGggaXMgdG8gYSBkaXJlY3RvcnksIHRoaXMgd2lsbCBkZXNjZW5k IGludG8gdGhlIGRpcmVjdG9yeSBhbmQKKyAqIGxlYXZlIGl0IGl0ZXJhdG9yIGF0IHRoZSBzdGFy dCBvZiB0aGUgZGlyZWN0b3J5LiAgSWYgdGhlIHBhdGggaXMgdG8gYQorICogZmlsZSwgaXQgd2ls bCBsZWF2ZSB0aGUgaXRlcmF0b3IgaW4gdGhlIHBhcmVudCBkaXJlY3Rvcnkgd2l0aCBjdXJyZW50 CisgKiBjdXJzb3IgYXQgZmlsZSdzIGVudHJ5IGluIHRoZSBkaXJlY3RvcnkuCisgKgorICogQGl0 cjogaXRlcmF0b3IgaW5pdGlhbGl6ZWQgdG8gcm9vdAorICogQHBhdGg6IHRoZSByZXF1ZXN0ZWQg cGF0aAorICogQHR5cGU6IGJpdG1hc2sgb2YgYWxsb3dhYmxlIGZpbGUgdHlwZXMKKyAqIEByZXR1 cm4gMCBvbiBzdWNjZXNzIG9yIC1lcnJubworICovCitzdGF0aWMgaW50IGZhdF9pdHJfcmVzb2x2 ZShmYXRfaXRyICppdHIsIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIHR5cGUpCit7CisJY29u c3QgY2hhciAqbmV4dDsKKworCS8qIGNob21wIGFueSBleHRyYSBsZWFkaW5nIHNsYXNoZXM6ICov CisJd2hpbGUgKHBhdGhbMF0gJiYgSVNESVJERUxJTShwYXRoWzBdKSkKKwkJcGF0aCsrOworCisJ LyogYXJlIHdlIGF0IHRoZSBlbmQ/ICovCisJaWYgKHN0cmxlbihwYXRoKSA9PSAwKSB7CisJCWlm ICghKHR5cGUgJiBUWVBFX0RJUikpCisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJcmV0dXJuIDA7CisJ fQorCisJLyogZmluZCBsZW5ndGggb2YgbmV4dCBwYXRoIGVudHJ5OiAqLworCW5leHQgPSBwYXRo OworCXdoaWxlIChuZXh0WzBdICYmICFJU0RJUkRFTElNKG5leHRbMF0pKQorCQluZXh0Kys7CisK Kwl3aGlsZSAoZmF0X2l0cl9uZXh0KGl0cikpIHsKKwkJaW50IG1hdGNoID0gMDsKKwkJdW5zaWdu ZWQgbiA9IG1heChzdHJsZW4oaXRyLT5uYW1lKSwgKHNpemVfdCkobmV4dCAtIHBhdGgpKTsKKwor CQkvKiBjaGVjayBib3RoIGxvbmcgYW5kIHNob3J0IG5hbWU6ICovCisJCWlmICghc3RybmNhc2Vj bXAocGF0aCwgaXRyLT5uYW1lLCBuKSkKKwkJCW1hdGNoID0gMTsKKwkJZWxzZSBpZiAoaXRyLT5u YW1lICE9IGl0ci0+c19uYW1lICYmCisJCQkgIXN0cm5jYXNlY21wKHBhdGgsIGl0ci0+c19uYW1l LCBuKSkKKwkJCW1hdGNoID0gMTsKKworCQlpZiAoIW1hdGNoKQorCQkJY29udGludWU7CisKKwkJ aWYgKGZhdF9pdHJfaXNkaXIoaXRyKSkgeworCQkJLyogcmVjdXJzZSBpbnRvIGRpcmVjdG9yeTog Ki8KKwkJCWZhdF9pdHJfY2hpbGQoaXRyLCBpdHIpOworCQkJcmV0dXJuIGZhdF9pdHJfcmVzb2x2 ZShpdHIsIG5leHQsIHR5cGUpOworCQl9IGVsc2UgaWYgKG5leHRbMF0pIHsKKwkJCS8qCisJCQkg KiBJZiBuZXh0IGlzIG5vdCBlbXB0eSB0aGVuIHdlIGhhdmUgYSBjYXNlCisJCQkgKiBsaWtlOiAv cGF0aC90by9yZWFsZmlsZS9ub25zZW5zZQorCQkJICovCisJCQlkZWJ1ZygiYmFkIHRyYWlsaW5n IHBhdGg6ICVzXG4iLCBuZXh0KTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9IGVsc2UgaWYgKCEo dHlwZSAmIFRZUEVfRklMRSkpIHsKKwkJCXJldHVybiAtRU5PVERJUjsKKwkJfSBlbHNlIHsKKwkJ CXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKIGludCBkb19mYXRf cmVhZChjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYnVmZmVyLCBsb2ZmX3QgbWF4c2l6ZSwg aW50IGRvbHMsCiAJCWxvZmZfdCAqYWN0cmVhZCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZmF0 LmggYi9pbmNsdWRlL2ZhdC5oCmluZGV4IGI2NzFlZThmODEuLjIxYmI2NjY2Y2YgMTAwNjQ0Ci0t LSBhL2luY2x1ZGUvZmF0LmgKKysrIGIvaW5jbHVkZS9mYXQuaApAQCAtMTc1LDggKzE3NSwxNSBA QCB0eXBlZGVmIHN0cnVjdCB7CiAJaW50CWRhdGFfYmVnaW47CS8qIFRoZSBzZWN0b3Igb2YgdGhl IGZpcnN0IGNsdXN0ZXIsIGNhbiBiZSBuZWdhdGl2ZSAqLwogCWludAlmYXRidWZudW07CS8qIFVz ZWQgYnkgZ2V0X2ZhdGVudCwgaW5pdCB0byAtMSAqLwogCWludAlyb290ZGlyX3NpemU7CS8qIFNp emUgb2Ygcm9vdCBkaXIgZm9yIG5vbi1GQVQzMiAqLworCV9fdTMyCXJvb3RfY2x1c3RlcjsJLyog Rmlyc3QgY2x1c3RlciBvZiByb290IGRpciBmb3IgRkFUMzIgKi8KIH0gZnNkYXRhOwogCisvKiBU T0RPIGNsZWFuIHVwIHBsYWNlcyB0aGF0IGFyZSBvcGVuLWNvZGluZyB0aGlzOiAqLworc3RhdGlj IGlubGluZSB1MzIgY2x1c3RfdG9fc2VjdChmc2RhdGEgKmZzZGF0YSwgdTMyIGNsdXN0KQorewor CXJldHVybiBmc2RhdGEtPmRhdGFfYmVnaW4gKyBjbHVzdCAqIGZzZGF0YS0+Y2x1c3Rfc2l6ZTsK K30KKwogdHlwZWRlZiBpbnQJKGZpbGVfZGV0ZWN0ZnNfZnVuYykodm9pZCk7CiB0eXBlZGVmIGlu dAkoZmlsZV9sc19mdW5jKShjb25zdCBjaGFyICpkaXIpOwogdHlwZWRlZiBpbnQJKGZpbGVfcmVh ZF9mdW5jKShjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYnVmZmVyLAotLSAKMi4xMy41Cgo=