Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 20 Oct 2000 11:27:09 +0000
From:      Tomas Hruz <tomas@sdxnet.com>
To:        freebsd-hackers@FreeBSD.ORG
Subject:   burncd utility for atapi burners
Message-ID:  <00102012234401.39055@srv.ba.sdxnet.com>

next in thread | raw e-mail | index | archive | help

--Boundary-=_yzAZOHsNGHcxSfUBSnsNWfUJeLgt
Content-Type: text/plain
Content-Transfer-Encoding: 8bit

I have corrected a problem with msinfo command in burncd. The major problem was
that the method used was not robust enough (I am using Misumi CR 4801
atapi  burner). In the response to 

burncd -f /dev/acd1c msinfo

the first LBA of the last track on the media  was always 0 (incorrect in the
case of more sessions) and the next writeable address was correct. 

I have adopted a method from kernel (from cd9660 file system) to obtain more
robust solution which I hope will cover wider selection of drives (because on
all drives you can mount cd9660). Here is the change in diff -u form:

-------------------------------------------------------------

--- burncd.c	2000/08/17 12:45:14	1.1.1.1
+++ burncd.c	2000/10/03 11:33:09	1.2
@@ -28,6 +28,11 @@
  * $FreeBSD: src/usr.sbin/burncd/burncd.c,v 1.10 2000/03/03 23:17:27 sos Exp $
  */
 
+/*-
+ * t.h. changes copyright (c) 2000 Tomas Hruz
+ * All rights reserved.
+ */
+
 #include <unistd.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -40,10 +45,13 @@
 #include <sys/cdio.h>
 #include <sys/cdrio.h>
 
+#include <sys/param.h>
+
 #define BLOCKS	16
 
 static int fd, saved_block_size;
 void cleanup(int);
+int iso_get_ssector_user(int);
 
 int
 main(int argc, char **argv)
