Skip site navigation (1)Skip section navigation (2)
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>