From: Run Paint Run Run Date: 2010-11-06T03:59:12+09:00 Subject: [ruby-core:33075] [Ruby 1.9-Feature#4015] File::DIRECT Constant for O_DIRECT --mimepart_4cd453f8703b0_ef0d2ca70628899 Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Issue #4015 has been updated by Run Paint Run Run. File io-advise.patch added Last suggestion from me, I promise. ;-) O_DIRECT is a controversial () flag, = and Linus and others recommend () usi= ng madvise(2)/posix_fadvise(2) instead. The latter is, as the name sugges= ts, part of the POSIX standard, avoiding the current problem of defining = platform-specific, non-standard flags. Its advantages are summarised in O= 'Reilly's _Linux System Programming_: <> Implementing posix_fadvise(2) would avoid complicating the logic of `open= ` any more, and at the same time provide a more general solution than O_D= IRECT. The attached patch defines IO#advise as a wrapper around posix_fad= vise(2). As this advice is never binding, and #respond_to? returns false = for :advise on platforms that don't support it, it is trivial to write po= rtable code that only invokes #advise where supported. Granted, this solu= tion still requires defining constants. However, there is no danger of de= fining them on all platforms because platforms that don't support this sy= scall will raise a NotImplementedError for #advise. ---------------------------------------- http://redmine.ruby-lang.org/issues/show/4015 ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4cd453f8703b0_ef0d2ca70628899 Content-Type: text/x-patch; name=io-advise.patch Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=io-advise.patch ZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgppbmRl eCBiODViMzQyLi43NTMzNzA4IDEwMDY0NAotLS0gYS9jb25maWd1cmUuaW4K KysrIGIvY29uZmlndXJlLmluCkBAIC0xMjY2LDcgKzEyNjYsNyBAQCBlbHNl CiBmaQogQUNfQ0hFQ0tfRlVOQ1MoZm1vZCBraWxscGcgd2FpdDQgd2FpdHBp ZCBmb3JrIHNwYXdudiBzeXNjYWxsIGNocm9vdCBnZXRjd2QgZWFjY2Vzc1wK IAkgICAgICB0cnVuY2F0ZSBmdHJ1bmNhdGUgY2hzaXplIHRpbWVzIHV0aW1l cyB1dGltZW5zYXQgZmNudGwgbG9ja2YgbHN0YXRcCi0JICAgICAgbGluayBz eW1saW5rIHJlYWRsaW5rIHJlYWRkaXJfciBmc3luYyBmZGF0YXN5bmMgZmNo b3duXAorCSAgICAgIGxpbmsgc3ltbGluayByZWFkbGluayByZWFkZGlyX3Ig ZnN5bmMgZmRhdGFzeW5jIGZjaG93biBwb3NpeF9mYWR2aXNlXAogCSAgICAg IHNldGl0aW1lciBzZXRydWlkIHNldGV1aWQgc2V0cmV1aWQgc2V0cmVzdWlk IHNldHByb2N0aXRsZSBzb2NrZXRwYWlyXAogCSAgICAgIHNldHJnaWQgc2V0 ZWdpZCBzZXRyZWdpZCBzZXRyZXNnaWQgaXNzZXR1Z2lkIHBhdXNlIGxjaG93 biBsY2htb2RcCiAJICAgICAgZ2V0cGdycCBzZXRwZ3JwIGdldHBnaWQgc2V0 cGdpZCBpbml0Z3JvdXBzIGdldGdyb3VwcyBzZXRncm91cHNcCmRpZmYgLS1n aXQgYS9pby5jIGIvaW8uYwppbmRleCA0YjhkMzRhLi45NjhhYTM5IDEwMDY0 NAotLS0gYS9pby5jCisrKyBiL2lvLmMKQEAgLTEsMyArMSw0IEBACisKIC8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgaW8uYyAtCkBAIC0xNDEz LDYgKzE0MTQsNzggQEAgcmJfaW9fZmRhdGFzeW5jKFZBTFVFIGlvKQogI2Rl ZmluZSByYl9pb19mZGF0YXN5bmMgcmJfZl9ub3RpbXBsZW1lbnQKICNlbmRp ZgogCisjaWZkZWYgSEFWRV9QT1NJWF9GQURWSVNFCisvKgorICogIGNhbGwt c2VxOgorICogICAgIGlvcy5hZHZpc2UoYWR2aWNlLCBvZmZzZXQ9MCwgbGVu PTApIC0+IG5pbAorICoKKyAqICBBbm5vdW5jZSBhbiBpbnRlbnRpb24gdG8g YWNjZXNzIGRhdGEgZnJvbSB0aGUgY3VycmVudCBmaWxlIGluIGEgc3BlY2lm aWMKKyAqICBwYXR0ZXJuLiBUaGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBp biB0ZXJtcyBvZiA8ZW0+cG9zaXhfZmFkdmlzZSgyKTwvZW0+LAorICogIHNv IG9uIHN5c3RlbXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB0aGlzIHN5c3RlbSBj YWxsLCBhCisgKiAgPGNvZGU+Tm90SW1wbGVtZW50ZWRFcnJvcjwvY29kZT4g aXMgcmFpc2VkLgorCisgKiBfYWR2aWNlXyBpcyBvbmUgb2YgdGhlIGZvbGxv d2luZyBjb25zdGFudHM6CisgKiAgCisgKiAgKiBGaWxlOjpQT1NJWF9GQURW X05PUk1BTCAtIE5vIGFkdmljZSB0byBnaXZlOyB0aGUgZGVmYXVsdCBhc3N1 bXB0aW9uIGZvciAKKyAqICAgIGFuIG9wZW4gZmlsZS4KKyAqICAqIEZpbGU6 OlBPU0lYX0ZBRFZfU0VRVUVOVElBTCAtIFRoZSBkYXRhIHdpbGwgYmUgYWNj ZXNzZWQgc2VxdWVudGlhbGx5OiAKKyAqICAgIHdpdGggbG93ZXIgb2Zmc2V0 cyByZWFkIGJlZm9yZSBoaWdoZXIgb25lcy4KKyAqICAqIEZpbGU6OlBPU0lY X0ZBRFZfUkFORE9NIC0gVGhlIGRhdGEgd2lsbCBiZSBhY2Nlc3NlZCBpbiBy YW5kb20gb3JkZXIuCisgKiAgKiBGaWxlOjpQT1NJWF9GQURWX1dJTExORUVE IC0gVGhlIGRhdGEgd2lsbCBiZSBhY2Nlc3NlZCBpbiB0aGUgbmVhciBmdXR1 cmUuCisgKiAgKiBGSUxFOjpQT1NJWF9GQURWX0RPTlRORUVEIC0gVGhlIGRh dGEgd2lsbCBub3QgYmUgYWNjZXNzZWQgaW4gdGhlIG5lYXIgCisgKiAgICBm dXR1cmUuCisgKiAgKiBGaWxlOjpQT1NJWF9GQURWX05PUkVVU0UgLSBUaGUg ZGF0YSB3aWxsIG9ubHkgYmUgYWNjZXNzZWQgb25jZS4KKyAqCisgKiAgVGhl IHRlcm0gX2RhdGFfIG1lYW5zIHRoZSByZWdpb24gb2YgdGhlIGN1cnJlbnQg ZmlsZSB0aGF0IGJlZ2lucworICogIGF0IF9vZmZzZXRfIGFuZCBleHRlbmRz IGZvciBfbGVuXyBieXRlcy4gQnkgZGVmYXVsdCwgYm90aCBfb2Zmc2V0Xwor ICogIGFuZCBfbGVuXyBhcmUgMCwgbWVhbmluZyB0aGF0IHRoZSBhZHZpY2Ug YXBwbGllcyB0byB0aGUgZW50aXJlCisgKiAgZmlsZS4KKyAqCisgKiAgSWYg YW4gZXJyb3Igb2NjdXJzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV4Y2VwdGlv bnMgd2lsbCBiZSByYWlzZWQ6CisgKgorICogICogPGNvZGU+SU9FcnJvcjwv Y29kZT4gLSBUaGUgPGNvZGU+SU88L2NvZGU+IHN0cmVhbSBpcyBjbG9zZWQu CisgKiAgKiA8Y29kZT5FcnJubzo6RUJBREY8L2NvZGU+IC0gVGhlIGZpbGUg ZGVzY3JpcHRvciBvZiB0aGUgY3VycmVudCBmaWxlIGlzCisgKiAgKiBpbnZh bGlkLiAgCisgKiAgKiA8Y29kZT5FcnJubzo6RUlOVkFMPC9jb2RlPiAtIEFu IGludmFsaWQgdmFsdWUgZm9yIF9hZHZpY2VfIHdhcworICogICogZ2l2ZW4u CisgKiAgKiA8Y29kZT5FcnJubzo6RVNQSVBFPC9jb2RlPiAtIFRoZSBmaWxl IGRlc2NyaXB0b3Igb2YgdGhlIGN1cnJlbnQKKyAqICAqIGZpbGUgcmVmZXJz IHRvIGEgRklGTyBvciBwaXBlLiAoTGludXggcmFpc2VzIDxjb2RlPkVycm5v OjpFSU5WQUw8L2NvZGU+CisgKiAgKiBpbiB0aGlzIGNhc2UpLgorICogICog PGNvZGU+VHlwZUVycm9yPC9jb2RlPiAtIE9uZSBvZiB0aGUgYXJndW1lbnRz IGdpdmVuIHdhcworICogICogbm90IGFuIDxjb2RlPkludGVnZXI8L2NvZGU+ LgorICogICogPGNvZGU+UmFuZ2VFcnJvcjwvY29kZT4gLSBPbmUgb2YgdGhl IGFyZ3VtZW50cyBnaXZlbiB3YXMgdG9vIGJpZy9zbWFsbC4KKyAqICAqIDxj b2RlPk5vdEltcGxlbWVudGVkRXJyb3I8L2NvZGU+IC0gVGhlIHVuZGVybHlp bmcgb3BlcmF0aW5nIHN5c3RlbSBkb2VzCisgKiAgKiBub3Qgc3VwcG9ydCA8 ZW0+cG9zaXhfZmFkdmlzZSgyKTwvZW0+LgorICovCisKK3N0YXRpYyBWQUxV RQorcmJfaW9fYWR2aXNlKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUg aW8pCit7CisgIG9mZl90IG9mZnNldCwgbGVuOworICBpbnQgYWR2aWNlLCBy djsKKyAgVkFMVUUgaW5pdGFkdmljZSwgaW5pdG9mZnNldCwgaW5pdGxlbjsK KyAgcmJfaW9fdCAqZnB0cjsKKworICByYl9zY2FuX2FyZ3MoYXJnYywgYXJn diwgIjEyIiwgJmluaXRhZHZpY2UsICZpbml0b2Zmc2V0LCAmaW5pdGxlbik7 CisgIGFkdmljZSA9IE5VTTJJTlQoaW5pdGFkdmljZSk7CisgIG9mZnNldCA9 IE5JTF9QKGluaXRvZmZzZXQpID8gMCA6IE5VTTJPRkZUKGluaXRvZmZzZXQp OworICBsZW4gICAgPSBOSUxfUChpbml0bGVuKSAgICA/IDAgOiBOVU0yT0ZG VChpbml0bGVuKTsKKworICBpbyA9IEdldFdyaXRlSU8oaW8pOworICBHZXRP cGVuRmlsZShpbywgZnB0cik7CisKKyAgaWYgKHJ2ID0gcG9zaXhfZmFkdmlz ZShmcHRyLT5mZCwgb2Zmc2V0LCBsZW4sIGFkdmljZSkpIHsKKyAgICAvKiBw b3NpeF9mYWR2aXNlKDIpIGRvZXNuJ3Qgc2V0IGVycm5vLiBPbiBzdWNjZXNz IGl0IHJldHVybnMgMDsgb3RoZXJ3aXNlCisgICAgICAgaXQgcmV0dXJucyB0 aGUgZXJyb3IgY29kZS4gKi8KKyAgICBlcnJubyA9IHJ2OworICAgIHJiX3N5 c19mYWlsX3BhdGgoZnB0ci0+cGF0aHYpOworICB9CisgIHJldHVybiBRbmls OworfQorI2Vsc2UKKyNkZWZpbmUgcmJfaW9fZmFkdmlzZSByYl9mX25vdGlt cGxlbWVudAorI2VuZGlmCisKIC8qCiAgKiAgY2FsbC1zZXE6CiAgKiAgICAg aW9zLmZpbGVubyAgICAtPiBmaXhudW0KQEAgLTEwMDQ4LDYgKzEwMTIxLDcg QEAgSW5pdF9JTyh2b2lkKQogICAgIHJiX2RlZmluZV9tZXRob2QocmJfY0lP LCAiYmlubW9kZSIsICByYl9pb19iaW5tb2RlX20sIDApOwogICAgIHJiX2Rl ZmluZV9tZXRob2QocmJfY0lPLCAiYmlubW9kZT8iLCByYl9pb19iaW5tb2Rl X3AsIDApOwogICAgIHJiX2RlZmluZV9tZXRob2QocmJfY0lPLCAic3lzc2Vl ayIsIHJiX2lvX3N5c3NlZWssIC0xKTsKKyAgICByYl9kZWZpbmVfbWV0aG9k KHJiX2NJTywgImFkdmlzZSIsIHJiX2lvX2FkdmlzZSwgLTEpOwogCiAgICAg cmJfZGVmaW5lX21ldGhvZChyYl9jSU8sICJpb2N0bCIsIHJiX2lvX2lvY3Rs LCAtMSk7CiAgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jSU8sICJmY250bCIs IHJiX2lvX2ZjbnRsLCAtMSk7CkBAIC0xMDIwNiw2ICsxMDI4MCwyNCBAQCBJ bml0X0lPKHZvaWQpCiAgICAgLyogZG8gbm90IGNoYW5nZSBhdGltZSAqLwog ICAgIHJiX2ZpbGVfY29uc3QoIk5PQVRJTUUiLCBJTlQyRklYKE9fTk9BVElN RSkpOyAvKiBMaW51eCAqLwogI2VuZGlmCisjaWZkZWYgUE9TSVhfRkFEVl9O T1JNQUwKKyAgICByYl9maWxlX2NvbnN0KCJQT1NJWF9GQURWX05PUk1BTCIs IElOVDJGSVgoUE9TSVhfRkFEVl9OT1JNQUwpKTsKKyNlbmRpZgorI2lmZGVm IFBPU0lYX0ZBRFZfU0VRVUVOVElBTAorICAgIHJiX2ZpbGVfY29uc3QoIlBP U0lYX0ZBRFZfU0VRVUVOVElBTCIsIElOVDJGSVgoUE9TSVhfRkFEVl9TRVFV RU5USUFMKSk7CisjZW5kaWYKKyNpZmRlZiBQT1NJWF9GQURWX1JBTkRPTQor ICAgIHJiX2ZpbGVfY29uc3QoIlBPU0lYX0ZBRFZfUkFORE9NIiwgSU5UMkZJ WChQT1NJWF9GQURWX1JBTkRPTSkpOworI2VuZGlmCisjaWZkZWYgUE9TSVhf RkFEVl9XSUxMTkVFRAorICAgIHJiX2ZpbGVfY29uc3QoIlBPU0lYX0ZBRFZf V0lMTE5FRUQiLCBJTlQyRklYKFBPU0lYX0ZBRFZfV0lMTE5FRUQpKTsKKyNl bmRpZgorI2lmZGVmIFBPU0lYX0ZBRFZfRE9OVE5FRUQKKyAgICByYl9maWxl X2NvbnN0KCJQT1NJWF9GQURWX0RPTlRORUVEIiwgSU5UMkZJWChQT1NJWF9G QURWX0RPTlRORUVEKSk7CisjZW5kaWYKKyNpZmRlZiBQT1NJWF9GQURWX05P UkVVU0UKKyAgICByYl9maWxlX2NvbnN0KCJQT1NJWF9GQURWX05PUkVVU0Ui LCBJTlQyRklYKFBPU0lYX0ZBRFZfTk9SRVVTRSkpOworI2VuZGlmCiAKICAg ICBzeW1fbW9kZSA9IElEMlNZTShyYl9pbnRlcm4oIm1vZGUiKSk7CiAgICAg c3ltX3Blcm0gPSBJRDJTWU0ocmJfaW50ZXJuKCJwZXJtIikpOwo= --mimepart_4cd453f8703b0_ef0d2ca70628899--