From: Akinori MUSHA Date: 2009-02-13T20:01:53+09:00 Subject: [ruby-dev:37995] Add POSTARG support to rb_scan_args() --001636458206fe980a0462cac8e2 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit  rb_scan_args()をPOSTARG対応にするパッチです。 rb_scan_args(argc, argv, "11*2", &first, &optional, &array, &penult, &last); のように、 * の後に数字を指定できます。  ドキュメントもおおざっぱなまま放置されているので更新してみました。 -- Akinori MUSHA / http://akinori.org/ メールサーバが落ちているのでGmailより --001636458206fe980a0462cac8e2 Content-Type: application/octet-stream; name="rb_scan_args.patch" Content-Disposition: attachment; filename="rb_scan_args.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fr4qxrw70 SW5kZXg6IFJFQURNRS5FWFQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUkVBRE1FLkVYVAkocmV2aXNpb24gMjIy NzIpCisrKyBSRUFETUUuRVhUCSh3b3JraW5nIGNvcHkpCkBAIC02NzgsMTUgKzY3OCwzNiBAQCBh cmd1bWVudCBpcyB0aGUgQyBhcnJheSBvZiB0aGUgbWV0aG9kIGFyCiBhcmd1bWVudCBpcyB0aGUg cmVjZWl2ZXIgb2YgdGhlIG1ldGhvZC4KIAogWW91IGNhbiB1c2UgdGhlIGZ1bmN0aW9uIHJiX3Nj YW5fYXJncygpIHRvIGNoZWNrIGFuZCByZXRyaWV2ZSB0aGUKLWFyZ3VtZW50cy4gIEZvciBleGFt cGxlLCAiMTEiIG1lYW5zIHRoYXQgdGhlIG1ldGhvZCByZXF1aXJlcyBhdCBsZWFzdCBvbmUKLWFy Z3VtZW50LCBhbmQgYXQgbW9zdCByZWNlaXZlcyB0d28gYXJndW1lbnRzLgorYXJndW1lbnRzLiAg VGhlIHRoaXJkIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIGhvdyB0bworY2Fw dHVyZSBtZXRob2QgYXJndW1lbnRzIGFuZCBhc3NpZ24gdGhlbSB0byB0aGUgZm9sbG93aW5nIHZh cmlhYmxlCityZWZlcmVuY2VzLiAgVGhlIGZvcm1hdCBjYW4gYmUgZGVzY3JpYmVkIGluIEFCTkYg YXMgZm9sbG93czoKKworLS0KK3NjYW4tYXJnLXNwZWMgIDo9IChwcmUtYXJnLXNwZWMgW3Bvc3Qt YXJnLXNwZWNdIC8gcG9zdC1hcmctc3BlYykgW2Jsb2NrLWFyZy1zcGVjXQorCitwcmUtYXJnLXNw ZWMgICA6PSBudW0tb2YtbGVhZGluZy1tYW5kYXRvcnktYXJncyBbbnVtLW9mLW9wdGlvbmFsLWFy Z3NdCitwb3N0LWFyZy1zcGVjICA6PSBzeW0tZm9yLXZhcmlhYmxlLWxlbmd0aC1hcmdzIFtudW0t b2YtdHJhaWxpbmctbWFuZGF0b3J5LWFyZ3NdCitibG9jay1hcmctc3BlYyA6PSBzeW0tZm9yLWJs b2NrLWFyZworCitudW0tb2YtbGVhZGluZy1tYW5kYXRvcnktYXJncyAgOj0gRElHSVQgIDsgLS0g dGhlIG51bWJlciBvZiB0aGUgbGVhZGluZyBtYW5kYXRvcnkgYXJndW1lbnRzCitudW0tb2Ytb3B0 aW9uYWwtYXJncyAgICAgICAgICAgOj0gRElHSVQgIDsgLS0gdGhlIG51bWJlciBvZiB0aGUgZm9s bG93aW5nIG9wdGlvbmFsIGFyZ3VtZW50cworc3ltLWZvci12YXJpYWJsZS1sZW5ndGgtYXJncyAg IDo9ICIqIiAgICA7IC0tIGluZGljYXRlcyB0aGF0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGUgbGVu Z3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgICAgYXJndW1l bnRzIGFyZSBjYXB0dXJlZCBhcyBhIFJ1YnkgYXJyYXkKK251bS1vZi10cmFpbGluZy1tYW5kYXRv cnktYXJncyA6PSBESUdJVCAgOyAtLSB0aGUgbnVtYmVyIG9mIHRoZSB0cmFpbGluZyBtYW5kYXRv cnkgYXJndW1lbnRzCitzeW0tZm9yLWJsb2NrLWFyZyAgICAgICAgICAgICAgOj0gIiYiICAgIDsg LS0gaW5kaWNhdGVzIHRoYXQgdGhlIGl0ZXJhdG9yIGJsb2NrIHNob3VsZCBiZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICAgIGNhcHR1cmVkIGlmIGdpdmVuCist LQorCitGb3IgZXhhbXBsZSwgIjExIiBtZWFucyB0aGF0IHRoZSBtZXRob2QgcmVxdWlyZXMgYXQg bGVhc3Qgb25lCithcmd1bWVudCwgYW5kIGF0IG1vc3QgcmVjZWl2ZXMgdHdvIGFyZ3VtZW50cy4g IEZvciBvbWl0dGVkIGFyZ3VtZW50cywKK3ZhcmlhYmxlcyBhcmUgc2V0IHRvIFFuaWwuCiAKIE1l dGhvZHMgd2l0aCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBjYW4gcmVjZWl2ZSBh cmd1bWVudHMKIGJ5IFJ1YnkncyBhcnJheSwgbGlrZSB0aGlzOgogCiAtLQogc3RhdGljIFZBTFVF Ci1mZGJtX2luZGV4ZXMoVkFMVUUgb2JqLCBWQUxVRSBhcmdzKQordGhyZWFkX2luaXRpYWxpemUo VkFMVUUgdGhyZWFkLCBWQUxVRSBhcmdzKQogewogCToKIH0KSW5kZXg6IGNsYXNzLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gY2xhc3MuYwkocmV2aXNpb24gMjIyNzIpCisrKyBjbGFzcy5jCSh3b3JraW5nIGNv cHkpCkBAIC05MjAsMjAgKzkyMCwzNyBAQCByYl9kZWZpbmVfYXR0cihWQUxVRSBrbGFzcywgY29u c3QgY2hhciAqCiBpbnQKIHJiX3NjYW5fYXJncyhpbnQgYXJnYywgY29uc3QgVkFMVUUgKmFyZ3Ys IGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewotICAgIGludCBuLCBpID0gMDsKLSAgICBjb25zdCBj aGFyICpwID0gZm10OworICAgIGludCBpID0gMCwgcG9zdGFyZ2MsIG5vbnBvc3RhcmdjOworICAg IGNvbnN0IGNoYXIgKnAgPSBmbXQsICpxOwogICAgIFZBTFVFICp2YXI7CiAgICAgdmFfbGlzdCB2 YXJnczsKIAogICAgIHZhX3N0YXJ0KHZhcmdzLCBmbXQpOwogCi0gICAgaWYgKCpwID09ICcqJykg Z290byByZXN0X2FyZzsKKyAgICAvKiBjaGVjayB0aGUgdHJhaWxpbmcgbWFuZGF0b3J5IGFyZ3Vt ZW50IGxlbmd0aCBpbiBhZHZhbmNlICovCisgICAgaWYgKChxID0gc3RyY2hyKHAsICcqJykpICE9 IE5VTEwgJiYgSVNESUdJVCgqKytxKSkgeworCXBvc3RhcmdjID0gKnEgLSAnMCc7CisJbm9ucG9z dGFyZ2MgPSBhcmdjIC0gcG9zdGFyZ2M7CisgICAgfQorICAgIGVsc2UgeyAKKwlwb3N0YXJnYyA9 IDA7CisJbm9ucG9zdGFyZ2MgPSBhcmdjOworICAgIH0KIAotICAgIGlmIChJU0RJR0lUKCpwKSkg ewotCW4gPSAqcCAtICcwJzsKLQlpZiAobiA+IGFyZ2MpCi0JICAgIHJiX3JhaXNlKHJiX2VBcmdF cnJvciwgIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMgKCVkIGZvciAlZCkiLCBhcmdjLCBuKTsK LQlmb3IgKGk9MDsgaTxuOyBpKyspIHsKKyAgICBpZiAoKnAgPT0gJyonKSB7CisJaWYgKG5vbnBv c3RhcmdjIDwgMCkKKwkgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAid3JvbmcgbnVtYmVyIG9m IGFyZ3VtZW50cyAoJWQgZm9yICVkKSIsCisJCSAgICAgYXJnYywgcG9zdGFyZ2MpOworCWdvdG8g cmVzdF9hcmc7ICAgIAorICAgIH0KKyAgICBlbHNlIGlmIChJU0RJR0lUKCpwKSkgeworCS8qIGxl YWRpbmcgbWFuZGF0b3J5IGFyZ3VtZW50cyAqLworCWludCBuID0gKnAgLSAnMCc7CisKKwlpZiAo bm9ucG9zdGFyZ2MgPCBuKQorCSAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJ3cm9uZyBudW1i ZXIgb2YgYXJndW1lbnRzICglZCBmb3IgJWQpIiwKKwkJICAgICBhcmdjLCBuICsgcG9zdGFyZ2Mp OworCWZvciAoOyBuLS0gPiAwOyBpKyspIHsKIAkgICAgdmFyID0gdmFfYXJnKHZhcmdzLCBWQUxV RSopOwogCSAgICBpZiAodmFyKSAqdmFyID0gYXJndltpXTsKIAl9CkBAIC05NDMsMTIgKzk2MCwx NSBAQCByYl9zY2FuX2FyZ3MoaW50IGFyZ2MsIGNvbnN0IFZBTFVFICphcmd2CiAJZ290byBlcnJv cjsKICAgICB9CiAKKyAgICAvKiBvcHRpb25hbCBhcmd1bWVudHMgKHR5cGljYWxseSB3aXRoIGRl ZmF1bHQgdmFsdWVzKSAqLwogICAgIGlmIChJU0RJR0lUKCpwKSkgewotCW4gPSBpICsgKnAgLSAn MCc7Ci0JZm9yICg7IGk8bjsgaSsrKSB7CisJaW50IG4gPSAqcCAtICcwJzsKKworCWZvciAoOyBu LS0gPiAwOyApIHsKIAkgICAgdmFyID0gdmFfYXJnKHZhcmdzLCBWQUxVRSopOwotCSAgICBpZiAo YXJnYyA+IGkpIHsKKwkgICAgaWYgKGkgPCBub25wb3N0YXJnYykgewogCQlpZiAodmFyKSAqdmFy ID0gYXJndltpXTsKKwkJaSsrOwogCSAgICB9CiAJICAgIGVsc2UgewogCQlpZiAodmFyKSAqdmFy ID0gUW5pbDsKQEAgLTk1NywyMCArOTc3LDMzIEBAIHJiX3NjYW5fYXJncyhpbnQgYXJnYywgY29u c3QgVkFMVUUgKmFyZ3YKIAlwKys7CiAgICAgfQogCi0gICAgaWYoKnAgPT0gJyonKSB7CisgICAg aWYgKCpwID09ICcqJykgewogICAgICAgcmVzdF9hcmc6CisJLyogdmFyaWFibGUgbGVuZ3RoIGFy Z3VtZW50cyAodGhlIDwqcmVzdD4gcGFydCkgKi8KIAl2YXIgPSB2YV9hcmcodmFyZ3MsIFZBTFVF Kik7Ci0JaWYgKGFyZ2MgPiBpKSB7Ci0JICAgIGlmICh2YXIpICp2YXIgPSByYl9hcnlfbmV3NChh cmdjLWksIGFyZ3YraSk7Ci0JICAgIGkgPSBhcmdjOworCWlmIChpIDwgbm9ucG9zdGFyZ2MpIHsK KwkgICAgaWYgKHZhcikgKnZhciA9IHJiX2FyeV9uZXc0KG5vbnBvc3RhcmdjLWksIGFyZ3YraSk7 CisJICAgIGkgPSBub25wb3N0YXJnYzsKIAl9CiAJZWxzZSB7CiAJICAgIGlmICh2YXIpICp2YXIg PSByYl9hcnlfbmV3KCk7CiAJfQogCXArKzsKKworCWlmICgwIDwgcG9zdGFyZ2MpIHsKKwkgICAg LyogdHJhaWxpbmcgbWFuZGF0b3J5IGFyZ3VtZW50cyAqLworCSAgICBpbnQgbiA9IHBvc3Rhcmdj OworCisJICAgIGZvciAoOyBuLS0gPiAwOyBpKyspIHsKKwkJdmFyID0gdmFfYXJnKHZhcmdzLCBW QUxVRSopOworCQlpZiAodmFyKSAqdmFyID0gYXJndltpXTsKKwkgICAgfQorCSAgICBwKys7CisJ fQogICAgIH0KIAogICAgIGlmICgqcCA9PSAnJicpIHsKKwkvKiBpdGVyYXRvciBibG9jayAqLwog CXZhciA9IHZhX2FyZyh2YXJncywgVkFMVUUqKTsKIAlpZiAocmJfYmxvY2tfZ2l2ZW5fcCgpKSB7 CiAJICAgICp2YXIgPSByYl9ibG9ja19wcm9jKCk7CkBAIC05ODYsOCArMTAxOSw4IEBAIHJiX3Nj YW5fYXJncyhpbnQgYXJnYywgY29uc3QgVkFMVUUgKmFyZ3YKIAlnb3RvIGVycm9yOwogICAgIH0K IAotICAgIGlmIChhcmdjID4gaSkgewotCXJiX3JhaXNlKHJiX2VBcmdFcnJvciwgIndyb25nIG51 bWJlciBvZiBhcmd1bWVudHMgKCVkIGZvciAlZCkiLCBhcmdjLCBpKTsKKyAgICBpZiAoaSA8IGFy Z2MpIHsKKwlyYl9yYWlzZShyYl9lQXJnRXJyb3IsICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRz ICglZCBmb3IgJWQpJXMgJWQiLCBhcmdjLCBpLCBmbXQsIG5vbnBvc3RhcmdjKTsKICAgICB9CiAK ICAgICByZXR1cm4gYXJnYzsKSW5kZXg6IFJFQURNRS5FWFQuamEKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUkVB RE1FLkVYVC5qYQkocmV2aXNpb24gMjIyNzIpCisrKyBSRUFETUUuRVhULmphCSh3b3JraW5nIGNv cHkpCkBAIC03NjcsMjAgKzc2NywzNCBAQCBmZGJtX3Nfb3BlbihpbnQgYXJnYywgVkFMVUUgKmFy Z3YsIFZBTFVFCiAKIKSzpM7H287zpMfNv6SopOmk7KS/sPq/9KTysvLAz6S5pOukv6ThpM602L/0 pKxvcGVuKCmkx6Tiu8ik7wogpOykxqSkpOtyYl9zY2FuX2FyZ3MoKaTHpLmhpcLoM7D6v/Sky7vY xOqkt6S/pdWlqaG8pd6lw6XIpMsKLb2+pKShpMLoNMrRv/SwyrnfpMu72MTqpLekv8rRv/Sky8PN pPLC5cb+pLekxqSvpOyk3qS5oaWks6TOCi2l1aWpobyl3qXDpcikz6Gkwugxyri7+szcpKy+ys6s pMekraTKpKSw+r/0pM6/9KGkwugyyri7+szcpKwKLb7Kzqykx6StpOuw+r/0pM6/9KGkwugzyri7 +szcpKzC0LH+pLmk68HqvOqkrMy1pKSkoqTepOqkzrD6Ci2/9KSspKKk66SrpMmkpqSrpPK8qKS5 IioipMekuaGlMsq4u/rM3KTIM8q4u/rM3KTPvsrOrKTHpK2k3gotpLmhpWRibS5jpM7O46THpM+h pKXVpamhvKXepcOlyKTPIjExIqTHpLmkq6TpoaSw+r/0pM+6x8TjMaTECiu9vqSkoaTC6DTK0b/0 sMq536TLu9jE6qS3pL/K0b/0KKTOu7K+yCmky8PNpPLC5cb+pLekxqSvpOyk3qS5oaUKK6SzpM6l 1aWpobyl3qXDpcikz6GkQUJORqTHta290qS5pOukyLDKsrykzsTMpOqkx6S5oaUKKworLS0KK3Nj YW4tYXJnLXNwZWMgIDo9IChwcmUtYXJnLXNwZWMgW3Bvc3QtYXJnLXNwZWNdIC8gcG9zdC1hcmct c3BlYykgW2Jsb2NrLWFyZy1zcGVjXQorCitwcmUtYXJnLXNwZWMgICA6PSBudW0tb2YtbGVhZGlu Zy1tYW5kYXRvcnktYXJncyBbbnVtLW9mLW9wdGlvbmFsLWFyZ3NdCitwb3N0LWFyZy1zcGVjICA6 PSBzeW0tZm9yLXZhcmlhYmxlLWxlbmd0aC1hcmdzIFtudW0tb2YtdHJhaWxpbmctbWFuZGF0b3J5 LWFyZ3NdCitibG9jay1hcmctc3BlYyA6PSBzeW0tZm9yLWJsb2NrLWFyZworCitudW0tb2YtbGVh ZGluZy1tYW5kYXRvcnktYXJncyAgOj0gRElHSVQgIDsgLS0gwOjGrKTLw9akq6TspOu+ys6sydSy xMe9pMqw+r/0pM6/9AorbnVtLW9mLW9wdGlvbmFsLWFyZ3MgICAgICAgICAgIDo9IERJR0lUICA7 IC0tIMKzpKSkxsPWpKuk7KTrvsrOrLLEx72kyrD6v/Skzr/0CitzeW0tZm9yLXZhcmlhYmxlLWxl bmd0aC1hcmdzICAgOj0gIioiICAgIDsgLS0gwrOkpKTGw9akq6TspOuyxMrRxLmw+r/0pPJSdWJ5 pM7H287zpMcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAgICC8 6MbApLmk66S/pOGkzrvYxOoKK251bS1vZi10cmFpbGluZy1tYW5kYXRvcnktYXJncyA6PSBESUdJ VCAgOyAtLSC9qsO8pMvD1qSrpOyk677KzqzJ1LLEx72kyrD6v/Skzr/0CitzeW0tZm9yLWJsb2Nr LWFyZyAgICAgICAgICAgICAgOj0gIiYiICAgIDsgLS0gpaSlxqXsobylv6XWpe2lw6WvpPK86MbA pLmk66S/pOGkzrvYxOoKKy0tCisKK2RibS5jpM7O46THpM+hpKXVpamhvKXepcOlyKTPIjExIqTH pLmkq6TpoaSw+r/0pM+6x8TjMaTECiCkx6GkMqTEpN6kx7X2pLWk7KTrpMikpKSmsNXMo6TLpMqk 6qTepLmhpb7KzqyktaTspMakpKTru/6kzgogytG/9KTOw82kz25pbChDuMC47KTOpeyl2aXrpMek z1FuaWwppMukyqTqpN6kuaGlCiAKLVJ1YnmkzsfbzvOkx7D6v/Sk8rz1pLG86KTrpOKkzqTPaW5k ZXhlc6SspKKk6qTepLmhpbzCwfWkz6SzCi2kpqTHpLmhpQoruse45aTLoaKw+r/0pPJSdWJ5pM7H 287zpMikt6TGvPWksbzopOuk4qTOpMukz1RocmVhZCNpbml0aWFsaXplpKykoqTqpN6kuaGlCiu8 wsH1pM+ks6SmpMekuaGlCiAKIC0tCiBzdGF0aWMgVkFMVUUKLWZkYm1faW5kZXhlcyhWQUxVRSBv YmosIFZBTFVFIGFyZ3MpCit0aHJlYWRfaW5pdGlhbGl6ZShWQUxVRSB0aHJlYWQsIFZBTFVFIGFy Z3MpCiB7CiAJOgogfQo= --001636458206fe980a0462cac8e2--