Subject: Re: scan_ffs from OpenBSD ported and improved.
To: None <tech-userlevel@netbsd.org>
From: Juan RP <juan@xtrarom.org>
List: tech-userlevel
Date: 06/07/2005 01:22:43
This is a multi-part message in MIME format.

--Multipart=_Tue__7_Jun_2005_01_22_43_+0200_IeQVUaSLG1hmE_wD
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

On Mon, 06 Jun 2005 14:06:48 +0000
"Julio M. Merino Vidal" <jmmv84@gmail.com> wrote:

> >From a very quick review, I see:
> - Auxiliary functions are not static.
> - Inconsistent spacing: there are some commas with a space after them,
>   while others don't have it; there are multiple operators without
>   spaces around them while others have it; etc.
>   See /usr/share/misc/style.
> - Functions that return values which are discarded should be prefixed
>   with (void).  I.e., (void)printf("blah");
> - Options in getopt should be sorted alphabetically.
> - Most NetBSD utilities don't have '-h' for help, while this one does.
> - Where are the patches to modify the build infrastructure to build the
>   utility?
> - And the manual page?

Attached is the patch with all your suggestions fixed, except the second
suggestion (inconsistent spacing in multiple operators), I leave them as is
because I think they are better to understand IMHO (der mouse said so
too).

Note that the manpage might need a review (wiz, snj?).

Thank you to all for your comments.

--Multipart=_Tue__7_Jun_2005_01_22_43_+0200_IeQVUaSLG1hmE_wD
Content-Type: application/octet-stream;
 name="scanffs.diff"
Content-Disposition: attachment;
 filename="scanffs.diff"
Content-Transfer-Encoding: base64