@@ -109,15 +117,16 @@
 			break;
 		}
 		if (!strcmp(argv[arg], "msinfo")) {
-		        struct ioc_read_toc_single_entry entry;
+		  /*t.h.*//* struct ioc_read_toc_single_entry entry;
 
 			bzero(&entry, sizeof(struct ioc_read_toc_single_entry));
 			entry.address_format = CD_LBA_FORMAT;
-			if (ioctl(fd, CDIOREADTOCENTRY, &entry) < 0) 
-				err(EX_IOERR, "ioctl(CDIOREADTOCENTRY)");
+			if (ioctl(fd, CDIOREADTOCENTRY, &entry) < 0) {
+			  err(EX_IOERR, "ioctl(CDIOREADTOCENTRY)"); 
+			  } */
 			if (ioctl(fd, CDRIOCNEXTWRITEABLEADDR, &addr) < 0) 
 				err(EX_IOERR, "ioctl(CDRIOCNEXTWRITEABLEADDR)");
-			fprintf(stderr, "%d, %d\n", entry.entry.addr.lba, addr);
+			fprintf(stdout, "%d,%d\n", iso_get_ssector_user(fd), addr);
 			break;
 		}
 		if (!strcmp(argv[arg], "blank")) {
@@ -229,4 +238,38 @@
 {
 	if (ioctl(fd, CDRIOCSETBLOCKSIZE, &saved_block_size) < 0) 
        		err(EX_IOERR, "ioctl(CDRIOCSETBLOCKSIZE)");
+}
+
+/* t.h.
+ * Try to find the start of the last data track on this CD-ROM.  This
+ * is used to mount the last session of a multi-session CD.  Bail out
+ * and return 0 if we fail, this is always a safe bet. Procedure from
+ * kernel /usr/src/sys/isofs/cd9660/cd9660_vfsops.c(iso_get_ssector).
+ * Changed for use outside of the kernel.
+ */
+int iso_get_ssector_user(fd)
+	int fd;
+{
+	struct ioc_toc_header h;
+	struct ioc_read_toc_single_entry t;
+	int i;
+
+
+	if (ioctl(fd, CDIOREADTOCHEADER, (caddr_t)&h) != 0)
+		return 0;
+
+	for (i = h.ending_track; i >= 0; i--) {
+		t.address_format = CD_LBA_FORMAT;
+		t.track = i;
+		if (ioctl(fd, CDIOREADTOCENTRY, (caddr_t)&t) != 0)
+			return 0;
+		if ((t.entry.control & 4) != 0)
+			/* found a data track */
+			break;
+	}
+
+	if (i < 0)
+		return 0;
+
+	return ntohl(t.entry.addr.lba);
 }

-------------------------------------------------------------------
Moreover there was a minor problem that the output was to stderr and had the
format %d,<space>%d and therefore it was harder to use it directly in mkisofs as
.... -C  `burncd -f /dev/acd1c msinfo`. I changed this to stdout and format
%d,%d.

I would like to communicate the proposed changes to the author but I did not
find his address. Could somebody provide his email to me?

Yours tomas hruz

--Boundary-=_yzAZOHsNGHcxSfUBSnsNWfUJeLgt
Content-Type: text/english;
  name="burncd.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="burncd.c"

LyotCiAqIENvcHlyaWdodCAoYykgMjAwMCBT+HJlbiBTY2htaWR0CiAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICogYXJlIG1ldDoKICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLAogKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgaW1tZWRpYXRlbHkgYXQg
dGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3Qg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKICogICAgZGVyaXZlZCBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycg
QU5EIEFOWSBFWFBSRVNTIE9SCiAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKICogT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4K
ICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULAogKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAogKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICoK
ICogJEZyZWVCU0Q6IHNyYy91c3Iuc2Jpbi9idXJuY2QvYnVybmNkLmMsdiAxLjEwIDIwMDAvMDMv
MDMgMjM6MTc6Mjcgc29zIEV4cCAkCiAqLwoKLyotCiAqIHQuaC4gY2hhbmdlcyBjb3B5cmlnaHQg
KGMpIDIwMDAgVG9tYXMgSHJ1egogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKi8KCiNpbmNsdWRl
IDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1
ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8ZXJyLmg+CiNpbmNsdWRlIDxzeXNleGl0cy5oPgojaW5j
bHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgojaW5jbHVkZSA8c3lzL3N0YXQu
aD4KI2luY2x1ZGUgPHN5cy9jZGlvLmg+CiNpbmNsdWRlIDxzeXMvY2RyaW8uaD4KCiNpbmNsdWRl
IDxzeXMvcGFyYW0uaD4KCiNkZWZpbmUgQkxPQ0tTCTE2CgpzdGF0aWMgaW50IGZkLCBzYXZlZF9i
bG9ja19zaXplOwp2b2lkIGNsZWFudXAoaW50KTsKaW50IGlzb19nZXRfc3NlY3Rvcl91c2VyKGlu
dCk7CgppbnQKbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKCWludCBjaCwgc3BlZWQgPSAx
LCBwcmVlbXAgPSAwLCB0ZXN0X3dyaXRlID0gMCwgZWplY3QgPSAwLCBxdWlldCA9IDA7CgljaGFy
ICpkZXZuYW1lID0gIi9kZXYvYWNkMGMiOwoJY2hhciBidWZbMjM1MipCTE9DS1NdOwoJaW50IGFy
ZywgZmlsZSwgYWRkciwgY291bnQsIGZpbGVzaXplOwoJaW50IGJsb2NrX3NpemUgPSAwLCBjZG9w
ZW4gPSAwLCBzaXplLCB0b3Rfc2l6ZSA9IDA7CglzdHJ1Y3QgY2RyX3RyYWNrIHRyYWNrOwoJc3Ry
dWN0IHN0YXQgc3RhdDsKCgl3aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJlZjpwcXM6
dCIpKSAhPSAtMSkgewoJCXN3aXRjaCAoY2gpIHsKCQljYXNlICdlJzoKCQkJZWplY3QgPSAxOwoJ
CQlicmVhazsKCgkJY2FzZSAnZic6CgkJCWRldm5hbWUgPSBvcHRhcmc7CgkJCWJyZWFrOwoKCQlj
YXNlICdwJzoKCQkJcHJlZW1wID0gMTsKCQkJYnJlYWs7CgoJCWNhc2UgJ3EnOgoJCQlxdWlldCA9
IDE7CgkJCWJyZWFrOwoKCQljYXNlICdzJzoKCQkJc3BlZWQgPSBhdG9pKG9wdGFyZyk7CgkJCWJy
ZWFrOwoKCQljYXNlICd0JzoKCQkJdGVzdF93cml0ZSA9IDE7CgkJCWJyZWFrOwoKCQlkZWZhdWx0
OiAKCQkJZXhpdChFWF9VU0FHRSk7CgkJfQoJfQoJYXJnYyAtPSBvcHRpbmQ7Cglhcmd2ICs9IG9w
dGluZDsKCglpZiAoKGZkID0gb3BlbihkZXZuYW1lLCBPX1JEV1IsIDApKSA8IDApCgkJZXJyKEVY
X05PSU5QVVQsICJvcGVuKCVzKSIsIGRldm5hbWUpOwoKCWlmIChpb2N0bChmZCwgQ0RSSU9DV1JJ
VEVTUEVFRCwgJnNwZWVkKSA8IDApIAogICAgICAgCQllcnIoRVhfSU9FUlIsICJpb2N0bChDRFJJ
T0NXUklURVNQRUVEKSIpOwoKCWlmIChpb2N0bChmZCwgQ0RSSU9DR0VUQkxPQ0tTSVpFLCAmc2F2
ZWRfYmxvY2tfc2l6ZSkgPCAwKSAKICAgICAgIAkJZXJyKEVYX0lPRVJSLCAiaW9jdGwoQ0RSSU9D
R0VUQkxPQ0tTSVpFKSIpOwoKCWVycl9zZXRfZXhpdChjbGVhbnVwKTsKCglmb3IgKGFyZyA9IDA7
IGFyZyA8IGFyZ2M7IGFyZysrKSB7CgkJaWYgKCFzdHJjbXAoYXJndlthcmddLCAiZml4YXRlIikp
IHsKCQkJaWYgKCFxdWlldCkKCQkJCWZwcmludGYoc3RkZXJyLCAiZml4YXRpbmcgQ0QsIHBsZWFz
ZSB3YWl0Li5cbiIpOwoJCQlpZiAoaW9jdGwoZmQsIENEUklPQ0NMT1NFRElTSykgPCAwKQogICAg
ICAgIAkJCWVycihFWF9JT0VSUiwgImlvY3RsKENEUklPQ0NMT1NFRElTSykiKTsKCQkJYnJlYWs7
CgkJfQoJCWlmICghc3RyY21wKGFyZ3ZbYXJnXSwgIm1zaW5mbyIpKSB7CgkJICAvKnQuaC4qLy8q
IHN0cnVjdCBpb2NfcmVhZF90b2Nfc2luZ2xlX2VudHJ5IGVudHJ5OwoKCQkJYnplcm8oJmVudHJ5
LCBzaXplb2Yoc3RydWN0IGlvY19yZWFkX3RvY19zaW5nbGVfZW50cnkpKTsKCQkJZW50cnkuYWRk
cmVzc19mb3JtYXQgPSBDRF9MQkFfRk9STUFUOwoJCQlpZiAoaW9jdGwoZmQsIENESU9SRUFEVE9D
RU5UUlksICZlbnRyeSkgPCAwKSB7CgkJCSAgZXJyKEVYX0lPRVJSLCAiaW9jdGwoQ0RJT1JFQURU
T0NFTlRSWSkiKTsgCgkJCSAgfSAqLwoJCQlpZiAoaW9jdGwoZmQsIENEUklPQ05FWFRXUklURUFC
TEVBRERSLCAmYWRkcikgPCAwKSAKCQkJCWVycihFWF9JT0VSUiwgImlvY3RsKENEUklPQ05FWFRX
UklURUFCTEVBRERSKSIpOwoJCQlmcHJpbnRmKHN0ZG91dCwgIiVkLCVkXG4iLCBpc29fZ2V0X3Nz
ZWN0b3JfdXNlcihmZCksIGFkZHIpOwoJCQlicmVhazsKCQl9CgkJaWYgKCFzdHJjbXAoYXJndlth
cmddLCAiYmxhbmsiKSkgewoJCQlpZiAoIXF1aWV0KQoJCQkJZnByaW50ZihzdGRlcnIsICJibGFu
a2luZyBDRCwgcGxlYXNlIHdhaXQuLlxuIik7CgkJCWlmIChpb2N0bChmZCwgQ0RSSU9DQkxBTksp
IDwgMCkKICAgICAgICAJCQllcnIoRVhfSU9FUlIsICJpb2N0bChDRFJJT0NCTEFOSykiKTsKCQkJ
Y29udGludWU7CgkJfQoJCWlmICghc3RyY21wKGFyZ3ZbYXJnXSwgImF1ZGlvIikgfHwgIXN0cmNt
cChhcmd2W2FyZ10sICJyYXciKSkgewoJCQl0cmFjay50ZXN0X3dyaXRlID0gdGVzdF93cml0ZTsK
CQkJdHJhY2sudHJhY2tfdHlwZSA9IENEUl9EQl9SQVc7CgkJCXRyYWNrLnByZWVtcCA9IHByZWVt
cDsKCQkJYmxvY2tfc2l6ZSA9IDIzNTI7CgkJCWNvbnRpbnVlOwoJCX0KCQlpZiAoIXN0cmNtcChh
cmd2W2FyZ10sICJkYXRhIikgfHwgIXN0cmNtcChhcmd2W2FyZ10sICJtb2RlMSIpKSB7CgkJCXRy
YWNrLnRlc3Rfd3JpdGUgPSB0ZXN0X3dyaXRlOwoJCQl0cmFjay50cmFja190eXBlID0gQ0RSX0RC
X1JPTV9NT0RFMTsKCQkJdHJhY2sucHJlZW1wID0gMDsKCQkJYmxvY2tfc2l6ZSA9IDIwNDg7CgkJ
CWNvbnRpbnVlOwoJCX0KCQlpZiAoIXN0cmNtcChhcmd2W2FyZ10sICJtb2RlMiIpKSB7CgkJCXRy
YWNrLnRlc3Rfd3JpdGUgPSB0ZXN0X3dyaXRlOwoJCQl0cmFjay50cmFja190eXBlID0gQ0RSX0RC
X1JPTV9NT0RFMjsKCQkJdHJhY2sucHJlZW1wID0gMDsKCQkJYmxvY2tfc2l6ZSA9IDIzMzY7CgkJ
CWNvbnRpbnVlOwoJCX0KCQlpZiAoIXN0cmNtcChhcmd2W2FyZ10sICJYQW1vZGUxIikpIHsKCQkJ
dHJhY2sudGVzdF93cml0ZSA9IHRlc3Rfd3JpdGU7CgkJCXRyYWNrLnRyYWNrX3R5cGUgPSBDRFJf
REJfWEFfTU9ERTE7CgkJCXRyYWNrLnByZWVtcCA9IDA7CgkJCWJsb2NrX3NpemUgPSAyMDQ4OwoJ
CQljb250aW51ZTsKCQl9CgkJaWYgKCFibG9ja19zaXplKQoJCQllcnIoRVhfTk9JTlBVVCwgIm5v
IGRhdGEgZm9ybWF0IHNlbGVjdGVkIik7CgoJCWlmICgoZmlsZSA9IG9wZW4oYXJndlthcmddLCBP
X1JET05MWSwgMCkpIDwgMCkKCQkJZXJyKEVYX05PSU5QVVQsICJvcGVuKCVzKSIsIGFyZ3ZbYXJn
XSk7CgoJCWlmICghY2RvcGVuKSB7CgkJCWlmIChpb2N0bChmZCwgQ0RSSU9DT1BFTkRJU0spIDwg
MCkKICAgICAgICAJCQllcnIoRVhfSU9FUlIsICJpb2N0bChDRFJJT0NPUEVORElTSykiKTsKCQkJ
Y2RvcGVuID0gMTsKCQl9CgkJaWYgKGlvY3RsKGZkLCBDRFJJT0NPUEVOVFJBQ0ssICZ0cmFjaykg
PCAwKQogICAgICAgIAkJZXJyKEVYX0lPRVJSLCAiaW9jdGwoQ0RSSU9DT1BFTlRSQUNLKSIpOwoK
CQlpZiAoaW9jdGwoZmQsIENEUklPQ05FWFRXUklURUFCTEVBRERSLCAmYWRkcikgPCAwKSAKICAg
ICAgICAJCWVycihFWF9JT0VSUiwgImlvY3RsKENEUklPQ05FWFRXUklURUFCTEVBRERSKSIpOwoK
CQlpZiAoZnN0YXQoZmlsZSwgJnN0YXQpIDwgMCkKCQkJZXJyKEVYX0lPRVJSLCAiZnN0YXQoJXMp
IiwgYXJndlthcmddKTsKCQlmaWxlc2l6ZSA9IHN0YXQuc3Rfc2l6ZSAvIDEwMjQ7CgkJaWYgKCFx
dWlldCkgewoJCQlmcHJpbnRmKHN0ZGVyciwgIm5leHQgd3JpdGVhYmxlIExCQSAlZFxuIiwgYWRk
cik7CgkJCWZwcmludGYoc3RkZXJyLCAid3JpdGluZyBmcm9tIGZpbGUgJXMgc2l6ZSAlZCBLQlxu
IiwKCQkJCWFyZ3ZbYXJnXSwgZmlsZXNpemUpOwoJCX0KCQlsc2VlayhmZCwgYWRkciAqIGJsb2Nr
X3NpemUsIFNFRUtfU0VUKTsKCQlzaXplID0gMDsKCQlpZiAoZmlsZXNpemUgPT0gMCkKCQkJZmls
ZXNpemUrKzsJLyogY2hlYXQsIGF2b2lkIGRpdmlkZSBieSB6ZXJvICovCgoJCXdoaWxlICgoY291
bnQgPSByZWFkKGZpbGUsIGJ1ZiwgYmxvY2tfc2l6ZSAqIEJMT0NLUykpID4gMCkgewkKCQkJaW50
IHJlczsKCQkJaWYgKGNvdW50ICUgYmxvY2tfc2l6ZSkgewoJCQkJLyogcGFkIGZpbGUgdG8gJSBi
bG9ja19zaXplICovCgkJCQliemVybygmYnVmW2NvdW50XSwgYmxvY2tfc2l6ZSAqIEJMT0NLUyAt
IGNvdW50KTsKCQkJCWNvdW50ID0gKChjb3VudCAvIGJsb2NrX3NpemUpICsgMSkgKiBibG9ja19z
aXplOwoJCQl9CgkJCWlmICgocmVzID0gd3JpdGUoZmQsIGJ1ZiwgY291bnQpKSAhPSBjb3VudCkg
ewoKCQkJCWZwcmludGYoc3RkZXJyLCAiXG5vbmx5IHdyb3RlICVkIG9mICVkIGJ5dGVzXG4iLAoJ
CQkJCXJlcywgY291bnQpOwoJCQkJYnJlYWs7CgkJCX0KCQkJc2l6ZSArPSBjb3VudDsKCQkJdG90
X3NpemUgKz0gY291bnQ7CgkJCWlmICghcXVpZXQpIHsKCQkJCWludCBwY3Q7CgoJCQkJcGN0ID0g
KHNpemUgLyAxMDI0KSAqIDEwMCAvIGZpbGVzaXplOwoJCQkJZnByaW50ZihzdGRlcnIsICJ3cml0
dGVuIHRoaXMgdHJhY2sgJWQgS0IiCgkJCQkJCSIgKCVkJSUpIHRvdGFsICVkIEtCXHIiLAoJCQkJ
CQlzaXplLzEwMjQsIHBjdCwgdG90X3NpemUvMTAyNCk7CgkJCX0KCQl9CgkJaWYgKCFxdWlldCkK
CQkJZnByaW50ZihzdGRlcnIsICJcbiIpOwoJCWNsb3NlKGZpbGUpOwoJCWlmIChpb2N0bChmZCwg
Q0RSSU9DQ0xPU0VUUkFDSykgPCAwKQogICAgICAgIAkJZXJyKEVYX0lPRVJSLCAiaW9jdGwoQ0RS
SU9DQ0xPU0VUUkFDSykiKTsKCX0KCglpZiAoaW9jdGwoZmQsIENEUklPQ1NFVEJMT0NLU0laRSwg
JnNhdmVkX2Jsb2NrX3NpemUpIDwgMCkgCiAgICAgICAJCWVycihFWF9JT0VSUiwgImlvY3RsKENE
UklPQ1NFVEJMT0NLU0laRSkiKTsKCglpZiAoZWplY3QpCgkJaWYgKGlvY3RsKGZkLCBDRElPQ0VK
RUNUKSA8IDApCgkJCWVycihFWF9JT0VSUiwgImlvY3RsKENESU9DRUpFQ1QpIik7CgljbG9zZShm
ZCk7Cn0KCnZvaWQgY2xlYW51cChpbnQgZHVtbXkpCnsKCWlmIChpb2N0bChmZCwgQ0RSSU9DU0VU
QkxPQ0tTSVpFLCAmc2F2ZWRfYmxvY2tfc2l6ZSkgPCAwKSAKICAgICAgIAkJZXJyKEVYX0lPRVJS
LCAiaW9jdGwoQ0RSSU9DU0VUQkxPQ0tTSVpFKSIpOwp9CgovKiB0LmguCiAqIFRyeSB0byBmaW5k
IHRoZSBzdGFydCBvZiB0aGUgbGFzdCBkYXRhIHRyYWNrIG9uIHRoaXMgQ0QtUk9NLiAgVGhpcwog
KiBpcyB1c2VkIHRvIG1vdW50IHRoZSBsYXN0IHNlc3Npb24gb2YgYSBtdWx0aS1zZXNzaW9uIENE
LiAgQmFpbCBvdXQKICogYW5kIHJldHVybiAwIGlmIHdlIGZhaWwsIHRoaXMgaXMgYWx3YXlzIGEg
c2FmZSBiZXQuIFByb2NlZHVyZSBmcm9tCiAqIGtlcm5lbCAvdXNyL3NyYy9zeXMvaXNvZnMvY2Q5
NjYwL2NkOTY2MF92ZnNvcHMuYyhpc29fZ2V0X3NzZWN0b3IpLgogKiBDaGFuZ2VkIGZvciB1c2Ug
b3V0c2lkZSBvZiB0aGUga2VybmVsLgogKi8KaW50IGlzb19nZXRfc3NlY3Rvcl91c2VyKGZkKQoJ
aW50IGZkOwp7CglzdHJ1Y3QgaW9jX3RvY19oZWFkZXIgaDsKCXN0cnVjdCBpb2NfcmVhZF90b2Nf
c2luZ2xlX2VudHJ5IHQ7CglpbnQgaTsKCgoJaWYgKGlvY3RsKGZkLCBDRElPUkVBRFRPQ0hFQURF
UiwgKGNhZGRyX3QpJmgpICE9IDApCgkJcmV0dXJuIDA7CgoJZm9yIChpID0gaC5lbmRpbmdfdHJh
Y2s7IGkgPj0gMDsgaS0tKSB7CgkJdC5hZGRyZXNzX2Zvcm1hdCA9IENEX0xCQV9GT1JNQVQ7CgkJ
dC50cmFjayA9IGk7CgkJaWYgKGlvY3RsKGZkLCBDRElPUkVBRFRPQ0VOVFJZLCAoY2FkZHJfdCkm
dCkgIT0gMCkKCQkJcmV0dXJuIDA7CgkJaWYgKCh0LmVudHJ5LmNvbnRyb2wgJiA0KSAhPSAwKQoJ
CQkvKiBmb3VuZCBhIGRhdGEgdHJhY2sgKi8KCQkJYnJlYWs7Cgl9CgoJaWYgKGkgPCAwKQoJCXJl
dHVybiAwOwoKCXJldHVybiBudG9obCh0LmVudHJ5LmFkZHIubGJhKTsKfQo=

--Boundary-=_yzAZOHsNGHcxSfUBSnsNWfUJeLgt--


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?00102012234401.39055>