Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 09 Apr 2009 15:33:54 +0200
From:      =?UTF-8?B?SmVhbi1Tw6liYXN0aWVuIFDDqWRyb24=?= <dumbbell@FreeBSD.org>
To:        freebsd-current@FreeBSD.org
Subject:   New ioctl to support Enhanced CD (or Extra CD)
Message-ID:  <49DDF942.9040808@FreeBSD.org>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------050509060905070000010304
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hello,

Enhanced CD (or Extra CA) is an Audio CD with an additionnal data track
at the end. Audio tracks belong to the first session while the data
track belongs to the second session. Therefore the last audio track ends
way before the data track start.

The first consequence is that the duration of the last audio track isn't
reported correctly. Here is the output of cdcontrol(1) with such a CD[1]:
    $ cdcontrol info
    ...
    12  46:03.67   9:54.43  207142   44593  audio
    13  55:58.35   6:38.51  251735   29901   data

The expected output is:
    $ cdcontrol info
    ...
    12  46:03.67   7:22.43  207142   33193  audio
    13  55:58.35   6:38.51  251735   29901   data

A more "audible" consequence is that cdparanoia(1) copies 9'54" of data
instead of 7'22". The end of the ripped file is full of garbage.

I made a patch (attached) that adds a new ioctl to query the start
address of the last session. This new ioctl is named
CDIOREADLASTSESSIONADDR. The patch also includes changes to cdcontrol(1).

I added a new member at the end of struct acd_softc to store the last
session address. I don't know if this causes ABI breakage.

Linux' corresponding ioctl is CDROMMULTISESSION. Beside this address, it
returns a flag named "xa_flag". Currently, I don't understand what it is
but it may be useful to add it to our ioctl too if someone knows its
purpose.

Before I spend some time to teach cdparanoia(1) about this new ioctl,
I'd like some feedback on this patch, especially the name and the struct
ioc_read_last_session_addr. I would appreciate some test reports too! :)

[1] This was tested with Avishai Cohen's last album, "Aurora".

- --
Jean-Sébastien Pédron
http://www.dumbbell.fr/

PGP Key: http://www.dumbbell.fr/pgp/pubkey.asc

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (FreeBSD)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAknd+UIACgkQa+xGJsFYOlNzCgCeNz3PEoL7nqSsc1mMcKOBAYag
MUUAoIFVuhZ9lEPsvI17V3tRYCeOjvDM
=pUJY
-----END PGP SIGNATURE-----

--------------050509060905070000010304
Content-Type: text/plain;
 name="enhanced-cd-b.patch"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="enhanced-cd-b.patch"

