Date: Sat, 24 Nov 2001 12:00:02 -0800 (PST) From: Maxim Konovalov <maxim@macomnet.ru> To: freebsd-bugs@FreeBSD.org Subject: Re: bin/24955:/usr/bin/tail -F in 4.1+ doesn't work if file inode changes (works in 4.0) Message-ID: <200111242000.fAOK02P75776@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/24955; it has been noted by GNATS. From: Maxim Konovalov <maxim@macomnet.ru> To: Ian Dowse <iedowse@maths.tcd.ie> Cc: freebsd-gnats-submit@FreeBSD.org Subject: Re: bin/24955:/usr/bin/tail -F in 4.1+ doesn't work if file inode changes (works in 4.0) Date: Sat, 24 Nov 2001 22:43:09 +0300 (MSK) This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --0-1268137247-1006630989=:87876 Content-Type: TEXT/PLAIN; charset=US-ASCII Hello Ian, Here is the final patch. I attached a cumulative patch which includes the changes below and changes for WARNS?=2. Index: forward.c =================================================================== RCS file: /home/ncvs/src/usr.bin/tail/forward.c,v retrieving revision 1.27 diff -u -r1.27 forward.c --- forward.c 1 Sep 2001 22:22:44 -0000 1.27 +++ forward.c 24 Nov 2001 19:06:28 -0000 @@ -94,10 +94,11 @@ off_t off; struct stat *sbp; { - int ch, kq = -1; + int ch, n, kq = -1; int action = USE_SLEEP; struct kevent ev[2]; struct stat sb2; + struct timespec ts; switch(style) { case FBYTES: @@ -193,9 +194,10 @@ clearerr(fp); switch (action) { - case ADD_EVENTS: { - int n = 0; - struct timespec ts = { 0, 0 }; + case ADD_EVENTS: + n = 0; + ts.tv_sec = 0; + ts.tv_nsec = 0; if (Fflag && fileno(fp) != STDIN_FILENO) { EV_SET(&ev[n], fileno(fp), EVFILT_VNODE, @@ -208,24 +210,27 @@ n++; if (kevent(kq, ev, n, NULL, 0, &ts) < 0) { - close(kq); - kq = -1; action = USE_SLEEP; } else { action = USE_KQUEUE; } break; - } case USE_KQUEUE: - if (kevent(kq, NULL, 0, ev, 1, NULL) < 0) + ts.tv_sec = 1; + ts.tv_nsec = 0; + /* + * In the -F case we set a timeout to ensure that + * we re-stat the file at least once every second. + */ + n = kevent(kq, NULL, 0, ev, 1, Fflag ? &ts : NULL); + if (n < 0) err(1, "kevent"); - - if (ev->filter == EVFILT_VNODE) { - /* file was rotated, wait until it reappears */ - action = USE_SLEEP; - } else if (ev->data < 0) { - /* file shrank, reposition to end */ + if (n == 0) { + /* timeout */ + break; + } else if (ev->filter == EVFILT_READ && ev->data < 0) { + /* file shrank, reposition to end */ if (fseeko(fp, (off_t)0, SEEK_END) == -1) { ierr(); return; @@ -236,26 +241,25 @@ case USE_SLEEP: (void) usleep(250000); clearerr(fp); + break; + } - if (Fflag && fileno(fp) != STDIN_FILENO && - stat(fname, &sb2) != -1) { - if (sb2.st_ino != sbp->st_ino || - sb2.st_dev != sbp->st_dev || - sb2.st_rdev != sbp->st_rdev || - sb2.st_nlink == 0) { - fp = freopen(fname, "r", fp); - if (fp == NULL) { - ierr(); - break; - } + if (Fflag && fileno(fp) != STDIN_FILENO) { + while (stat(fname, &sb2) != 0) + /* file was rotated, wait until it reappears */ + (void)sleep(1); + if (sb2.st_ino != sbp->st_ino || + sb2.st_dev != sbp->st_dev || + sb2.st_rdev != sbp->st_rdev || + sb2.st_nlink == 0) { + fp = freopen(fname, "r", fp); + if (fp == NULL) { + ierr(); + } else { *sbp = sb2; - if (kq != -1) - action = ADD_EVENTS; - } else if (kq != -1) { - action = USE_KQUEUE; + action = ADD_EVENTS; } } - break; } } } - -maxim --0-1268137247-1006630989=:87876 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="tail.warns.diff" Content-Transfer-Encoding: BASE64 Content-ID: <20011124224308.M87876@news1.macomnet.ru> Content-Description: Content-Disposition: attachment; filename="tail.warns.diff" SW5kZXg6IE1ha2VmaWxlDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg ZmlsZTogL2hvbWUvbmN2cy9zcmMvdXNyLmJpbi90YWlsL01ha2VmaWxlLHYN CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQ0KZGlmZiAtdSAtcjEuMS4x LjEgTWFrZWZpbGUNCi0tLSBNYWtlZmlsZQkyNyBNYXkgMTk5NCAxMjozMjo0 NSAtMDAwMAkxLjEuMS4xDQorKysgTWFrZWZpbGUJMjQgTm92IDIwMDEgMTk6 MTI6MzMgLTAwMDANCkBAIC0yLDUgKzIsNiBAQA0KIA0KIFBST0c9CXRhaWwN CiBTUkNTPQlmb3J3YXJkLmMgbWlzYy5jIHJlYWQuYyByZXZlcnNlLmMgdGFp bC5jDQorV0FSTlM/PQkyDQogDQogLmluY2x1ZGUgPGJzZC5wcm9nLm1rPg0K SW5kZXg6IGV4dGVybi5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg ZmlsZTogL2hvbWUvbmN2cy9zcmMvdXNyLmJpbi90YWlsL2V4dGVybi5oLHYN CnJldHJpZXZpbmcgcmV2aXNpb24gMS42DQpkaWZmIC11IC1yMS42IGV4dGVy bi5oDQotLS0gZXh0ZXJuLmgJMSBTZXAgMjAwMSAyMjoyMjo0NCAtMDAwMAkx LjYNCisrKyBleHRlcm4uaAkyNCBOb3YgMjAwMSAxOTozMToyNSAtMDAwMA0K QEAgLTM2LDcgKzM2LDcgQEANCiAgKi8NCiANCiAjZGVmaW5lCVdSKHAsIHNp emUpIGRvIHsgXA0KLQlpZiAod3JpdGUoU1RET1VUX0ZJTEVOTywgcCwgc2l6 ZSkgIT0gc2l6ZSkgXA0KKwlpZiAod3JpdGUoU1RET1VUX0ZJTEVOTywgcCwg c2l6ZSkgIT0gKHNzaXplX3Qpc2l6ZSkgXA0KIAkJb2VycigpOyBcDQogCX0g d2hpbGUoMCkNCiANCkluZGV4OiBmb3J3YXJkLmMNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZS9uY3ZzL3NyYy91c3IuYmluL3Rh aWwvZm9yd2FyZC5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNw0KZGlm ZiAtdSAtcjEuMjcgZm9yd2FyZC5jDQotLS0gZm9yd2FyZC5jCTEgU2VwIDIw MDEgMjI6MjI6NDQgLTAwMDAJMS4yNw0KKysrIGZvcndhcmQuYwkyNCBOb3Yg MjAwMSAxOToxNTowMiAtMDAwMA0KQEAgLTk0LDEwICs5NCwxMSBAQA0KIAlv ZmZfdCBvZmY7DQogCXN0cnVjdCBzdGF0ICpzYnA7DQogew0KLQlpbnQgY2gs IGtxID0gLTE7DQorCWludCBjaCwgbiwga3EgPSAtMTsNCiAJaW50IGFjdGlv biA9IFVTRV9TTEVFUDsNCiAJc3RydWN0IGtldmVudCBldlsyXTsNCiAJc3Ry dWN0IHN0YXQgc2IyOw0KKwlzdHJ1Y3QgdGltZXNwZWMgdHM7DQogDQogCXN3 aXRjaChzdHlsZSkgew0KIAljYXNlIEZCWVRFUzoNCkBAIC0xNzAsNiArMTcx LDkgQEANCiAJCQlpZiAobGluZXMoZnAsIG9mZikpDQogCQkJCXJldHVybjsN CiAJCWJyZWFrOw0KKwljYXNlIE5PVFNFVDoNCisJY2FzZSBSRVZFUlNFOg0K KwkJYnJlYWs7DQogCX0NCiANCiAJaWYgKGZmbGFnKSB7DQpAQCAtMTkzLDkg KzE5NywxMCBAQA0KIAkJY2xlYXJlcnIoZnApOw0KIA0KIAkJc3dpdGNoIChh Y3Rpb24pIHsNCi0JCWNhc2UgQUREX0VWRU5UUzogew0KLQkJCWludCBuID0g MDsNCi0JCQlzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7IDAsIDAgfTsNCisJCWNh c2UgQUREX0VWRU5UUzoNCisJCQluID0gMDsNCisJCQl0cy50dl9zZWMgPSAw Ow0KKwkJCXRzLnR2X25zZWMgPSAwOw0KIA0KIAkJCWlmIChGZmxhZyAmJiBm aWxlbm8oZnApICE9IFNURElOX0ZJTEVOTykgew0KIAkJCQlFVl9TRVQoJmV2 W25dLCBmaWxlbm8oZnApLCBFVkZJTFRfVk5PREUsDQpAQCAtMjA4LDI0ICsy MTMsMjcgQEANCiAJCQluKys7DQogDQogCQkJaWYgKGtldmVudChrcSwgZXYs IG4sIE5VTEwsIDAsICZ0cykgPCAwKSB7DQotCQkJCWNsb3NlKGtxKTsNCi0J CQkJa3EgPSAtMTsNCiAJCQkJYWN0aW9uID0gVVNFX1NMRUVQOw0KIAkJCX0g ZWxzZSB7DQogCQkJCWFjdGlvbiA9IFVTRV9LUVVFVUU7DQogCQkJfQ0KIAkJ CWJyZWFrOw0KLQkJfQ0KIA0KIAkJY2FzZSBVU0VfS1FVRVVFOg0KLQkJCWlm IChrZXZlbnQoa3EsIE5VTEwsIDAsIGV2LCAxLCBOVUxMKSA8IDApDQorCQkJ dHMudHZfc2VjID0gMTsNCisJCQl0cy50dl9uc2VjID0gMDsNCisJCQkvKg0K KwkJCSAqIEluIHRoZSAtRiBjYXNlIHdlIHNldCBhIHRpbWVvdXQgdG8gZW5z dXJlIHRoYXQNCisJCQkgKiB3ZSByZS1zdGF0IHRoZSBmaWxlIGF0IGxlYXN0 IG9uY2UgZXZlcnkgc2Vjb25kLg0KKwkJCSAqLw0KKwkJCW4gPSBrZXZlbnQo a3EsIE5VTEwsIDAsIGV2LCAxLCBGZmxhZyA/ICZ0cyA6IE5VTEwpOw0KKwkJ CWlmIChuIDwgMCkNCiAJCQkJZXJyKDEsICJrZXZlbnQiKTsNCi0NCi0JCQlp ZiAoZXYtPmZpbHRlciA9PSBFVkZJTFRfVk5PREUpIHsNCi0JCQkJLyogZmls ZSB3YXMgcm90YXRlZCwgd2FpdCB1bnRpbCBpdCByZWFwcGVhcnMgKi8NCi0J CQkJYWN0aW9uID0gVVNFX1NMRUVQOw0KLQkJCX0gZWxzZSBpZiAoZXYtPmRh dGEgPCAwKSB7DQotCQkJCS8qIGZpbGUgc2hyYW5rLCByZXBvc2l0aW9uIHRv IGVuZCAqLw0KKwkJCWlmIChuID09IDApIHsNCisJCQkJLyogdGltZW91dCAq Lw0KKwkJCQlicmVhazsNCisJCQl9IGVsc2UgaWYgKGV2LT5maWx0ZXIgPT0g RVZGSUxUX1JFQUQgJiYgZXYtPmRhdGEgPCAwKSB7DQorCQkJCSAvKiBmaWxl IHNocmFuaywgcmVwb3NpdGlvbiB0byBlbmQgKi8NCiAJCQkJaWYgKGZzZWVr byhmcCwgKG9mZl90KTAsIFNFRUtfRU5EKSA9PSAtMSkgew0KIAkJCQkJaWVy cigpOw0KIAkJCQkJcmV0dXJuOw0KQEAgLTIzNiwyNiArMjQ0LDI1IEBADQog CQljYXNlIFVTRV9TTEVFUDoNCiAgICAgICAgICAgICAgICAgCSh2b2lkKSB1 c2xlZXAoMjUwMDAwKTsNCiAJICAgICAgICAgICAgICAgIGNsZWFyZXJyKGZw KTsNCisJCQlicmVhazsNCisJCX0NCiANCi0JCQlpZiAoRmZsYWcgJiYgZmls ZW5vKGZwKSAhPSBTVERJTl9GSUxFTk8gJiYNCi0JCQkgICAgc3RhdChmbmFt ZSwgJnNiMikgIT0gLTEpIHsNCi0JCQkJaWYgKHNiMi5zdF9pbm8gIT0gc2Jw LT5zdF9pbm8gfHwNCi0JCQkJICAgIHNiMi5zdF9kZXYgIT0gc2JwLT5zdF9k ZXYgfHwNCi0JCQkJICAgIHNiMi5zdF9yZGV2ICE9IHNicC0+c3RfcmRldiB8 fA0KLQkJCQkgICAgc2IyLnN0X25saW5rID09IDApIHsNCi0JCQkJCWZwID0g ZnJlb3BlbihmbmFtZSwgInIiLCBmcCk7DQotCQkJCQlpZiAoZnAgPT0gTlVM TCkgew0KLQkJCQkJCWllcnIoKTsNCi0JCQkJCQlicmVhazsNCi0JCQkJCX0N CisJCWlmIChGZmxhZyAmJiBmaWxlbm8oZnApICE9IFNURElOX0ZJTEVOTykg ew0KKwkJCXdoaWxlIChzdGF0KGZuYW1lLCAmc2IyKSAhPSAwKQ0KKwkJCQkv KiBmaWxlIHdhcyByb3RhdGVkLCB3YWl0IHVudGlsIGl0IHJlYXBwZWFycyAq Lw0KKwkJCQkodm9pZClzbGVlcCgxKTsNCisJCQlpZiAoc2IyLnN0X2lubyAh PSBzYnAtPnN0X2lubyB8fA0KKwkJCSAgICBzYjIuc3RfZGV2ICE9IHNicC0+ c3RfZGV2IHx8DQorCQkJICAgIHNiMi5zdF9yZGV2ICE9IHNicC0+c3RfcmRl diB8fA0KKwkJCSAgICBzYjIuc3RfbmxpbmsgPT0gMCkgew0KKwkJCQlmcCA9 IGZyZW9wZW4oZm5hbWUsICJyIiwgZnApOw0KKwkJCQlpZiAoZnAgPT0gTlVM TCkgew0KKwkJCQkJaWVycigpOw0KKwkJCQl9IGVsc2Ugew0KIAkJCQkJKnNi cCA9IHNiMjsNCi0JCQkJCWlmIChrcSAhPSAtMSkNCi0JCQkJCQlhY3Rpb24g PSBBRERfRVZFTlRTOw0KLQkJCQl9IGVsc2UgaWYgKGtxICE9IC0xKSB7DQot CQkJCQlhY3Rpb24gPSBVU0VfS1FVRVVFOw0KKwkJCQkJYWN0aW9uID0gQURE X0VWRU5UUzsNCiAJCQkJfQ0KIAkJCX0NCi0JCQlicmVhazsNCiAJCX0NCiAJ fQ0KIH0NCkluZGV4OiByZWFkLmMNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N ClJDUyBmaWxlOiAvaG9tZS9uY3ZzL3NyYy91c3IuYmluL3RhaWwvcmVhZC5j LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS44DQpkaWZmIC11IC1yMS44IHJl YWQuYw0KLS0tIHJlYWQuYwkzIERlYyAyMDAwIDE3OjA1OjQ1IC0wMDAwCTEu OA0KKysrIHJlYWQuYwkyNCBOb3YgMjAwMSAxOTozMzo0MSAtMDAwMA0KQEAg LTExNSw3ICsxMTUsNyBAQA0KIAl9IGVsc2Ugew0KIAkJaWYgKHdyYXAgJiYg KGxlbiA9IGVwIC0gcCkpDQogCQkJV1IocCwgbGVuKTsNCi0JCWlmIChsZW4g PSBwIC0gc3ApDQorCQlpZiAoKGxlbiA9IHAgLSBzcCkpDQogCQkJV1Ioc3As IGxlbik7DQogCX0NCiAJcmV0dXJuIDA7DQpAQCAtMTQwLDE1ICsxNDAsMTUg QEANCiAJCXVfaW50IGJsZW47DQogCQl1X2ludCBsZW47DQogCQljaGFyICps Ow0KLQl9ICpsaW5lczsNCisJfSAqc2xpbmVzOw0KIAlpbnQgY2g7DQogCWNo YXIgKnA7DQogCWludCBibGVuLCBjbnQsIHJlY25vLCB3cmFwOw0KIAljaGFy ICpzcDsNCiANCi0JaWYgKChsaW5lcyA9IG1hbGxvYyhvZmYgKiBzaXplb2Yo KmxpbmVzKSkpID09IE5VTEwpDQorCWlmICgoc2xpbmVzID0gbWFsbG9jKG9m ZiAqIHNpemVvZigqc2xpbmVzKSkpID09IE5VTEwpDQogCQllcnIoMSwgIm1h bGxvYyIpOw0KLQliemVybyhsaW5lcywgb2ZmICogc2l6ZW9mKCpsaW5lcykp Ow0KKwliemVybyhzbGluZXMsIG9mZiAqIHNpemVvZigqc2xpbmVzKSk7DQog CXNwID0gTlVMTDsNCiAJYmxlbiA9IGNudCA9IHJlY25vID0gd3JhcCA9IDA7 DQogDQpAQCAtMTYwLDEzICsxNjAsMTMgQEANCiAJCX0NCiAJCSpwKysgPSBj aDsNCiAJCWlmIChjaCA9PSAnXG4nKSB7DQotCQkJaWYgKGxpbmVzW3JlY25v XS5ibGVuIDwgY250KSB7DQotCQkJCWxpbmVzW3JlY25vXS5ibGVuID0gY250 ICsgMjU2Ow0KLQkJCQlpZiAoKGxpbmVzW3JlY25vXS5sID0gcmVhbGxvYyhs aW5lc1tyZWNub10ubCwNCi0JCQkJICAgIGxpbmVzW3JlY25vXS5ibGVuKSkg PT0gTlVMTCkNCisJCQlpZiAoc2xpbmVzW3JlY25vXS5ibGVuIDwgKHVfaW50 KWNudCkgew0KKwkJCQlzbGluZXNbcmVjbm9dLmJsZW4gPSBjbnQgKyAyNTY7 DQorCQkJCWlmICgoc2xpbmVzW3JlY25vXS5sID0gcmVhbGxvYyhzbGluZXNb cmVjbm9dLmwsDQorCQkJCSAgICBzbGluZXNbcmVjbm9dLmJsZW4pKSA9PSBO VUxMKQ0KIAkJCQkJZXJyKDEsICJyZWFsbG9jIik7DQogCQkJfQ0KLQkJCWJj b3B5KHNwLCBsaW5lc1tyZWNub10ubCwgbGluZXNbcmVjbm9dLmxlbiA9IGNu dCk7DQorCQkJYmNvcHkoc3AsIHNsaW5lc1tyZWNub10ubCwgc2xpbmVzW3Jl Y25vXS5sZW4gPSBjbnQpOw0KIAkJCWNudCA9IDA7DQogCQkJcCA9IHNwOw0K IAkJCWlmICgrK3JlY25vID09IG9mZikgew0KQEAgLTE4MCw4ICsxODAsOCBA QA0KIAkJcmV0dXJuIDE7DQogCX0NCiAJaWYgKGNudCkgew0KLQkJbGluZXNb cmVjbm9dLmwgPSBzcDsNCi0JCWxpbmVzW3JlY25vXS5sZW4gPSBjbnQ7DQor CQlzbGluZXNbcmVjbm9dLmwgPSBzcDsNCisJCXNsaW5lc1tyZWNub10ubGVu ID0gY250Ow0KIAkJaWYgKCsrcmVjbm8gPT0gb2ZmKSB7DQogCQkJd3JhcCA9 IDE7DQogCQkJcmVjbm8gPSAwOw0KQEAgLTE5MCwxNiArMTkwLDE2IEBADQog DQogCWlmIChyZmxhZykgew0KIAkJZm9yIChjbnQgPSByZWNubyAtIDE7IGNu dCA+PSAwOyAtLWNudCkNCi0JCQlXUihsaW5lc1tjbnRdLmwsIGxpbmVzW2Nu dF0ubGVuKTsNCisJCQlXUihzbGluZXNbY250XS5sLCBzbGluZXNbY250XS5s ZW4pOw0KIAkJaWYgKHdyYXApDQogCQkJZm9yIChjbnQgPSBvZmYgLSAxOyBj bnQgPj0gcmVjbm87IC0tY250KQ0KLQkJCQlXUihsaW5lc1tjbnRdLmwsIGxp bmVzW2NudF0ubGVuKTsNCisJCQkJV1Ioc2xpbmVzW2NudF0ubCwgc2xpbmVz W2NudF0ubGVuKTsNCiAJfSBlbHNlIHsNCiAJCWlmICh3cmFwKQ0KIAkJCWZv ciAoY250ID0gcmVjbm87IGNudCA8IG9mZjsgKytjbnQpDQotCQkJCVdSKGxp bmVzW2NudF0ubCwgbGluZXNbY250XS5sZW4pOw0KKwkJCQlXUihzbGluZXNb Y250XS5sLCBzbGluZXNbY250XS5sZW4pOw0KIAkJZm9yIChjbnQgPSAwOyBj bnQgPCByZWNubzsgKytjbnQpDQotCQkJV1IobGluZXNbY250XS5sLCBsaW5l c1tjbnRdLmxlbik7DQorCQkJV1Ioc2xpbmVzW2NudF0ubCwgc2xpbmVzW2Nu dF0ubGVuKTsNCiAJfQ0KIAlyZXR1cm4gMDsNCiB9DQpJbmRleDogcmV2ZXJz ZS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUv bmN2cy9zcmMvdXNyLmJpbi90YWlsL3JldmVyc2UuYyx2DQpyZXRyaWV2aW5n IHJldmlzaW9uIDEuMTINCmRpZmYgLXUgLXIxLjEyIHJldmVyc2UuYw0KLS0t IHJldmVyc2UuYwkxIFNlcCAyMDAxIDIyOjIyOjQ0IC0wMDAwCTEuMTINCisr KyByZXZlcnNlLmMJMjQgTm92IDIwMDEgMTk6MzQ6MTggLTAwMDANCkBAIC0x MDEsNiArMTAxLDggQEANCiAJCWNhc2UgUkVWRVJTRToNCiAJCQlyX2J1Zihm cCk7DQogCQkJYnJlYWs7DQorCQljYXNlIE5PVFNFVDoNCisJCQlicmVhazsN CiAJCX0NCiB9DQogDQpJbmRleDogdGFpbC5jDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvdXNyLmJpbi90YWls L3RhaWwuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTINCmRpZmYgLXUg LXIxLjEyIHRhaWwuYw0KLS0tIHRhaWwuYwkyIE9jdCAyMDAxIDA2OjIyOjAx IC0wMDAwCTEuMTINCisrKyB0YWlsLmMJMjQgTm92IDIwMDEgMTk6MzY6MTYg LTAwMDANCkBAIC0xNjksNyArMTY5LDcgQEANCiAJfQ0KIA0KIAlpZiAoKmFy Z3YpDQotCQlmb3IgKGZpcnN0ID0gMTsgZm5hbWUgPSAqYXJndisrOykgew0K KwkJZm9yIChmaXJzdCA9IDE7IChmbmFtZSA9ICphcmd2KyspOykgew0KIAkJ CWlmICgoZnAgPSBmb3BlbihmbmFtZSwgInIiKSkgPT0gTlVMTCB8fA0KIAkJ CSAgICBmc3RhdChmaWxlbm8oZnApLCAmc2IpKSB7DQogCQkJCWllcnIoKTsN CkBAIC0xODksNyArMTg5LDcgQEANCiAJCQkodm9pZClmY2xvc2UoZnApOw0K IAkJfQ0KIAllbHNlIHsNCi0JCWZuYW1lID0gInN0ZGluIjsNCisJCWZuYW1l ID0gc3RyZHVwKCJzdGRpbiIpOw0KIA0KIAkJaWYgKGZzdGF0KGZpbGVubyhz dGRpbiksICZzYikpIHsNCiAJCQlpZXJyKCk7DQpAQCAtMjI3LDcgKzIyNyw3 IEBADQogCXNpemVfdCBsZW47DQogCWNoYXIgKnN0YXJ0Ow0KIA0KLQl3aGls ZSAoYXAgPSAqKythcmd2KSB7DQorCXdoaWxlICgoYXAgPSAqKythcmd2KSkg ew0KIAkJLyogUmV0dXJuIGlmICItLSIgb3Igbm90IGFuIG9wdGlvbiBvZiBh bnkgZm9ybS4gKi8NCiAJCWlmIChhcFswXSAhPSAnLScpIHsNCiAJCQlpZiAo YXBbMF0gIT0gJysnKQ0K --0-1268137247-1006630989=:87876-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200111242000.fAOK02P75776>