From owner-freebsd-hackers Fri Oct 20 3:29: 9 2000 Delivered-To: freebsd-hackers@freebsd.org Received: from bratislava.telecom.sk (bratislava.telecom.sk [195.146.128.61]) by hub.freebsd.org (Postfix) with ESMTP id 30F0D37B479 for ; Fri, 20 Oct 2000 03:29:01 -0700 (PDT) Received: from sdxnet.com (prem182-ba-ad3.telecom.sk [212.5.221.182]) by bratislava.telecom.sk (8.9.3/8.9.3) with ESMTP id MAA27041 for ; Fri, 20 Oct 2000 12:31:55 +0200 (MET DST) Received: (from tomas@localhost) by sdxnet.com (8.9.3/8.9.3) id MAA39266 for freebsd-hackers@freebsd.org; Fri, 20 Oct 2000 12:23:45 GMT From: Tomas Hruz Organization: Solidnet Ltd. To: freebsd-hackers@FreeBSD.ORG Subject: burncd utility for atapi burners Date: Fri, 20 Oct 2000 11:27:09 +0000 X-Mailer: KMail [version 1.0.21] Content-Type: Multipart/Mixed; boundary="Boundary-=_yzAZOHsNGHcxSfUBSnsNWfUJeLgt" MIME-Version: 1.0 Message-Id: <00102012234401.39055@srv.ba.sdxnet.com> Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG --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 #include #include @@ -40,10 +45,13 @@ #include #include +#include + #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,%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