SW5kZXg6IGRpc3RyaWIvc2V0cy9saXN0cy9iYXNlL21pCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnNyb290L3NyYy9kaXN0cmliL3NldHMvbGlzdHMvYmFzZS9taSx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS41NTQKZGlmZiAtYiAtdSAtcjEuNTU0IG1pCi0tLSBkaXN0cmliL3NldHMvbGlzdHMvYmFz
ZS9taQkyMiBNYXkgMjAwNSAwMzo0NTozMCAtMDAwMAkxLjU1NAorKysgZGlzdHJpYi9zZXRzL2xp
c3RzL2Jhc2UvbWkJNiBKdW4gMjAwNSAyMzoxODoyNSAtMDAwMApAQCAtMTkxLDYgKzE5MSw3IEBA
CiAuL3NiaW4vcnJlc3RvcmUJCQkJCWJhc2UtbmV0dXRpbC1yb290CiAuL3NiaW4vcnRzb2wJCQkJ
CWJhc2UtbmV0dXRpbC1yb290CXVzZV9pbmV0NgogLi9zYmluL3NhdmVjb3JlCQkJCQliYXNlLXN5
c3V0aWwtcm9vdAorLi9zYmluL3NjYW5mZnMJCQkJCWJhc2Utc3lzdXRpbC1yb290CiAuL3NiaW4v
c2NzaWN0bAkJCQkJYmFzZS1zeXN1dGlsLXJvb3QKIC4vc2Jpbi9zZXRrZXkJCQkJCWJhc2UtbmV0
dXRpbC1yb290CiAuL3NiaW4vc2h1dGRvd24JCQkJCWJhc2Utc3lzdXRpbC1yb290CkluZGV4OiBk
aXN0cmliL3NldHMvbGlzdHMvbWFuL21pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3Ny
Yy9kaXN0cmliL3NldHMvbGlzdHMvbWFuL21pLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc5MQpk
aWZmIC1iIC11IC1yMS43OTEgbWkKLS0tIGRpc3RyaWIvc2V0cy9saXN0cy9tYW4vbWkJMzEgTWF5
IDIwMDUgMTE6Mzk6MDMgLTAwMDAJMS43OTEKKysrIGRpc3RyaWIvc2V0cy9saXN0cy9tYW4vbWkJ
NiBKdW4gMjAwNSAyMzoxODo0MyAtMDAwMApAQCAtMjEwMiw2ICsyMTAyLDcgQEAKIC4vdXNyL3No
YXJlL21hbi9jYXQ4L3NhdmVjb3JlLjAJCQltYW4tc3lzdXRpbC1jYXRtYW4JLmNhdAogLi91c3Iv
c2hhcmUvbWFuL2NhdDgvc2JtaXBzL01BS0VERVYuMAkJbWFuLW9ic29sZXRlCQlvYnNvbGV0ZQog
Li91c3Ivc2hhcmUvbWFuL2NhdDgvc2JtaXBzL21ha2VkZXYuMAkJbWFuLW9ic29sZXRlCQlvYnNv
bGV0ZQorLi91c3Ivc2hhcmUvbWFuL2NhdDgvc2NhbmZmcy4wCQkJbWFuLXN5c3V0aWwtY2F0bWFu
CS5jYXQKIC4vdXNyL3NoYXJlL21hbi9jYXQ4L3Njc2ljdGwuMAkJCW1hbi1zeXN1dGlsLWNhdG1h
bgkuY2F0CiAuL3Vzci9zaGFyZS9tYW4vY2F0OC9zZW5kbWFpbC4wCQkJbWFuLXNlbmRtYWlsLWNh
dG1hbglzZW5kbWFpbCwuY2F0CiAuL3Vzci9zaGFyZS9tYW4vY2F0OC9zZXNkLjAJCQltYW4tc3lz
dXRpbC1jYXRtYW4JLmNhdApAQCAtNDMzNCw2ICs0MzM1LDcgQEAKIC4vdXNyL3NoYXJlL21hbi9t
YW44L3NhdmVjb3JlLjgJCQltYW4tc3lzdXRpbC1tYW4JCS5tYW4KIC4vdXNyL3NoYXJlL21hbi9t
YW44L3NibWlwcy9NQUtFREVWLjgJCW1hbi1vYnNvbGV0ZQkJb2Jzb2xldGUKIC4vdXNyL3NoYXJl
L21hbi9tYW44L3NibWlwcy9tYWtlZGV2LjgJCW1hbi1vYnNvbGV0ZQkJb2Jzb2xldGUKKy4vdXNy
L3NoYXJlL21hbi9tYW44L3NjYW5mZnMuOAkJCW1hbi1zeXN1dGlsLW1hbgkJLm1hbgogLi91c3Iv
c2hhcmUvbWFuL21hbjgvc2NzaWN0bC44CQkJbWFuLXN5c3V0aWwtbWFuCQkubWFuCiAuL3Vzci9z
aGFyZS9tYW4vbWFuOC9zZW5kbWFpbC44CQkJbWFuLXNlbmRtYWlsLW1hbglzZW5kbWFpbCwubWFu
CiAuL3Vzci9zaGFyZS9tYW4vbWFuOC9zZXNkLjgJCQltYW4tc3lzdXRpbC1tYW4JCS5tYW4KSW5k
ZXg6IHNiaW4vTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3NiaW4v
TWFrZWZpbGUsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTMKZGlmZiAtYiAtdSAtcjEuOTMgTWFr
ZWZpbGUKLS0tIHNiaW4vTWFrZWZpbGUJMSBNYXkgMjAwNSAwNzoyNjoyOSAtMDAwMAkxLjkzCisr
KyBzYmluL01ha2VmaWxlCTYgSnVuIDIwMDUgMjM6MTg6NDQgLTAwMDAKQEAgLTEwLDggKzEwLDgg
QEAKIAlkcnZjdGwgZWRsYWJlbCBmYXN0Ym9vdCBmZGlzayBmc2NrIGZzaXJhbmQgaWZjb25maWcg
aW5pdCBsZGNvbmZpZyBcCiAJbG1jY3RsIG1icmxhYmVsIG1rbm9kIG1vZGxvYWQgbW9kdW5sb2Fk
IG1vdW50IG5ld2J0Y29uZiBub2xvZ2luIFwKIAlwZGlzayBwaW5nIHBwcG9lY3RsIHJhaWRjdGwg
cmVib290IHJjb3JkZXIgcm5kY3RsIHJvdXRlIHJvdXRlZCBcCi0Jc2F2ZWNvcmUgc2NzaWN0bCBz
aHV0ZG93biBzbGF0dGFjaCBzd2FwY3RsIHN5c2N0bCB0dHlmbGFncyB1bW91bnQgXAotCXZlcmll
eGVjY3RsIHZpbnVtIHdkb2djdGwgd3Njb25zY3RsCisJc2F2ZWNvcmUgc2NhbmZmcyBzY3NpY3Rs
IHNodXRkb3duIHNsYXR0YWNoIHN3YXBjdGwgc3lzY3RsIHR0eWZsYWdzIFwKKwl1bW91bnQgdmVy
aWV4ZWNjdGwgdmludW0gd2RvZ2N0bCB3c2NvbnNjdGwKIAogIyBzdXBwb3J0IGZvciB2YXJpb3Vz
IGZpbGUgc3lzdGVtcwogU1VCRElSKz0gZnNja19leHQyZnMKSW5kZXg6IHNiaW4vc2NhbmZmcy9N
YWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBzYmluL3NjYW5mZnMvTWFrZWZpbGUKZGlmZiAt
TiBzYmluL3NjYW5mZnMvTWFrZWZpbGUKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAw
IC0wMDAwCisrKyBzYmluL3NjYW5mZnMvTWFrZWZpbGUJNiBKdW4gMjAwNSAyMzoxODo0NSAtMDAw
MApAQCAtMCwwICsxLDEyIEBACisjICROZXRCU0QkCisKK1BST0c9CXNjYW5mZnMKK1NSQ1M9CXNj
YW5mZnMuYworCitNQU49CXNjYW5mZnMuOAorCitXQVJOUz0JNAorTERBREQ9CS1sdXRpbAorRFBB
REQ9CSR7TElCVVRJTH0KKworLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgpJbmRleDogc2Jpbi9zY2Fu
ZmZzL3NjYW5mZnMuOAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBzYmluL3NjYW5mZnMvc2NhbmZmcy44
CmRpZmYgLU4gc2Jpbi9zY2FuZmZzL3NjYW5mZnMuOAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIHNiaW4vc2NhbmZmcy9zY2FuZmZzLjgJNiBKdW4gMjAwNSAyMzox
ODo0NSAtMDAwMApAQCAtMCwwICsxLDkyIEBACisuXCIJJE5ldEJTRCQKKy5cIiAgICAgT3BlbkJT
RDogc2Nhbl9mZnMuOCx2IDEuMTMgMjAwNC8xMi8xNCAwMDowNDoyMSBqbWMgRXhwCisuXCIKKy5c
IiBDb3B5cmlnaHQgKGMpIDIwMDUgSnVhbiBSb21lcm8gUGFyZGluZXMKKy5cIiBDb3B5cmlnaHQg
KGMpIDE5OTcgTmlrbGFzIEhhbGxxdmlzdCwgVG9iaWFzIFdlaW5nYXJ0bmVyCisuXCIgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy5cIgorLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLlwiIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworLlwiIGFy
ZSBtZXQ6CisuXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisuXCIgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisuXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy5cIgorLlwiIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisu
XCIgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUworLlwiIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisuXCIgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorLlwi
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVAorLlwiIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy5cIiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky5cIiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisuXCIgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisuXCIgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy5cIgor
LlwiIC5USCBzY2FuZmZzIDgKKy5EZCBKdW55IDcsIDIwMDUKKy5EdCBTQ0FORkZTIDgKKy5Pcwor
LlNoIE5BTUUKKy5ObSBzY2FuZmZzCisuTmQgZmluZGluZyBGRlN2MS9GRlN2MiBwYXJ0aXRpb25z
IG9uIGEgZGlzaworLlNoIFNZTk9QU0lTCisuTm0gc2NhbmZmcworLk9wIEZsIGx2CisuT3AgRmwg
cyBBciBzdGFydAorLk9wIEZsIGUgQXIgZW5kCisuQXIgZGV2aWNlCisuU2ggREVTQ1JJUFRJT04K
K1RoaXMgcHJvZ3JhbSB3aWxsIHRha2UgYSByYXcgZGlzayBkZXZpY2UgdGhhdCBjb3ZlcnMgdGhl
IHdob2xlIGRpc2ssCithbmQgd2lsbCBmaW5kIGFsbCBwb3NzaWJsZSBGRlN2MS9GRlN2MiBwYXJ0
aXRpb25zIHdpdGggZGlmZmVyZW50IGJsb2NrCitzaXplcyBvbiB0aGUgZGlzay4KK0l0IHdpbGwg
c2hvdyB0aGUgZmlsZXN5c3RlbSB0eXBlIChGRlN2MSBvciBGRlN2MiksIHNpemUgYW5kIG9mZnNl
dC4KK0Fsc28gaXQgaGFzIGFuIG9wdGlvbiB0byBzaG93IHRoZSB2YWx1ZXMgd2l0aCBhIGRpc2ts
YWJlbC1hbGlrZQorb3V0cHV0LgorLlBwCitUaGUgb3B0aW9ucyBhcmUgYXMgZm9sbG93czoKKy5C
bCAtdGFnIC13aWR0aCBEcworLkl0IEZsIGwKK1RoaXMgd2lsbCBtYWtlCisuTm0KK3ByaW50IG91
dCBhIHN0cmluZyBsb29raW5nIG11Y2ggbGlrZSB0aGUgaW5wdXQgdG8gZGlza2xhYmVsLgorV2l0
aCBhIGxpdHRsZSBtYXNzYWdpbmcsIHRoaXMgb3V0cHV0IGNhbiB1c3VhbGx5IGJlIHVzZWQgaW4g
dGhlIGRpc2tsYWJlbCBlZGl0LgorLlBwCisuSXQgRmwgdgorVGVsbAorLk5tCit0byBiZSB2ZXJi
b3NlIGFib3V0IHdoYXQgaXQgaXMgZG9pbmcsIGFuZCB3aGF0IGl0IGhhcyBmb3VuZC4KKy5QcAor
Lkl0IEZsIHMgQXIgc3RhcnQKK1RlbGwKKy5ObQord2hlcmUgdG8gc3RhcnQgc2VhcmNoaW5nIGZv
ciBmaWxlc3lzdGVtcy4KK1RoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHNraXAgc3dhcAorcGFydGl0
aW9ucywgb3Igb3RoZXIgbGFyZ2Ugbm9uLVVGUy9GRlMgcGFydGl0aW9ucy4KKy5QcAorLkl0IEZs
IGUgQXIgZW5kCitEaXR0byBmb3IgdGVsbGluZworLk5tCit3aGVyZSB0byBzdG9wLgorSXQgd2ls
bCBkZWZhdWx0IHRvIG1heCBzZWN0b3JzIG9uIHRoZSBkaXNrIGlmIGl0IHdhc24ndCBzcGVjaWZp
ZWQuCisuUHAKKy5JdCBBciBkZXZpY2UKK1RoaXMgc3BlY2lmaWVzIHdoaWNoIGRldmljZQorLk5t
CitzaG91bGQgdXNlIHRvIHNjYW4gZm9yIGZpbGVzeXN0ZW1zLgorLkVsCisuU2ggU0VFIEFMU08K
Ky5YciBkaXNrbGFiZWwgOAorLlNoIEhJU1RPUlkKK1RoZSBzY2FuX2ZmcyBwcm9ncmFtIGZpcnN0
IGFwcGVhcmVkIGluIE9wZW5CU0QgMi4zLiBJdCB3YXMgcmVuYW1lZAordG8gc2NhbmZmcyBpbiBO
ZXRCU0QuCisuU2ggQVVUSE9SUworTmlrbGFzIEhhbGxxdmlzdCBhbmQgVG9iaWFzIFdlaW5nYXJ0
bmVyIGZvciB0aGUgT3BlbkJTRCBQcm9qZWN0LgorLlBwCitKdWFuIFJvbWVybyBQYXJkaW5lcyBm
b3IgdGhlIE5ldEJTRCBQcm9qZWN0LgorLlNoIEJVR1MKK0N1cnJlbnRseSBpdCB3b24ndCBmaW5k
IEZGU3YxIHBhcnRpdGlvbnMgd2l0aCBmcmFnc2l6ZS9ibG9ja3NpemUKK2dyZWF0ZXIgdGhhbiAy
MDQ4LzE2Mzg0LCBhbmQgRkZTdjIgcGFydGl0aW9ucyB3aXRoIGZyYWdzaXplL2Jsb2Nrc2l6ZQor
Z3JlYXRlciB0aGFuIDgxOTIvNjU1MzYuCkluZGV4OiBzYmluL3NjYW5mZnMvc2NhbmZmcy5jCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IHNiaW4vc2NhbmZmcy9zY2FuZmZzLmMKZGlmZiAtTiBzYmluL3Nj
YW5mZnMvc2NhbmZmcy5jCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAor
Kysgc2Jpbi9zY2FuZmZzL3NjYW5mZnMuYwk2IEp1biAyMDA1IDIzOjE4OjQ2IC0wMDAwCkBAIC0w
LDAgKzEsMjkyIEBACisvKgkkTmV0QlNEJAkqLworLyoJT3BlbkJTRDogc2Nhbl9mZnMuYyx2IDEu
MTEgMjAwNC8wMi8xNiAxOToxMzowMyBkZXJhYWR0IEV4cAkqLworCisvKgorICogQ29weXJpZ2h0
IChjKSAyMDA1IEp1YW4gUm9tZXJvIFBhcmRpbmVzCisgKiBDb3B5cmlnaHQgKGMpIDE5OTggTmlr
bGFzIEhhbGxxdmlzdCwgVG9iaWFzIFdlaW5nYXJ0bmVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogQ3VycmVudGx5IGl0IGNhbiBkZXRlY3Q6
CisgKiAJbyBGRlN2MSB3aXRoIGZyYWdzaXplL2Jsb2Nrc2l6ZTogNTEyLzQwOTYsIDEwMjQvODE5
MiwgMjA0OC8xNjM4NC4KKyAqCW8gRkZTdjIgd2l0aCBmcmFnc2l6ZS9ibG9ja3NpemU6IDUxMi80
MDk2LCAxMDI0LzgxOTIsIDIwNDgvMTYzODQsCisgKgkgIAkJCQkgNDA5Ni8zMjc2OCwgODE5Mi82
NTUzNi4KKyAqIFRPRE86CisgKglvIERldGVjdCBGRlN2MSBwYXJ0aXRpb25zIHdpdGggZnNpemUv
YnNpemUgPiAyMDQ4LzE2Mzg0LgorICoJbyBEZXRlY3QgRkZTdjIgcGFydGl0aW9ucyB3aXRoIGZz
aXplL2JzaXplID4gODE5Mi82NTUzNi4KKyAqLworIAorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgor
I2lmbmRlZiBsaW50CitfX1JDU0lEKCIkTmV0QlNEJCIpOworI2VuZGlmIC8qIG5vdCBsaW50ICov
CisKKyNpbmNsdWRlIDxzeXMvZGlza2xhYmVsLmg+CisjaW5jbHVkZSA8c3lzL2RraW8uaD4KKyNp
bmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxz
eXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvZmNudGwuaD4KKyNpbmNsdWRlIDx1ZnMvZmZzL2Zz
Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8
c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVk
ZSA8ZXJyLmg+CisjaW5jbHVkZSA8dXRpbC5oPgorCitlbnVtIHsgTkFEQSwgVkVSQk9TRSwgTEFC
RUxTIH07CisKKyNkZWZpbmUgU0JDT1VOVAk2NCAvKiBYWFggc2hvdWxkIGJlIGNvbmZpZ3VyYWJs
ZSAqLworCitzdGF0aWMgdm9pZAlwcmludHBhcnQoaW50LCBpbnQpOworc3RhdGljIHZvaWQJdWZz
bWFnaWModm9pZCk7CitzdGF0aWMgdm9pZAl1c2FnZSh2b2lkKTsKK3N0YXRpYyBpbnQJY2hlY2tm
c3R5cGUodm9pZCk7CitzdGF0aWMgaW50CXVmc3NjYW4oaW50LCBkYWRkcl90LCBkYWRkcl90LCBp
bnQpOworCitzdGF0aWMgY2hhcglsYXN0bW91bnRbTUFYTU5UTEVOXTsKK3N0YXRpYyBjaGFyCWRl
dmljZVtNQVhQQVRITEVOXTsKK3N0YXRpYyBjb25zdAljaGFyICpmc3R5cGUgPSBOVUxMOworCitz
dGF0aWMgaW50IAllZmxhZyA9IDA7CitzdGF0aWMgaW50CWZsYWdzID0gMDsKK3N0YXRpYyBpbnQJ
ZnNydiA9IDA7CitzdGF0aWMgaW50CW47CisKK3N0YXRpYyBkYWRkcl90CWJsaywgbGFzdGJsazsK
Kworc3RhdGljIHN0cnVjdCBmcyAqc2I7CisKK3N0YXRpYyBpbnQKK2NoZWNrZnN0eXBlKHZvaWQp
Cit7CisJaW50IHJ2YWw7CisKKwlzd2l0Y2ggKHNiLT5mc19tYWdpYykgeworCQljYXNlIEZTX1VG
UzFfTUFHSUM6CisJCWNhc2UgRlNfVUZTMV9NQUdJQ19TV0FQUEVEOgorCQkJc2ItPmZzX3NpemUg
PSBzYi0+ZnNfb2xkX3NpemU7CisJCQlydmFsID0gMTsKKwkJCWZzdHlwZSA9ICJGRlN2MSI7CisJ
CQlicmVhazsKKwkJY2FzZSBGU19VRlMyX01BR0lDOgorCQljYXNlIEZTX1VGUzJfTUFHSUNfU1dB
UFBFRDoKKwkJCXJ2YWwgPSAyOworCQkJZnN0eXBlID0gIkZGU3YyIjsKKwkJCWJyZWFrOworCQlk
ZWZhdWx0OgorCQkJcnZhbCA9IC0xOworCQkJLyogTk9UUkVBQ0hFRCAqLworCX0KKwlyZXR1cm4g
cnZhbDsKK30KKworc3RhdGljIHZvaWQKK3ByaW50cGFydChpbnQgZmxhZywgaW50IGZmc2l6ZSkK
K3sKKworCWlmIChmbGFnID09IFZFUkJPU0UpIHsKKwkJKHZvaWQpcHJpbnRmKCJibG9jazogJSIg
UFJJdTY0IiAiCisJCQkiaWQgJXgsJXggc2l6ZSAlIiBQUkl1NjQiXG4iLAorCQkJYmxrKyhuLzUx
MiksIHNiLT5mc19pZFswXSwKKwkJCXNiLT5mc19pZFsxXSwgc2ItPmZzX3NpemUpOworCX0gZWxz
ZSBpZiAoZmxhZyA9PSBMQUJFTFMpIHsKKwkJKHZvaWQpcHJpbnRmKCJYOiAgJTkiIFBSSXU2NCAi
IiwKKwkJCSh1aW50NjRfdCkoZGFkZHJfdCkoKG9mZl90KXNiLT5mc19zaXplICogc2ItPmZzX2Zz
aXplIC8gNTEyKSk7CisJCWlmIChmc3J2ID09IDEpCS8qIEZGU3YxICovCisJCQkodm9pZClwcmlu
dGYoIiAlOSIgUFJJdTY0ICIiLAorCQkJCWJsaysobi81MTIpLSgyKlNCTE9DS1NJWkUvNTEyKSk7
CisJCWVsc2UgaWYgKGZzcnYgPT0gMikJLyogRkZTdjIgKi8KKwkJCSh2b2lkKXByaW50ZigiICU5
IiBQUkl1NjQgIiIsCisJCQkJYmxrKyhuLzUxMiktKGZmc2l6ZSpTQkxPQ0tTSVpFLzUxMisxMjgp
KTsKKwkJKHZvaWQpcHJpbnRmKCIgNC4yQlNEICU2ZCAlNWQlNGQgIyAlcyBbJXNdXG4iLAorCQkJ
c2ItPmZzX2ZzaXplLCBzYi0+ZnNfYnNpemUsCisJCQlzYi0+ZnNfb2xkX2NwZywgbGFzdG1vdW50
LCBmc3R5cGUpOworCX0gZWxzZSB7CisJCXByaW50ZigiJXMgIiwgZnN0eXBlKTsKKwkJaWYgKGZz
cnYgPT0gMSkJLyogRkZTdjEgKi8KKwkJCSh2b2lkKXByaW50ZigiYXQgJSIgUFJJdTY0ICIiLAor
CQkJCWJsaysobi81MTIpLSgyKlNCTE9DS1NJWkUvNTEyKSk7CisJCWVsc2UgaWYgKGZzcnYgPT0g
MikJLyogRkZTdjIgKi8KKwkJCSh2b2lkKXByaW50ZigiYXQgJSIgUFJJdTY0ICIiLAorCQkJCWJs
aysobi81MTIpLShmZnNpemUqU0JMT0NLU0laRS81MTIrMTI4KSk7CisJCSh2b2lkKXByaW50Zigi
IHNpemUgJSIgUFJJdTY0ICIsIGxhc3QgbW91bnRlZCBvbiAlc1xuIiwKKwkJCSh1aW50NjRfdCko
ZGFkZHJfdCkoKG9mZl90KXNiLT5mc19zaXplKnNiLT5mc19mc2l6ZS81MTIpLAorCQkJbGFzdG1v
dW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit1ZnNtYWdpYyh2b2lkKQoreworCS8qIAorCSAq
IEZJWE1FOgorCSAqIEl0IGNhbm5vdCBmaW5kIEZGU3YxIHBhcnRpdGlvbnMgd2l0aCBmc2l6ZS9i
c2l6ZSA+IDIwNDgvMTYzODQsCisJICogc2FtZSBwcm9ibGVtIGZvdW5kIGluIHRoZSBvcmlnaW5h
bCBwcm9ncmFtIHRoYXQgY29tZXMgZnJvbQorCSAqIE9wZW5CU0QgKHNjYW5fZmZzKDEpKS4KKwkg
Ki8KKwlpZiAoZmxhZ3MgJiBWRVJCT1NFKQorCQlwcmludHBhcnQoVkVSQk9TRSwgTkFEQSk7CisJ
aWYgKGZzcnYgPT0gMSkgewkvKiBGRlN2MSAqLworCQlpZiAoKChibGsrKG4vNTEyKSktbGFzdGJs
aykgPT0gKFNCTE9DS1NJWkUvNTEyKSkgeworCQkJaWYgKGZsYWdzICYgTEFCRUxTKQorCQkJCXBy
aW50cGFydChMQUJFTFMsIE5BREEpOworCQkJZWxzZQorCQkJCXByaW50cGFydChOQURBLCBOQURB
KTsKKwkJfQorCX0gZWxzZSBpZiAoZnNydiA9PSAyKSB7CS8qIEZGU3YyICovCisJLyoKKwkgKiBU
aGF0IGNoZWNrcyBmb3IgRkZTdjIgcGFydGl0aW9ucyB3aXRoIGZyYWdzaXplL2Jsb2Nrc2l6ZToK
KwkgKiA1MTIvNDA5NiwgMTAyNC84MTkyLCAyMDQ4LzE2Mzg0LCA0MDk2LzMyNzY4IGFuZCA4MTky
LzY1NTM2LgorCSAqIFJlYWxseSBlbm91Z2ggZm9yIG5vdy4KKwkgKi8KKwkJaWYgKCgoYmxrKyhu
LzUxMikpLWxhc3RibGspID09ICgxKlNCTE9DS1NJWkUvNTEyKSkgeworCQkJaWYgKGZsYWdzICYg
TEFCRUxTKQorCQkJCXByaW50cGFydChMQUJFTFMsIDEpOworCQkJZWxzZQorCQkJCXByaW50cGFy
dChOQURBLCAxKTsKKwkJfSBlbHNlIGlmICgoKGJsaysobi81MTIpKS1sYXN0YmxrKSA9PSAoMipT
QkxPQ0tTSVpFLzUxMikpIHsKKwkJCWlmIChmbGFncyAmIExBQkVMUykKKwkJCQlwcmludHBhcnQo
TEFCRUxTLCAyKTsKKwkJCWVsc2UKKwkJCQlwcmludHBhcnQoTkFEQSwgMik7CisJCX0gZWxzZSBp
ZiAoKChibGsrKG4vNTEyKSktbGFzdGJsaykgPT0gKDQqU0JMT0NLU0laRS81MTIpKSB7CisJCQlp
ZiAoZmxhZ3MgJiBMQUJFTFMpCisJCQkJcHJpbnRwYXJ0KExBQkVMUywgNCk7CisJCQllbHNlCisJ
CQkJcHJpbnRwYXJ0KE5BREEsIDQpOworCQl9IGVsc2UgaWYgKCgoYmxrKyhuLzUxMikpLWxhc3Ri
bGspID09ICg4KlNCTE9DS1NJWkUvNTEyKSkgeworCQkJaWYgKGZsYWdzICYgTEFCRUxTKQorCQkJ
CXByaW50cGFydChMQUJFTFMsIDgpOworCQkJZWxzZQorCQkJCXByaW50cGFydChOQURBLCA4KTsK
KwkJfQorCX0KK30KKworc3RhdGljIGludAordWZzc2NhbihpbnQgZmQsIGRhZGRyX3QgYmVnLCBk
YWRkcl90IGVuZCwgaW50IGZmbGFncykKK3sKKwl1X2ludDhfdCBidWZbU0JMT0NLU0laRSAqIFNC
Q09VTlRdOworCWxhc3RibGsgPSAtMTsKKworCW1lbXNldChsYXN0bW91bnQsIDAsIE1BWE1OVExF
Tik7CisKKwlpZiAoZmZsYWdzICYgTEFCRUxTKQorCQkodm9pZClwcmludGYoIiMgICAgICAgIHNp
emUgICAgb2Zmc2V0IGZzdHlwZSBbZnNpemUgYnNpemUgY3BnXVxuIik7CisKKwlmb3IgKGJsayA9
IGJlZzsgYmxrIDw9ICgoZW5kIDwgMCkgPyBibGs6IGVuZCk7CisJCWJsayArPSAoU0JDT1VOVCAq
IFNCTE9DS1NJWkUgLyA1MTIpKSB7CisJCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwor
CQlpZiAobHNlZWsoZmQsIChvZmZfdClibGsqNTEyLCBTRUVLX1NFVCkgPCAwKQorCQkJZXJyKDEs
ICJsc2VlayIpOworCQkJLyogTk9UUkVBQ0hFRCAqLworCisJCWlmIChyZWFkKGZkLCBidWYsIHNp
emVvZihidWYpKSA8IDApCisJCQllcnIoMSwgInJlYWQiKTsKKwkJCS8qIE5PVFJFQUNIRUQgKi8K
KworCQlmb3IgKG4gPSAwOyBuIDwgKFNCTE9DS1NJWkUgKiBTQkNPVU5UKTsgbiArPSA1MTIpIHsK
KwkJCXNiID0gKHN0cnVjdCBmcyopKCZidWZbbl0pOworCQkJZnNydiA9IGNoZWNrZnN0eXBlKCk7
CisKKwkJCWlmIChmc3J2ID49IDEpIHsgLyogZm91bmQhICovCisJCQkJdWZzbWFnaWMoKTsKKwkJ
CQkvKiBVcGRhdGUgbGFzdCBwb3RlbnRpYWwgRlMgU0JzIHNlZW4gKi8KKwkJCQlsYXN0YmxrID0g
YmxrICsgKG4vNTEyKTsKKwkJCQltZW1jcHkobGFzdG1vdW50LCBzYi0+ZnNfZnNtbnQsIE1BWE1O
VExFTik7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQKK3Vz
YWdlKHZvaWQpCit7CisJKHZvaWQpZnByaW50ZihzdGRlcnIsInVzYWdlOiAlcyBbLWxodl0iLCBn
ZXRwcm9nbmFtZSgpKTsKKwkodm9pZClmcHJpbnRmKHN0ZGVyciwiIFstcyBzdGFydF0gWy1lIGVu
ZF0gZGV2aWNlXG4iKTsKKwlleGl0KDEpOworfQorCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpCit7CisJc3RydWN0IGRpc2tsYWJlbCBkbDsKKworCWludCBjaCwgZmQ7CisJZGFk
ZHJfdCBlbmQsIGJlZyA9IDA7CisKKwlzZXRwcm9nbmFtZShhcmd2WzBdKTsKKworCXdoaWxlICgo
Y2ggPSBnZXRvcHQoYXJnYywgYXJndiwgImU6bHM6diIpKSAhPSAtMSkKKwkJc3dpdGNoKGNoKSB7
CisJCWNhc2UgJ2UnOgorCQkJZWZsYWcgPSAxOworCQkJZW5kID0gYXRvaShvcHRhcmcpOworCQkJ
YnJlYWs7CisJCWNhc2UgJ2wnOgorCQkJZmxhZ3MgfD0gTEFCRUxTOworCQkJYnJlYWs7CisJCWNh
c2UgJ3MnOgorCQkJYmVnID0gYXRvaShvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ3YnOgor
CQkJZmxhZ3MgfD0gVkVSQk9TRTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2UoKTsK
KwkJCS8qIE5PVFJFQUNIRUQgKi8KKwl9CisJYXJnYyAtPSBvcHRpbmQ7CisJYXJndiArPSBvcHRp
bmQ7CisKKwlpZiAoYXJnYyAhPSAxKQorCQl1c2FnZSgpOworCisJZmQgPSBvcGVuZGlzayhhcmd2
WzBdLCBPX1JET05MWSwgZGV2aWNlLCBzaXplb2YoZGV2aWNlKSwgMCk7CisKKwlpZiAoZmQgPCAw
KQorCQllcnIoMSwgIiVzIiwgZGV2aWNlKTsKKwkJLyogTk9UUkVBQ0hFRCAqLworCisJaWYgKGlv
Y3RsKGZkLCBESU9DR0RJTkZPLCAmZGwpID09IC0xKSB7CisJCXdhcm54KCJjb3VsZG4ndCByZXRy
aWV2ZSBkaXNrbGFiZWwuXG4iKTsKKwkJZW5kID0gLTE7CisJfSBlbHNlIHsKKwkJKHZvaWQpcHJp
bnRmKCJEaXNrOiAlc1xuIiwgZGwuZF90eXBlbmFtZSk7CisJCSh2b2lkKXByaW50ZigiVG90YWwg
c2VjdG9ycyBvbiBkaXNrOiAlIiBQUkl1MzIgIlxuXG4iLAorCQkJZGwuZF9zZWNwZXJ1bml0KTsK
Kwl9CisJCisJaWYgKCFlZmxhZykKKwkJZW5kID0gZGwuZF9zZWNwZXJ1bml0OyAvKiBkZWZhdWx0
IHRvIG1heCBzZWN0b3JzICovCisKKwlyZXR1cm4gKHVmc3NjYW4oZmQsIGJlZywgZW5kLCBmbGFn
cykpOworfQo=

--Multipart=_Tue__7_Jun_2005_01_22_43_+0200_IeQVUaSLG1hmE_wD--