SW5kZXg6IHVzci5zYmluL2NkY29udHJvbC9jZGNvbnRyb2wuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSB1c3Iuc2Jpbi9jZGNvbnRyb2wvY2Rjb250cm9sLmMJKHJldmlzaW9uIDE5MDQ2MykKKysr
IHVzci5zYmluL2NkY29udHJvbC9jZGNvbnRyb2wuYwkod29ya2luZyBjb3B5KQpAQCAtMTIw
LDYgKzEyMCw3IEBACiB9OwogCiBzdHJ1Y3QgY2RfdG9jX2VudHJ5CXRvY19idWZmZXJbMTAw
XTsKK3VuaW9uIG1zZl9sYmEJCWxhc3Rfc2Vzc2lvbl9hZGRyOwogCiBjb25zdCBjaGFyCSpj
ZG5hbWU7CiBpbnQJCWZkID0gLTE7CkBAIC0xMDIxLDYgKzEwMjIsMzYgQEAKIAkJCWVbMV0u
YWRkci5tc2YuZnJhbWUpOwogCWVsc2UKIAkJbmV4dCA9IG50b2hsKGVbMV0uYWRkci5sYmEp
OworCisJaWYgKCEoZS0+Y29udHJvbCAmIDQpICYmIGVbMV0uY29udHJvbCAmIDQpIHsKKwkJ
aW50IGVuZF9sYmE7CisKKwkJLyoKKwkJICogVGhlIGN1cnJlbnQgdHJhY2sgaXMgYW4gYXVk
aW8gdHJhY2sgYW5kIHRoZSBuZXh0IG9uZSBpcworCQkgKiBhIGRhdGEgdHJhY2s6IHRoaXMg
aXMgYW4gRW5oYW5jZWQgQ0QgKG9yIEV4dHJhIENEKS4gSW4KKwkJICogdGhpcyBjYXNlLCB0
aGUgY3VycmVudCB0cmFjayBlbmRzIHdheSBiZWZvcmUgdGhlIGRhdGEKKwkJICogdHJhY2su
IFdlIG11c3QgY29uc2lkZXIgdGhlIGxhc3Rfc2Vzc2lvbl9hZGRyIGluc3RlYWQuCisJCSAq
LworCisJCWlmIChsYXN0X3Nlc3Npb25fYWRkci5sYmEgIT0gMCkgeworCQkJaWYgKG1zZikg
eworCQkJCWVuZF9sYmEgPSBtc2YybGJhKGxhc3Rfc2Vzc2lvbl9hZGRyLm1zZi5taW51dGUs
CisJCQkJICAgIGxhc3Rfc2Vzc2lvbl9hZGRyLm1zZi5zZWNvbmQsCisJCQkJICAgIGxhc3Rf
c2Vzc2lvbl9hZGRyLm1zZi5mcmFtZSk7CisJCQl9IGVsc2UgeworCQkJCWVuZF9sYmEgPSBs
YXN0X3Nlc3Npb25fYWRkci5sYmE7CisJCQl9CisJCQllbmRfbGJhIC09ICg5MCArIDYwICsg
MikgKiA3NTsKKworCQkJaWYgKGVuZF9sYmEgPj0gYmxvY2sgJiYgZW5kX2xiYSA8IG5leHQp
CisJCQkJbmV4dCA9IGVuZF9sYmE7CisJCX0gZWxzZSB7CisJCQl3YXJueCgiY291bGRuJ3Qg
cXVlcnkgc2Vzc2lvbnMgaW5mb3JtYXRpb25zOyAiCisJCQkgICAgImxhc3QgYXVkaW8gdHJh
Y2tcbmVmZmVjdGl2ZSBkdXJhdGlvbiAiCisJCQkgICAgIm1heSBiZSBzaG9ydGVyIHRoYW4g
dGhlIHJlcG9ydGVkIGR1cmF0aW9uISIpOworCQl9CisJfQorCiAJbGVuID0gbmV4dCAtIGJs
b2NrOwogCS8qIFRha2UgaW50byBhY2NvdW50IGEgc3RhcnQgb2Zmc2V0IHRpbWUuICovCiAJ
bGJhMm1zZiAobGVuIC0gMTUwLCAmbSwgJnMsICZmKTsKQEAgLTEwNjksMTQgKzExMDAsMjgg
QEAKIAogaW50IHJlYWRfdG9jX2VudHJ5cyAoaW50IGxlbikKIHsKKwlpbnQgcmV0OwogCXN0
cnVjdCBpb2NfcmVhZF90b2NfZW50cnkgdDsKKwlzdHJ1Y3QgaW9jX3JlYWRfbGFzdF9zZXNz
aW9uX2FkZHIgbHNhOwogCiAJdC5hZGRyZXNzX2Zvcm1hdCA9IG1zZiA/IENEX01TRl9GT1JN
QVQgOiBDRF9MQkFfRk9STUFUOwogCXQuc3RhcnRpbmdfdHJhY2sgPSAwOwogCXQuZGF0YV9s
ZW4gPSBsZW47CiAJdC5kYXRhID0gdG9jX2J1ZmZlcjsKIAotCXJldHVybiAoaW9jdGwgKGZk
LCBDRElPUkVBRFRPQ0VOVFJZUywgKGNoYXIgKikgJnQpKTsKKwlyZXQgPSBpb2N0bCAoZmQs
IENESU9SRUFEVE9DRU5UUllTLCAoY2hhciAqKSAmdCk7CisJaWYgKHJldCAhPSAwKQorCQly
ZXR1cm4gKHJldCk7CisKKwlsc2EuYWRkcmVzc19mb3JtYXQgPSBtc2YgPyBDRF9NU0ZfRk9S
TUFUIDogQ0RfTEJBX0ZPUk1BVDsKKworCXJldCA9IGlvY3RsIChmZCwgQ0RJT1JFQURMQVNU
U0VTU0lPTkFERFIsIChjaGFyICopICZsc2EpOworCWlmIChyZXQgPT0gMCkgeworCQltZW1j
cHkoJmxhc3Rfc2Vzc2lvbl9hZGRyLCAmbHNhLmFkZHIsCisJCSAgICBzaXplb2YobGFzdF9z
ZXNzaW9uX2FkZHIpKTsKKwl9CisKKwlyZXR1cm4gKDApOwogfQogCiBpbnQgcGxheV9tc2Yg
KGludCBzdGFydF9tLCBpbnQgc3RhcnRfcywgaW50IHN0YXJ0X2YsCkluZGV4OiBzeXMvY2Ft
L3Njc2kvc2NzaV9jZC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9jYW0vc2NzaS9zY3NpX2Nk
LmMJKHJldmlzaW9uIDE5MDQ2MykKKysrIHN5cy9jYW0vc2NzaS9zY3NpX2NkLmMJKHdvcmtp
bmcgY29weSkKQEAgLTI1Myw3ICsyNTMsOCBAQAogCQkJCXVfaW50MzJfdCBzZW5zZV9mbGFn
cyk7CiBzdGF0aWMJaW50CQljZHJlYWR0b2Moc3RydWN0IGNhbV9wZXJpcGggKnBlcmlwaCwg
dV9pbnQzMl90IG1vZGUsIAogCQkJCSAgdV9pbnQzMl90IHN0YXJ0LCB1X2ludDhfdCAqZGF0
YSwgCi0JCQkJICB1X2ludDMyX3QgbGVuLCB1X2ludDMyX3Qgc2Vuc2VfZmxhZ3MpOworCQkJ
CSAgdV9pbnQzMl90IGxlbiwgdV9pbnQ4X3QgY29udHJvbCwKKwkJCQkgIHVfaW50MzJfdCBz
ZW5zZV9mbGFncyk7CiBzdGF0aWMJaW50CQljZGdldG1vZGUoc3RydWN0IGNhbV9wZXJpcGgg
KnBlcmlwaCwgCiAJCQkJICBzdHJ1Y3QgY2RfbW9kZV9wYXJhbXMgKmRhdGEsIHVfaW50MzJf
dCBwYWdlKTsKIHN0YXRpYwlpbnQJCWNkc2V0bW9kZShzdHJ1Y3QgY2FtX3BlcmlwaCAqcGVy
aXBoLApAQCAtMjEyMiw3ICsyMTIzLDggQEAKIAkJCQkgICgidHJ5aW5nIHRvIGRvIENESU9S
RUFEVE9DSEVBREVSXG4iKSk7CiAKIAkJCWVycm9yID0gY2RyZWFkdG9jKHBlcmlwaCwgMCwg
MCwgKHVfaW50OF90ICopdGgsIAotCQkJCSAgICAgICAgICBzaXplb2YgKCp0aCksIC8qc2Vu
c2VfZmxhZ3MqLzApOworCQkJCSAgICAgICAgICBzaXplb2YgKCp0aCksIC8qY29udHJvbCov
MCwKKwkJCQkgICAgICAgICAgLypzZW5zZV9mbGFncyovMCk7CiAJCQlpZiAoZXJyb3IpIHsK
IAkJCQlmcmVlKHRoLCBNX1NDU0lDRCk7CiAJCQkJY2FtX3BlcmlwaF91bmxvY2socGVyaXBo
KTsKQEAgLTIxNzQsNyArMjE3Niw4IEBACiAKIAkJCXRoID0gJmRhdGEtPmhlYWRlcjsKIAkJ
CWVycm9yID0gY2RyZWFkdG9jKHBlcmlwaCwgMCwgMCwgKHVfaW50OF90ICopdGgsIAotCQkJ
CQkgIHNpemVvZiAoKnRoKSwgLypzZW5zZV9mbGFncyovMCk7CisJCQkJCSAgc2l6ZW9mICgq
dGgpLCAvKmNvbnRyb2wqLzAsCisJCQkJCSAgLypzZW5zZV9mbGFncyovMCk7CiAJCQlpZiAo
ZXJyb3IpIHsKIAkJCQlmcmVlKGRhdGEsIE1fU0NTSUNEKTsKIAkJCQlmcmVlKGxlYWQsIE1f
U0NTSUNEKTsKQEAgLTIyMzMsNiArMjIzNiw3IEBACiAJCQkJCQkgIHN0YXJ0aW5nX3RyYWNr
LAogCQkJCQkJICAodV9pbnQ4X3QgKilkYXRhLAogCQkJCQkJICByZWFkbGVuICsgc2l6ZW9m
ICgqdGgpLAorCQkJCQkJICAvKmNvbnRyb2wqLzAsCiAJCQkJCQkgIC8qc2Vuc2VfZmxhZ3Mq
LzApOwogCQkJCWlmIChlcnJvcikgewogCQkJCQlmcmVlKGRhdGEsIE1fU0NTSUNEKTsKQEAg
LTIyNTAsNiArMjI1NCw3IEBACiAJCQkJZXJyb3IgPSBjZHJlYWR0b2MocGVyaXBoLCB0ZS0+
YWRkcmVzc19mb3JtYXQsCiAJCQkJCQkgIExFQURPVVQsICh1X2ludDhfdCAqKWxlYWQsCiAJ
CQkJCQkgIHNpemVvZigqbGVhZCksCisJCQkJCQkgIC8qY29udHJvbCovMCwKIAkJCQkJCSAg
LypzZW5zZV9mbGFncyovMCk7CiAJCQkJaWYgKGVycm9yKSB7CiAJCQkJCWZyZWUoZGF0YSwg
TV9TQ1NJQ0QpOwpAQCAtMjI5OSw3ICsyMzA0LDggQEAKIAogCQkJdGggPSAmZGF0YS0+aGVh
ZGVyOwogCQkJZXJyb3IgPSBjZHJlYWR0b2MocGVyaXBoLCAwLCAwLCAodV9pbnQ4X3QgKil0
aCwKLQkJCQkJICBzaXplb2YgKCp0aCksIC8qc2Vuc2VfZmxhZ3MqLzApOworCQkJCQkgIHNp
emVvZiAoKnRoKSwgLypjb250cm9sKi8wLAorCQkJCQkgIC8qc2Vuc2VfZmxhZ3MqLzApOwog
CQkJaWYgKGVycm9yKSB7CiAJCQkJZnJlZShkYXRhLCBNX1NDU0lDRCk7CiAJCQkJY2FtX3Bl
cmlwaF91bmxvY2socGVyaXBoKTsKQEAgLTIzMzEsNiArMjMzNyw3IEBACiAKIAkJCWVycm9y
ID0gY2RyZWFkdG9jKHBlcmlwaCwgdGUtPmFkZHJlc3NfZm9ybWF0LCB0cmFjaywKIAkJCQkJ
ICAodV9pbnQ4X3QgKilkYXRhLCBzaXplb2YoKmRhdGEpLAorCQkJCQkgIC8qY29udHJvbCov
MCwKIAkJCQkJICAvKnNlbnNlX2ZsYWdzKi8wKTsKIAkJCWlmIChlcnJvcikgewogCQkJCWZy
ZWUoZGF0YSwgTV9TQ1NJQ0QpOwpAQCAtMjM0Niw2ICsyMzUzLDk2IEBACiAJCQljYW1fcGVy
aXBoX3VubG9jayhwZXJpcGgpOwogCQl9CiAJCWJyZWFrOworCWNhc2UgQ0RJT1JFQURMQVNU
U0VTU0lPTkFERFI6CisJCS8qCisJCSAqIEFuICJFbmhhbmNlZCBDRCIgKG9yICJFeHRyYSBD
RCIpIGlzIGEgQ0Qgd2l0aCBhdWRpbworCQkgKiB0cmFja3MsIHRoZW4gZGF0YSB0cmFja3Mu
IEF1ZGlvIHRyYWNrcyBhcmUgaW4gdGhlCisJCSAqIGZpcnN0IHNlc3Npb24sIHdoaWxlIGRh
dGEgdHJhY2tzIGFyZSBpbiB0aGUgc2Vjb25kCisJCSAqIHNlc3Npb24uIEJlY2F1c2Ugb2Yg
dGhlIHNwYWNlIHRha2VuIGJ5IHRoZSBmaXJzdAorCQkgKiBzZXNzaW9uJ3MgbGVhZC1vdXQg
YW5kIHRoZSBzZWNvbmQgc2Vzc2lvbidzIGxlYWQtaW4sCisJCSAqIHRoZSBkdXJhdGlvbiBv
ZiB0aGUgbGFzdCBhdWRpbyB0cmFjayBjYW4ndCBiZSBkZXRlcm1pbmVkCisJCSAqIHdpdGgg
dGhlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgdHJhY2suIFRoZXJlZm9yZSwgd2UgbmVlZAorCQkg
KiB0byBnZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIHNlY29uZCAoYW5kIGxhc3QpIHNlc3Npb24g
Zm9yCisJCSAqIHRoaXMgcHVycG9zZS4KKwkJICovCisJCXsKKwkJCXN0cnVjdCBjZF90b2Nf
c2luZ2xlICpkYXRhOworCQkJc3RydWN0IGlvY19yZWFkX2xhc3Rfc2Vzc2lvbl9hZGRyICps
c2EgPQorCQkJCShzdHJ1Y3QgaW9jX3JlYWRfbGFzdF9zZXNzaW9uX2FkZHIgKikgYWRkcjsK
KwkJCXN0cnVjdCBpb2NfdG9jX2hlYWRlciAqdGg7CisKKwkJCWRhdGEgPSBtYWxsb2Moc2l6
ZW9mKCpkYXRhKSwgTV9TQ1NJQ0QsIE1fV0FJVE9LKTsKKworCQkJY2FtX3BlcmlwaF9sb2Nr
KHBlcmlwaCk7CisJCQlDQU1fREVCVUcocGVyaXBoLT5wYXRoLCBDQU1fREVCVUdfU1VCVFJB
Q0UsIAorCQkJCSAgKCJ0cnlpbmcgdG8gZG8gQ0RJT1JFQURMQVNUU0VTU0lPTkFERFJcbiIp
KTsKKworCQkJaWYgKGxzYS0+YWRkcmVzc19mb3JtYXQgIT0gQ0RfTVNGX0ZPUk1BVAorCQkJ
ICAgICYmIGxzYS0+YWRkcmVzc19mb3JtYXQgIT0gQ0RfTEJBX0ZPUk1BVCkgeworCQkJCXBy
aW50ZigiZXJyb3IgaW4gcmVhZGxhc3RzZXNzaW9uYWRkciwgIgorCQkJCSAgICAgICAiIHJl
dHVybmluZyBFSU5WQUxcbiIpOworCQkJCWZyZWUoZGF0YSwgTV9TQ1NJQ0QpOworCQkJCWVy
cm9yID0gRUlOVkFMOworCQkJCWNhbV9wZXJpcGhfdW5sb2NrKHBlcmlwaCk7CisJCQkJYnJl
YWs7CisJCQl9CisKKwkJCXRoID0gJmRhdGEtPmhlYWRlcjsKKwkJCWVycm9yID0gY2RyZWFk
dG9jKHBlcmlwaCwgMCwgMCwgKHVfaW50OF90ICopdGgsCisJCQkJCSAgc2l6ZW9mICgqdGgp
LCAvKmNvbnRyb2wqLzAsCisJCQkJCSAgLypzZW5zZV9mbGFncyovMCk7CisJCQlpZiAoZXJy
b3IpIHsKKwkJCQlmcmVlKGRhdGEsIE1fU0NTSUNEKTsKKwkJCQljYW1fcGVyaXBoX3VubG9j
ayhwZXJpcGgpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoc29mdGMtPnF1aXJrcyAm
IENEX1FfQkNEX1RSQUNLUykgeworCQkJCS8qIHdlIGFyZSBnb2luZyB0byBoYXZlIHRvIGNv
bnZlcnQgdGhlIEJDRAorCQkJCSAqIGVuY29kaW5nIG9uIHRoZSBjZCB0byB3aGF0IGlzIGV4
cGVjdGVkCisJCQkJICovCisJCQkJdGgtPnN0YXJ0aW5nX3RyYWNrID0KKwkJCQkgICAgYmNk
MmJpbih0aC0+c3RhcnRpbmdfdHJhY2spOworCQkJCXRoLT5lbmRpbmdfdHJhY2sgPSBiY2Qy
YmluKHRoLT5lbmRpbmdfdHJhY2spOworCQkJfQorCisJCQlpZiAodGgtPnN0YXJ0aW5nX3Ry
YWNrID09IExFQURPVVQpIHsKKwkJCQkvKiBMaW51eCBzZXQgYW4gTEJBIHRvIDAnMiIgd2hl
biB0aGlzIGlzIG5vdAorCQkJCSAqIGEgbXVsdGlzZXNzaW9uIENELiAqLworCQkJCWlmIChs
c2EtPmFkZHJlc3NfZm9ybWF0ID09IENEX01TRl9GT1JNQVQpIHsKKwkJCQkJbHNhLT5hZGRy
Lm1zZi5taW51dGUgPSAwOworCQkJCQlsc2EtPmFkZHIubXNmLnNlY29uZCA9IDI7CisJCQkJ
CWxzYS0+YWRkci5tc2YuZnJhbWUgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCWxzYS0+YWRk
ci5sYmEgPSAyICogNzUgLSAxNTA7CisJCQkJfQorCisJCQkJZnJlZShkYXRhLCBNX1NDU0lD
RCk7CisJCQkJY2FtX3BlcmlwaF91bmxvY2socGVyaXBoKTsKKwkJCQlicmVhazsKKwkJCX0K
KworCQkJZXJyb3IgPSBjZHJlYWR0b2MocGVyaXBoLCBsc2EtPmFkZHJlc3NfZm9ybWF0LCAw
LAorCQkJCQkgICh1X2ludDhfdCAqKWRhdGEsIHNpemVvZigqZGF0YSksCisJCQkJCSAgLypj
b250cm9sKi8xIDw8IDYsCisJCQkJCSAgLypzZW5zZV9mbGFncyovMCk7CisJCQlpZiAoZXJy
b3IpIHsKKwkJCQlmcmVlKGRhdGEsIE1fU0NTSUNEKTsKKwkJCQljYW1fcGVyaXBoX3VubG9j
ayhwZXJpcGgpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAobHNhLT5hZGRyZXNzX2Zv
cm1hdCA9PSBDRF9NU0ZfRk9STUFUKSB7CisJCQkJYmNvcHkoJmRhdGEtPmVudHJ5LmFkZHIs
ICZsc2EtPmFkZHIsCisJCQkJICAgIHNpemVvZihsc2EtPmFkZHIpKTsKKwkJCX0gZWxzZSB7
CisJCQkJbHNhLT5hZGRyLmxiYSA9IG50b2hsKGRhdGEtPmVudHJ5LmFkZHIubGJhKTsKKwkJ
CX0KKworCQkJZnJlZShkYXRhLCBNX1NDU0lDRCk7CisJCQljYW1fcGVyaXBoX3VubG9jayhw
ZXJpcGgpOworCQl9CisJCWJyZWFrOwogCWNhc2UgQ0RJT0NTRVRQQVRDSDoKIAkJewogCQkJ
c3RydWN0IGlvY19wYXRjaCAqYXJnID0gKHN0cnVjdCBpb2NfcGF0Y2ggKilhZGRyOwpAQCAt
MjgwMyw3ICsyOTAwLDcgQEAKIAkgKiB3ZSBkb24ndCBwcmludCBhbnl0aGluZyBoZXJlIGlm
IHdlIGdldCBhbiBlcnJvciBiYWNrLgogCSAqLwogCWVycm9yID0gY2RyZWFkdG9jKHBlcmlw
aCwgMCwgMCwgKHVfaW50OF90ICopdG9jaCwgc2l6ZW9mKCp0b2NoKSwKLQkJCSAgU0ZfTk9f
UFJJTlQpOworCQkJICAvKmNvbnRyb2wqLzAsIFNGX05PX1BSSU5UKTsKIAkvKgogCSAqIEVy
cm9ycyBpbiByZWFkaW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cyBhcmVuJ3QgZmF0YWwsIHdl
IGp1c3QKIAkgKiB3b24ndCBoYXZlIGEgdmFsaWQgdGFibGUgb2YgY29udGVudHMgY2FjaGVk
LgpAQCAtMjgyOSw3ICsyOTI2LDcgQEAKIAogCWVycm9yID0gY2RyZWFkdG9jKHBlcmlwaCwg
Q0RfTVNGX0ZPUk1BVCwgdG9jaC0+c3RhcnRpbmdfdHJhY2ssCiAJCQkgICh1X2ludDhfdCAq
KSZzb2Z0Yy0+dG9jLCB0b2NsZW4gKyBzaXplb2YoKnRvY2gpLAotCQkJICBTRl9OT19QUklO
VCk7CisJCQkgIC8qY29udHJvbCovMCwgU0ZfTk9fUFJJTlQpOwogCWlmIChlcnJvciAhPSAw
KSB7CiAJCWVycm9yID0gMDsKIAkJYnplcm8oJnNvZnRjLT50b2MsIHNpemVvZihzb2Z0Yy0+
dG9jKSk7CkBAIC0yODQ5LDcgKzI5NDYsNyBAQAogCiAJCWVycm9yID0gY2RyZWFkdG9jKHBl
cmlwaCwgQ0RfTVNGX0ZPUk1BVCwgTEVBRE9VVCwgCiAJCQkJICAodV9pbnQ4X3QgKikmbGVh
ZG91dCwgc2l6ZW9mKGxlYWRvdXQpLAotCQkJCSAgU0ZfTk9fUFJJTlQpOworCQkJCSAgLypj
b250cm9sKi8wLCBTRl9OT19QUklOVCk7CiAJCWlmIChlcnJvciAhPSAwKSB7CiAJCQllcnJv
ciA9IDA7CiAJCQlnb3RvIGJhaWxvdXQ7CkBAIC0zMTM5LDcgKzMyMzYsOCBAQAogICovCiBz
dGF0aWMgaW50IAogY2RyZWFkdG9jKHN0cnVjdCBjYW1fcGVyaXBoICpwZXJpcGgsIHVfaW50
MzJfdCBtb2RlLCB1X2ludDMyX3Qgc3RhcnQsIAotCSAgdV9pbnQ4X3QgKmRhdGEsIHVfaW50
MzJfdCBsZW4sIHVfaW50MzJfdCBzZW5zZV9mbGFncykKKwkgIHVfaW50OF90ICpkYXRhLCB1
X2ludDMyX3QgbGVuLCB1X2ludDhfdCBjb250cm9sLAorCSAgdV9pbnQzMl90IHNlbnNlX2Zs
YWdzKQogewogCXN0cnVjdCBzY3NpX3JlYWRfdG9jICpzY3NpX2NtZDsKIAl1X2ludDMyX3Qg
bnRvYzsKQEAgLTMxNzYsNiArMzI3NCw3IEBACiAJc2NzaV9jbWQtPmRhdGFfbGVuWzFdID0g
KG50b2MpICYgMHhmZjsKIAogCXNjc2lfY21kLT5vcF9jb2RlID0gUkVBRF9UT0M7CisJc2Nz
aV9jbWQtPmNvbnRyb2wgPSBjb250cm9sOwogCiAJZXJyb3IgPSBjZHJ1bmNjYihjY2IsIGNk
ZXJyb3IsIC8qY2FtX2ZsYWdzKi9DQU1fUkVUUllfU0VMVE8sCiAJCQkgLypzZW5zZV9mbGFn
cyovU0ZfUkVUUllfVUEgfCBzZW5zZV9mbGFncyk7CkluZGV4OiBzeXMvZGV2L2F0YS9hdGFw
aS1jZC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvYXRhL2F0YXBpLWNkLmMJKHJldmlz
aW9uIDE5MDQ2MykKKysrIHN5cy9kZXYvYXRhL2F0YXBpLWNkLmMJKHdvcmtpbmcgY29weSkK
QEAgLTQwMCw2ICs0MDAsMjUgQEAKIAl9CiAJYnJlYWs7CiAKKyAgICBjYXNlIENESU9SRUFE
TEFTVFNFU1NJT05BRERSOgorCXsKKwkgICAgc3RydWN0IGlvY19yZWFkX2xhc3Rfc2Vzc2lv
bl9hZGRyICpsc2EgPQorCQkoc3RydWN0IGlvY19yZWFkX2xhc3Rfc2Vzc2lvbl9hZGRyICop
YWRkcjsKKworCSAgICBpZiAoIWNkcC0+dG9jLmhkci5lbmRpbmdfdHJhY2spIHsKKwkJZXJy
b3IgPSBFSU87CisJCWJyZWFrOworCSAgICB9CisKKwkgICAgaWYgKGxzYS0+YWRkcmVzc19m
b3JtYXQgPT0gQ0RfTVNGX0ZPUk1BVCkgeworCQlsYmEybXNmKGNkcC0+bGFzdF9zZXNzaW9u
X2xiYSwgJmxzYS0+YWRkci5tc2YubWludXRlLAorCQkgICAgJmxzYS0+YWRkci5tc2Yuc2Vj
b25kLCAmbHNhLT5hZGRyLm1zZi5mcmFtZSk7CisJICAgIH0gZWxzZSB7CisJCWxzYS0+YWRk
ci5sYmEgPSBjZHAtPmxhc3Rfc2Vzc2lvbl9sYmE7CisJICAgIH0KKwl9CisJYnJlYWs7CisK
ICNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDYwMDAwOAogICAgIGNhc2UgQ0RJT0NSRUFEU1VC
Q0hBTk5FTF9TWVNTUEFDRToKIAlub2NvcHlvdXQgPSAxOwpAQCAtMTAwNiw2ICsxMDI1LDM5
IEBACiAJY2RwLT5wcFt0cmFja10gPSBOVUxMOwogICAgIH0KIAorICAgIC8qCisgICAgICog
QW4gIkVuaGFuY2VkIENEIiAob3IgIkV4dHJhIENEIikgaXMgYSBDRCB3aXRoIGF1ZGlvIHRy
YWNrcywgdGhlbgorICAgICAqIGRhdGEgdHJhY2tzLiBBdWRpbyB0cmFja3MgYXJlIGluIHRo
ZSBmaXJzdCBzZXNzaW9uLCB3aGlsZSBkYXRhCisgICAgICogdHJhY2tzIGFyZSBpbiB0aGUg
c2Vjb25kIHNlc3Npb24uIEJlY2F1c2Ugb2YgdGhlIHNwYWNlIHRha2VuIGJ5CisgICAgICog
dGhlIGZpcnN0IHNlc3Npb24ncyBsZWFkLW91dCBhbmQgdGhlIHNlY29uZCBzZXNzaW9uJ3Mg
bGVhZC1pbiwKKyAgICAgKiB0aGUgZHVyYXRpb24gb2YgdGhlIGxhc3QgYXVkaW8gdHJhY2sg
Y2FuJ3QgYmUgZGV0ZXJtaW5lZCB3aXRoIHRoZQorICAgICAqIGFkZHJlc3Mgb2YgdGhlIGRh
dGEgdHJhY2suIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBnZXQgdGhlIGFkZHJlc3MKKyAgICAg
KiBvZiB0aGUgc2Vjb25kIChhbmQgbGFzdCkgc2Vzc2lvbiBmb3IgdGhpcyBwdXJwb3NlLgor
ICAgICAqLworICAgIGlmIChjZHAtPnRvYy5oZHIuc3RhcnRpbmdfdHJhY2sgIT0gMTcwKSB7
CisJc3RydWN0IHRvYyBsYXN0X3RvYzsKKworCWxlbiA9IHNpemVvZihzdHJ1Y3QgaW9jX3Rv
Y19oZWFkZXIpICsgc2l6ZW9mKHN0cnVjdCBjZF90b2NfZW50cnkpOworCWJ6ZXJvKGNjYiwg
c2l6ZW9mKGNjYikpOworCWNjYlswXSA9IEFUQVBJX1JFQURfVE9DOworCWNjYls3XSA9IGxl
biA+PiA4OworCWNjYls4XSA9IGxlbjsKKwkvKiBTZXQgdGhpcyBmbGFnIHRvIGFzayBmb3Ig
c2Vzc2lvbnMgaW5mb3JtYXRpb25zIGluc3RlYWQgb2YgdHJhY2tzCisJICogaW5mb3JtYXRp
b25zLiAqLworCWNjYls5XSA9IDEgPDwgNjsKKworCWlmIChhdGFfYXRhcGljbWQoZGV2LCBj
Y2IsIChjYWRkcl90KSZsYXN0X3RvYywgbGVuLAorCSAgICBBVEFfUl9SRUFEIHwgQVRBX1Jf
UVVJRVQsIDMwKSkgeworCSAgICBiemVybygmY2RwLT50b2MsIHNpemVvZihjZHAtPnRvYykp
OworCSAgICByZXR1cm47CisJfQorCisJY2RwLT5sYXN0X3Nlc3Npb25fbGJhID0gbnRvaGwo
bGFzdF90b2MudGFiWzBdLmFkZHIubGJhKTsKKyAgICB9IGVsc2UgeworCS8qIExpbnV4IHNl
dCBhbiBMQkEgdG8gMCcyIiB3aGVuIHRoaXMgaXMgbm90IGEgbXVsdGlzZXNzaW9uIENELiAq
LworCWNkcC0+bGFzdF9zZXNzaW9uX2xiYSA9IG1zZjJsYmEoMCwgMiwgMCk7CisgICAgfQor
CiAjaWZkZWYgQUNEX0RFQlVHCiAgICAgaWYgKGNkcC0+ZGlza19zaXplICYmIGNkcC0+dG9j
Lmhkci5lbmRpbmdfdHJhY2spIHsKIAlkZXZpY2VfcHJpbnRmKGRldiwgIiglZCBzZWN0b3Jz
ICglZCBieXRlcykpLCAlZCB0cmFja3MgIiwgCkluZGV4OiBzeXMvZGV2L2F0YS9hdGFwaS1j
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9kZXYvYXRhL2F0YXBpLWNkLmgJKHJldmlzaW9u
IDE5MDQ2MykKKysrIHN5cy9kZXYvYXRhL2F0YXBpLWNkLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxMiw0ICszMTIsNyBAQAogICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICBpb21h
eDsgICAgICAgICAgLyogTWF4IEkvTyByZXF1ZXN0IChieXRlcykgKi8KICAgICBzdHJ1Y3Qg
Z19nZW9tICAgICAgICAgICAgICAgKmdwOyAgICAgICAgICAgIC8qIGdlb20gaW5zdGFuY2Ug
Ki8KICAgICBzdHJ1Y3QgZ19wcm92aWRlciAgICAgICAgICAgKnBwW01BWFRSSysxXTsgIC8q
IHByb3ZpZGVycyAqLworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3Nl
c3Npb25fbGJhOyAvKiBsYXN0IHNlc3Npb24gYWRkcmVzcyAoc2VlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENESU9SRUFETEFTVFNF
U1NJT05BRERSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlvY3RsKSAqLwogfTsKSW5kZXg6IHN5cy9zeXMvY2Rpby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHN5cy9zeXMvY2Rpby5oCShyZXZpc2lvbiAxOTA0NjMpCisrKyBzeXMvc3lz
L2NkaW8uaAkod29ya2luZyBjb3B5KQpAQCAtMjgxLDQgKzI4MSwxMiBAQAogICovCiAjZGVm
aW5lIENESU9DUkVBRFNVQkNIQU5ORUxfU1lTU1BBQ0UgX0lPV1IoJ2MnLCAzMSwgc3RydWN0
IGlvY19yZWFkX3N1YmNoYW5uZWwpCiAKKworc3RydWN0IGlvY19yZWFkX2xhc3Rfc2Vzc2lv
bl9hZGRyIHsKKwl1X2NoYXIJYWRkcmVzc19mb3JtYXQ7CisJdW5pb24JbXNmX2xiYSBhZGRy
OworfTsKKyNkZWZpbmUgQ0RJT1JFQURMQVNUU0VTU0lPTkFERFIJCQkJCQlcCisgICAgX0lP
V1IoJ2MnLCAzMiwgc3RydWN0IGlvY19yZWFkX2xhc3Rfc2Vzc2lvbl9hZGRyKQorCiAjZW5k
aWYgLyogIV9TWVNfQ0RJT19IXyAqLwo=
--------------050509060905070000010304--



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