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>
