From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S271940AbTHRPFp (ORCPT ); Mon, 18 Aug 2003 11:05:45 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S271941AbTHRPFp (ORCPT ); Mon, 18 Aug 2003 11:05:45 -0400 Received: from wiproecmx1.wipro.com ([164.164.31.5]:27391 "EHLO wiproecmx1.wipro.com") by vger.kernel.org with ESMTP id S271940AbTHRPFM (ORCPT ); Mon, 18 Aug 2003 11:05:12 -0400 content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C36596.44D82B3D" x-mimeole: Produced By Microsoft Exchange V6.0.6375.0 Subject: Kernel Mode File Operations Wrappers Date: Mon, 18 Aug 2003 20:07:37 +0530 Message-ID: <52C85426D39B314381D76DDD480EEE0CF5FCAB@blr-m3-msg.wipro.com> X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: Kernel Mode File Operations Wrappers Thread-Index: AcNllkQcxN2VmLptTWOPPdIb/esjfA== From: "Ramit Bhalla" To: Cc: X-OriginalArrivalTime: 18 Aug 2003 14:46:04.0593 (UTC) FILETIME=[73551A10:01C36597] Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C36596.44D82B3D Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi, I've written a file that provides wrappers for kernel mode file = operations (using existing filp_xx and supporting operations). This provides support for = opening/closing/reading/writing/seeking/formatting etc operations. This = should help kernel mode developers with fs operations in their kernel = drivers/modules. It helps simplify kernel mode file operations and takes care of various = issues (which one can forget at times) like handling the FS registers , = uid and gid. It exposes kernel mode file operations in a way that are = very similar to user mode operations like fopen, fclose, fseek etc. I have tested it on a few systems and it appears to be working great. Hope this finds it's way into the linux kernel :) Ramit. ------_=_NextPart_001_01C36596.44D82B3D Content-Type: application/octet-stream; name="kernel_fops.h" Content-Transfer-Encoding: base64 Content-Description: kernel_fops.h Content-Disposition: attachment; filename="kernel_fops.h" I2lmbmRlZiBfTElOVVhfS19GT1BTX0gNCiNkZWZpbmUgX0xJTlVYX0tfRk9QU19IDQoNCi8qDQog KiBLZXJuZWwgbW9kZSBmaWxlIG9wZXJhdGlvbnMgd3JhcHBlcnMgaGVhZGVyIGZpbGUuDQogKiAN CiAqIEF1dGhvcgk6CVJhbWl0IEJoYWxsYQ0KICogQ3JlYXRlZAk6CTE4dGggQXVndXN0IDIwMDMN CiAqDQogKi8NCg0KI2RlZmluZQlTRUVLX1NFVAkwCS8qIFNldCBzZWVrIGFic29sdXRlICovDQoj ZGVmaW5lCVNFRUtfQ1VSCTEJLyogU2V0IHNlZWsgcmVsYXRpdmUgdG8gY3VycmVudCAqLw0KI2Rl ZmluZSBTRUVLX0VORAkyCS8qIFNldCBzZWVrIG5lZ2F0aXZlIGZyb20gZW5kIG9mIGZpbGUgKi8N Cg0KLyoNCiAqIEZpbGUgbWFuYWdlbWVudCBvcGVyYXRpb25zDQogKi8NCnN0cnVjdCBmaWxlICog a2VybmVsX2ZvcGVuKGNvbnN0IGNoYXIgKiBmaWxlbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzLCBp bnQgbW9kZSk7DQppbnQga2VybmVsX2ZjbG9zZShzdHJ1Y3QgZmlsZSAqIGZpbGVfcHRyKTsNCmxv ZmZfdCBrZXJuZWxfZnNlZWsoc3RydWN0IGZpbGUgKiBmaWxlX3B0ciwgaW50IG9mZnNldCwgaW50 IHdoZW5jZSk7DQoNCi8qDQogKiBGaWxlIFJlYWRpbmcgb3BlcmF0aW9ucw0KICovDQppbnQga2Vy bmVsX2ZyZWFkKHN0cnVjdCBmaWxlICogZmlsZV9wdHIsIGNoYXIgKiBidWYsIGludCBsZW4pOw0K aW50IGtlcm5lbF9mZ2V0YyhzdHJ1Y3QgZmlsZSAqIGZpbGVfcHRyKTsNCmludCBrZXJuZWxfZmdl dHMoc3RydWN0IGZpbGUgKiBmaWxlX3B0ciwgY2hhciAqIHN0ciwgaW50IGxlbik7DQoNCi8qDQog KiBGaWxlIHdyaXRlIG9wZXJhdGlvbnMNCiAqLw0KaW50IGtlcm5lbF9md3JpdGUoc3RydWN0IGZp bGUgKiBmaWxlX3B0ciwgY2hhciAqIGJ1ZiwgaW50IGxlbik7DQppbnQga2VybmVsX2ZwdXRjKHN0 cnVjdCBmaWxlICogZmlsZV9wdHIsIGNoYXIgYnVmKTsNCmludCBrZXJuZWxfZnB1dHMoc3RydWN0 IGZpbGUgKiBmaWxlX3B0ciwgY2hhciAqIHN0cik7DQoNCi8qDQogKiBGaWxlIHdyaXRlIGluIGZv cm1hdHRlZCBmb3JtDQogKi8NCmludCBrZXJuZWxfZnByaW50ZihzdHJ1Y3QgZmlsZSAqIGZpbGVf cHRyLCBjb25zdCBjaGFyICogZm10LCAuLi4pOw0KDQojZW5kaWYNCg== ------_=_NextPart_001_01C36596.44D82B3D Content-Type: application/octet-stream; name="kernel_fops.c" Content-Transfer-Encoding: base64 Content-Description: kernel_fops.c Content-Disposition: attachment; filename="kernel_fops.c" LyoNCiAqIEtlcm5lbCBtb2RlIGZpbGUgb3BlcmF0aW9ucyB3cmFwcGVycy4NCiAqIA0KICogQXV0 aG9yCToJUmFtaXQgQmhhbGxhDQogKiBDcmVhdGVkCToJMTh0aCBBdWd1c3QgMjAwMw0KICoNCiAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0DQogKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUNCiAqIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkNCiAqIGxhdGVy IHZlcnNpb24uDQogKg0KICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCiAqIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiAqDQogKg0KICogUmV2aXNpb24g SGlzdG9yeSA6DQogKiANCiAqIFZlcnNpb24gMS4wDQogKiAJLSBJbml0aWFsIFJlbGVhc2UNCiAq Lw0KDQoNCiNpZm5kZWYgX19LRVJORUxfXw0KI2RlZmluZSBfX0tFUk5FTF9fDQojZW5kaWYNCg0K I2luY2x1ZGUgPGxpbnV4L2ZzLmg+DQojaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4NCiNpbmNsdWRl IDxhc20vZmNudGwuaD4NCiNpbmNsdWRlIDxsaW51eC9rZXJuZWxfZm9wcy5oPg0KDQoNCg0KLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiBGdW5jdGlvbiBOYW1lCToJ a2VybmVsX2ZvcGVuDQogKiANCiAqIERldGFpbHMJCQk6CVRoaXMgZnVuY3Rpb24gb3BlbnMvY3Jl YXRlIGEgZmlsZSBpbiBrZXJuZWwgbW9kZS4NCiAqIA0KICogQXJndW1lbnRzCQk6CWZpbGVuYW1l CS0gdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgb3BlbmVkDQogKiAJCQkJCQlmbGFncwkJLSBz YW1lIGZsYWdzIHVzZWQgYnkgZm9wZW4oKQ0KICogCQkJCQkJbW9kZQkJLSBmaWxlIHBlcm1pc3Np b25zIGFzIHVzZWQgYnkgZm9wZW4oKQ0KICoNCiAqIFJldHVybiBWYWx1ZQkJOglmaWxlIHBvaW50 ZXIgaWYgc3VjY2Vzc2Z1bA0KICogCQkJCQkJTlVMTCBpZiBmYWlsZWQuDQogKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovDQpzdHJ1Y3QgZmlsZSAqIGtlcm5lbF9mb3Blbihj b25zdCBjaGFyICogZmlsZW5hbWUsIHVuc2lnbmVkIGludCBmbGFncywgaW50IG1vZGUpDQp7DQoJ aW50CQkJCW9yZ2ZzdWlkLCBvcmdmc2dpZDsNCglzdHJ1Y3QgZmlsZSAqCWZpbGVfcmV0Ow0KDQoJ LyogDQoJICogU2F2ZSB1aWQgYW5kIGdpZCB1c2VkIGZvciBmaWxlc3lzdGVtIGFjY2Vzcy4NCgkg Ki8NCglvcmdmc3VpZCA9IGN1cnJlbnQtPmZzdWlkOw0KCW9yZ2ZzZ2lkID0gY3VycmVudC0+ZnNn aWQ7DQoNCgkvKg0KCSAqIFNldCB1c2VyIGFuZCBncm91cCB0byAwIChyb290KQ0KCSAqLw0KCWN1 cnJlbnQtPmZzdWlkID0gMDsNCgljdXJyZW50LT5mc2dpZCA9IDA7DQogIA0KCS8qDQoJICogT3Bl biB0aGUgZmlsZSBpbiBrZXJuZWwgbW9kZQ0KCSAqLw0KCWZpbGVfcmV0ID0gZmlscF9vcGVuKGZp bGVuYW1lLCBmbGFncywgbW9kZSk7DQoJDQoJLyoNCgkgKiBSZXN0b3JlIHRoZSB1aWQgYW5kIGdp ZA0KCSAqLw0KCWN1cnJlbnQtPmZzdWlkID0gb3JnZnN1aWQ7DQoJY3VycmVudC0+ZnNnaWQgPSBv cmdmc2dpZDsNCg0KCS8qDQoJICogQ2hlY2sgaWYgdGhlIGZpbGUgd2FzIG9wZW5lZCBzdWNjZXNz ZnVsbHkNCgkgKiBhbmQgcmV0dXJuIHRoZSBmaWxlIHBvaW50ZXIgb2YgaXQgd2FzLg0KCSAqLw0K CXJldHVybiAoKElTX0VSUihmaWxlX3JldCkpID8gTlVMTCA6IGZpbGVfcmV0KTsNCn0NCg0KDQoN Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogRnVuY3Rpb24gTmFt ZQk6CWtlcm5lbF9mY2xvc2UNCiAqIA0KICogRGV0YWlscwkJCToJVGhpcyBmdW5jdGlvbiBjbG9z ZXMgYSBmaWxlIGluIGtlcm5lbCBtb2RlLg0KICogDQogKiBBcmd1bWVudHMJCToJZmlsZV9wdHIJ LSBQb2ludGVyIHRvIHRoZSBmaWxlIG9wcyBzdHJ1Y3R1cmUNCiAqDQogKiBSZXR1cm4gVmFsdWUJ CToJMCBpZiBzdWNjZXNzZnVsDQogKiAJCQkJCQllcnJvciBjb2RlIGlmIGZhaWxlZC4NCiAqIAkJ CQkJCS1FTk9FTlQgaWYgZmlsZSBwb2ludGVyIGlzIG5vdCB2YWxpZA0KICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLw0KaW50IGtlcm5lbF9mY2xvc2Uoc3RydWN0IGZpbGUg KiBmaWxlX3B0cikNCnsNCglpbnQJb3JnZnN1aWQsIG9yZ2ZzZ2lkOw0KCWludAlmaWxlX3JldDsN Cg0KCS8qDQoJICogQ2hlY2sgaWYgdGhlIGZpbGUgcG9pbnRlciBpcyB2YWxpZA0KCSAqLw0KCWlm KChOVUxMID09IGZpbGVfcHRyKSB8fCAoSVNfRVJSKGZpbGVfcHRyKSkpDQoJCXJldHVybiAtRU5P RU5UOw0KCQ0KCS8qIA0KCSAqIFNhdmUgdWlkIGFuZCBnaWQgdXNlZCBmb3IgZmlsZXN5c3RlbSBh Y2Nlc3MuDQoJICovDQoJb3JnZnN1aWQgPSBjdXJyZW50LT5mc3VpZDsNCglvcmdmc2dpZCA9IGN1 cnJlbnQtPmZzZ2lkOw0KDQoJLyoNCgkgKiBTZXQgdXNlciBhbmQgZ3JvdXAgdG8gMCAocm9vdCkN CgkgKi8NCgljdXJyZW50LT5mc3VpZCA9IDA7DQoJY3VycmVudC0+ZnNnaWQgPSAwOw0KICANCgkv Kg0KCSAqIENsb3NlIHRoZSBmaWxlIGluIGtlcm5lbCBtb2RlICh1c2VyX2lkID0gMCkNCgkgKi8N CglmaWxlX3JldCA9IGZpbHBfY2xvc2UoZmlsZV9wdHIsIDApOw0KCQ0KCS8qDQoJICogUmVzdG9y ZSB0aGUgdWlkIGFuZCBnaWQNCgkgKi8NCgljdXJyZW50LT5mc3VpZCA9IG9yZ2ZzdWlkOw0KCWN1 cnJlbnQtPmZzZ2lkID0gb3JnZnNnaWQ7DQoNCgkvKg0KCSAqIFJldHVybiB0aGUgZXJyb3IgY29k ZS4NCgkgKi8NCiAgICByZXR1cm4gKGZpbGVfcmV0KTsNCn0NCg0KDQoNCg0KLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiBGdW5jdGlvbiBOYW1lCToJa2VybmVsX2Zz ZWVrDQogKiANCiAqIERldGFpbHMJCQk6CVRoaXMgZnVuY3Rpb24gc2Vla3MgdGhlIGZpbGUgcG9z aXRpb24gaW4gYSBmaWxlIGluIGtlcm5lbCBtb2RlLg0KICogDQogKiBBcmd1bWVudHMJCToJZmls ZV9wdHIJLSBQb2ludGVyIHRvIHRoZSBmaWxlIG9wcyBzdHJ1Y3R1cmUNCiAqIAkJCQkJCW9mZnNl dAkJLSBvZmZzZXQgaW50byB0aGUgZmlsZQ0KICogCQkJCQkJd2hlbmNlCQktIHN0YXJ0aW5nIHBv aW50IChTRUVLX0NVUiwgU0VFS19TRVQgb3IgU0VFS19FTUQpDQogKg0KICogUmV0dXJuIFZhbHVl CQk6CW5ldyBmaWxlIHBvc2l0aW9uDQogKiAJCQkJCQktRU5PRU5UIGlmIGZpbGUgcG9pbnRlciBp cyBub3QgdmFsaWQNCiAqIAkJCQkJCS1FSU5WQUwgaWYgb2Zmc2V0IHR5cGUgaXMgbm90IHZhbGlk DQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQpsb2ZmX3Qga2VybmVs X2ZzZWVrKHN0cnVjdCBmaWxlICogZmlsZV9wdHIsIGludCBvZmZzZXQsIGludCB3aGVuY2UpDQp7 DQoJLyogDQoJICogQ2hlY2sgZm9yIGEgdmFsaWQgZmlsZSBwb2ludGVyDQoJICovDQoJaWYoKE5V TEwgIT0gZmlsZV9wdHIpICYmICghKElTX0VSUihmaWxlX3B0cikpKSkNCgl7DQoJCS8qDQoJCSAq IENoZWNrIHRoZSBvcGVyYXRpb24gdG8gYmUgcGVyZm9ybWVkDQoJCSAqLw0KCQlzd2l0Y2god2hl bmNlKQ0KCQl7DQoJCQljYXNlIFNFRUtfU0VUOg0KCQkJCQlmaWxlX3B0ci0+Zl9wb3MgPSBvZmZz ZXQ7CS8qIEFic29sdXRlIG9mZnNldCAqLw0KCQkJCQlicmVhazsNCg0KCQkJY2FzZSBTRUVLX0NV UjoNCgkJCQkJZmlsZV9wdHItPmZfcG9zICs9IG9mZnNldDsJLyogUmVsYXRpdmUgb2Zmc2V0ICov DQoJCQkJCWJyZWFrOw0KDQoJCQljYXNlIFNFRUtfRU5EOg0KCQkJCQlmaWxlX3B0ci0+Zl9wb3Mg PSBmaWxlX3B0ci0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2l6ZSAtIG9mZnNldDsJLyogT2Zmc2V0 IGZyb20gdGhlIGVuZCBvZiBmaWxlICovDQoJCQkJCWJyZWFrOw0KDQoJCQlkZWZhdWx0Og0KCQkJ CQlyZXR1cm4gLUVJTlZBTDsJCQkJLyogSW52YWxpZCBvZmZzZXQgdHlwZSAqLw0KCQl9DQoJCQ0K CQkvKg0KCQkgKiBDaGVjayBmb3IgYm91bmRhcnkgY29uZGl0aW9ucw0KCQkgKi8NCgkJaWYgKGZp bGVfcHRyLT5mX3BvcyA8IDApDQoJCQlmaWxlX3B0ci0+Zl9wb3MgPSAwOw0KDQoJCS8qDQoJCSAq IFJldHVybiB0aGUgY3VycmVudCBmaWxlIHBvaW50ZXINCgkJICovDQoJCXJldHVybiAoZmlsZV9w dHItPmZfcG9zKTsNCgl9DQoJZWxzZQ0KCQlyZXR1cm4gLUVOT0VOVDsJCS8qIEZpbGUgcG9pbnRl ciBkb2VzIG5vdCBleGlzdCAqLw0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKg0KICogRnVuY3Rpb24gTmFtZQk6CWtlcm5lbF9mcmVhZA0KICogDQogKiBEZXRh aWxzCQkJOglUaGlzIGZ1bmN0aW9uIHJlYWRzIGRhdGEgZnJvbSBhIGZpbGUgaW4ga2VybmVsIG1v ZGUuDQogKiANCiAqIEFyZ3VtZW50cwkJOglmaWxlX3B0cgktIFBvaW50ZXIgdG8gdGhlIGZpbGUg b3BzIHN0cnVjdHVyZQ0KICogCQkJCQkJYnVmCQkJLSBidWZmZXIgdG8gcmVhZCBkYXRhIGludG8N CiAqIAkJCQkJCWxlbgkJCS0gbGVuZ3RoIG9mIGJ1ZmZlciB0byByZWFkDQogKg0KICogUmV0dXJu IFZhbHVlCQk6CW51bWJlciBvZiBieXRlcyByZWFkIGZyb20gdGhlIGZpbGUNCiAqIAkJCQkJCS1F Tk9FTlQgaWYgZmlsZSBwb2ludGVyIGlzIGludmFsaWQNCiAqIAkJCQkJCS1FTk9TWVMgaWYgZmls ZSByZWFkIGZ1bmN0aW9uIGlzIGludmFsaWQNCiAqIAkJCQkJCS1FQUNDRVMgaWYgZmlsZSByZWFk IHBlcm1pc3Npb25zIGFyZSBub3QgdmFsaWQNCiAqIAkJCQkJCS1FSU5WQUwgaWYgbGVuZ3RoIGlz IG5vdCB2YWxpZA0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KaW50 IGtlcm5lbF9mcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGVfcHRyLCBjaGFyICogYnVmLCBpbnQgbGVu KQ0Kew0KCWludAkJCQlvcmdmc3VpZCwgb3JnZnNnaWQ7DQoJaW50CQkJCWZpbGVfcmV0Ow0KCW1t X3NlZ21lbnRfdAlvcmdmczsNCg0KCS8qDQoJICogQ2hlY2sgaWYgdGhlIGZpbGUgcG9pbnRlciBp cyB2YWxpZA0KCSAqLw0KCWlmKChOVUxMID09IGZpbGVfcHRyKSB8fCAoSVNfRVJSKGZpbGVfcHRy KSkpDQoJCXJldHVybiAtRU5PRU5UOw0KDQoJLyoNCgkgKiBDaGVjayBmb3IgYSB2YWxpZCBmaWxl IHJlYWQgZnVuY3Rpb24NCgkgKi8NCglpZihmaWxlX3B0ci0+Zl9vcC0+cmVhZCA9PSBOVUxMKQ0K CQlyZXR1cm4gLUVOT1NZUzsNCg0KCS8qDQoJICogQ2hlY2sgZm9yIGFjY2VzcyBwZXJtaXNzaW9u cw0KCSAqLw0KCWlmKCgoZmlsZV9wdHItPmZfZmxhZ3MgJiBPX0FDQ01PREUpICYgKE9fUkRPTkxZ IHwgT19SRFdSKSkgIT0gMCkNCgkJcmV0dXJuIC1FQUNDRVM7DQoNCgkvKg0KCSAqIENoZWNrIGlm IHRoZXJlIGlzIGEgdmFsaWQgbGVuZ3RoDQoJICovDQoJaWYoMCA+PSBsZW4pDQoJCXJldHVybiAt RUlOVkFMOw0KDQoJLyogDQoJICogU2F2ZSB1aWQgYW5kIGdpZCB1c2VkIGZvciBmaWxlc3lzdGVt IGFjY2Vzcy4NCgkgKi8NCglvcmdmc3VpZCA9IGN1cnJlbnQtPmZzdWlkOw0KCW9yZ2ZzZ2lkID0g Y3VycmVudC0+ZnNnaWQ7DQoNCgkvKg0KCSAqIFNldCB1c2VyIGFuZCBncm91cCB0byAwIChyb290 KQ0KCSAqLw0KCWN1cnJlbnQtPmZzdWlkID0gMDsNCgljdXJyZW50LT5mc2dpZCA9IDA7DQoNCgkv KiANCgkgKiBTYXZlIEZTIHJlZ2lzdGVyIGFuZCBzZXQgRlMgcmVnaXN0ZXIgdG8ga2VybmVsDQoJ ICogc3BhY2UsIG5lZWRlZCBmb3IgcmVhZCBhbmQgd3JpdGUgdG8gYWNjZXB0DQoJICogYnVmZmVy IGluIGtlcm5lbCBzcGFjZS4NCgkgKi8NCglvcmdmcyA9IGdldF9mcygpOw0KDQoJLyoNCgkgKiBT ZXQgdGhlIEZTIHJlZ2lzdGVyIHRvIEtFUk5FTCBtb2RlLg0KCSAqLw0KCXNldF9mcyhLRVJORUxf RFMpOw0KDQoJLyoNCgkgKiBSZWFkIHRoZSBhY3R1YWwgZGF0YSBmcm9tIHRoZSBmaWxlDQoJICov DQoJZmlsZV9yZXQgPSBmaWxlX3B0ci0+Zl9vcC0+cmVhZChmaWxlX3B0ciwgYnVmLCBsZW4sICZm aWxlX3B0ci0+Zl9wb3MpOw0KDQoJLyoNCgkgKiBSZXN0b3JlIHRoZSBGUyByZWdpc3Rlcg0KCSAq Lw0KCXNldF9mcyhvcmdmcyk7DQoNCgkvKg0KCSAqIFJlc3RvcmUgdGhlIHVpZCBhbmQgZ2lkDQoJ ICovDQoJY3VycmVudC0+ZnN1aWQgPSBvcmdmc3VpZDsNCgljdXJyZW50LT5mc2dpZCA9IG9yZ2Zz Z2lkOw0KDQoJLyoNCgkgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZWFkLg0KCSAqLw0K ICAgIHJldHVybiAoZmlsZV9yZXQpOw0KfQ0KDQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqDQogKiBGdW5jdGlvbiBOYW1lCToJa2VybmVsX2ZnZXRjDQogKiANCiAq IERldGFpbHMJCQk6CVRoaXMgZnVuY3Rpb24gcmVhZHMgYSBjaGFyYWN0ZXIgZnJvbSBhIGZpbGUg aW4ga2VybmVsIG1vZGUuDQogKiANCiAqIEFyZ3VtZW50cwkJOglmaWxlX3B0cgktIFBvaW50ZXIg dG8gdGhlIGZpbGUgb3BzIHN0cnVjdHVyZQ0KICoNCiAqIFJldHVybiBWYWx1ZQkJOgljaGFyYWN0 ZXIgcmVhZCBmcm9tIGZpbGUNCiAqIAkJCQkJCUVPRiBpZiBlbmQgb2YgZmlsZQ0KICogCQkJCQkJ RXJyb3IgY29kZSBpZiBmaWxlIGNhbm5vdCBiZSByZWFkDQogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovDQppbnQga2VybmVsX2ZnZXRjKHN0cnVjdCBmaWxlICogZmlsZV9w dHIpDQp7DQoJaW50CQlyZWFkX3JldDsNCgljaGFyCWJ1ZjsNCg0KCS8qDQoJICogUmVhZCBvbmUg Ynl0ZSBmcm9tIHRoZSBmaWxlDQoJICovDQoJcmVhZF9yZXQgPSBrZXJuZWxfZnJlYWQoZmlsZV9w dHIsICZidWYsIDEpOw0KDQoJLyoNCgkgKiBDaGVjayByZXR1cm4gdmFsdWUNCgkgKi8NCglpZiAo cmVhZF9yZXQgPiAwKQ0KCQlyZXR1cm4gYnVmOwkJCS8qIFJldHVybiB0aGUgY2hhcmFjdGVyIHJl YWQgKi8NCgllbHNlIGlmICgwID09IHJlYWRfcmV0KQ0KCQlyZXR1cm4gLTE7CQkJLyogRW5kIG9m IGZpbGUgKi8NCgllbHNlDQoJCXJldHVybiByZWFkX3JldDsJLyogRXJyb3IgY29kZSAqLw0KfQ0K DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogRnVuY3Rpb24g TmFtZQk6CWtlcm5lbF9mZ2V0cw0KICogDQogKiBEZXRhaWxzCQkJOglUaGlzIGZ1bmN0aW9uIHJl YWRzIGEgc3RyaW5nIGZyb20gYSBmaWxlIGluIGtlcm5lbCBtb2RlLg0KICogDQogKiBBcmd1bWVu dHMJCToJZmlsZV9wdHIJLSBQb2ludGVyIHRvIHRoZSBmaWxlIG9wcyBzdHJ1Y3R1cmUNCiAqIAkJ CQkJCXN0cgkJCS0gYnVmZmVyIHRvIHJlYWQgZGF0YSBpbnRvDQogKiAJCQkJCQlsZW4JCQktIGxl bmd0aCBvZiBidWZmZXIgdG8gcmVhZA0KICoNCiAqIFJldHVybiBWYWx1ZQkJOgludW1iZXIgb2Yg Ynl0ZXMgcmVhZCBpZiBzdWNjZXNzZnVsDQogKiAJCQkJCQlFcnJvciBjb2RlIGlmIHRoZXJlIHdh cyBhbiBlcnJvciByZWFkaW5nIGZyb20gdGhlIGZpbGUNCiAqIAkJCQkJCS1FSU5WQUwgaWYgbGVu Z3RoIGlzIG5vdCB2YWxpZA0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Lw0KaW50IGtlcm5lbF9mZ2V0cyhzdHJ1Y3QgZmlsZSAqIGZpbGVfcHRyLCBjaGFyICogc3RyLCBp bnQgbGVuKQ0Kew0KCWludAkJCQlmaWxlX3JldCwgcmVhZGxlbjsNCgljaGFyICoJCQljcDsNCg0K CS8qDQoJICogQ2hlY2sgaWYgdGhlcmUgaXMgYSB2YWxpZCBsZW5ndGgNCgkgKi8NCglpZigwID49 IGxlbikNCgkJcmV0dXJuIC1FSU5WQUw7DQoNCgkvKg0KCSAqIFJlYWQgdGhlIGFjdHVhbCBkYXRh IGZyb20gdGhlIGZpbGUgYW5kIHBhcnNlIGl0DQoJICovDQoJZm9yKGNwID0gc3RyLCBmaWxlX3Jl dCA9IC0xLCByZWFkbGVuID0gMDsgcmVhZGxlbiA8IGxlbiAtIDE7ICsrY3AsICsrcmVhZGxlbikN Cgl7DQoJCS8qDQoJCSAqIFJlYWQgb25lIGNoYXJhY3RlciBmcm9tIHRoZSBmaWxlDQoJCSAqLw0K CQlmaWxlX3JldCA9IGtlcm5lbF9mZ2V0YyhmaWxlX3B0cik7DQoNCgkJLyoNCgkJICogQ2hlY2sg Zm9yIGVycm9yIGluIHJlYWRpbmcNCgkJICovDQoJCWlmKDAgPj0gZmlsZV9yZXQpDQoJCQlicmVh azsJCQkJLyogRW5kIG9mIGZpbGUgb3IgZXJyb3IgaW4gZmlsZSAqLw0KCQllbHNlDQoJCQkqY3Ag PSBmaWxlX3JldDsJCS8qIFVwZGF0ZSAtIGFjdHVhbCBkYXRhIHJlYWQgKi8NCg0KCQkvKg0KCQkg KiBDaGVjayBmb3IgYSBuZXcgbGluZSBjaGFyYWN0ZXINCgkJICovDQoJCWlmKCpjcCA9PSAnXG4n KQ0KCQl7DQoJCQkrK2NwOw0KCQkJKytyZWFkbGVuOw0KCQkJYnJlYWs7DQoJCX0NCgl9DQoNCgkv Kg0KCSAqIExhc3QgY2hhcmFjdGVyIG9mIHN0cmluZyBpcyBOVUxMDQoJICovDQoJKmNwID0gKGNo YXIpIE5VTEw7DQoNCgkvKg0KCSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgb3Ig ZXJyb3IuDQoJICovDQoJcmV0dXJuICgoMCA+PSBmaWxlX3JldCkgPyBmaWxlX3JldCA6IHJlYWRs ZW4pOw0KfQ0KDQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQog KiBGdW5jdGlvbiBOYW1lCToJa2VybmVsX2Z3cml0ZQ0KICogDQogKiBEZXRhaWxzCQkJOglUaGlz IGZ1bmN0aW9uIHdyaXRlcyBkYXRhIHRvIGEgZmlsZSBpbiBrZXJuZWwgbW9kZS4NCiAqIA0KICog QXJndW1lbnRzCQk6CWZpbGVfcHRyCS0gUG9pbnRlciB0byB0aGUgZmlsZSBvcHMgc3RydWN0dXJl DQogKiAJCQkJCQlidWYJCQktIGJ1ZmZlciB0byB3cml0ZSBkYXRhIGZyb20NCiAqIAkJCQkJCWxl bgkJCS0gbGVuZ3RoIG9mIGJ1ZmZlciB0byB3cml0ZQ0KICoNCiAqIFJldHVybiBWYWx1ZQkJOglu dW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGUgZmlsZQ0KICogCQkJCQkJLUVOT0VOVCBpZiBm aWxlIHBvaW50ZXIgaXMgaW52YWxpZA0KICogCQkJCQkJLUVOT1NZUyBpZiBmaWxlIHdyaXRlIGZ1 bmN0aW9uIGlzIGludmFsaWQNCiAqIAkJCQkJCS1FQUNDRVMgaWYgZmlsZSB3cml0ZSBwZXJtaXNz aW9ucyBhcmUgbm90IHZhbGlkDQogKiAJCQkJCQktRUlOVkFMIGlmIGxlbmd0aCBpcyBub3QgdmFs aWQNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmludCBrZXJuZWxf ZndyaXRlKHN0cnVjdCBmaWxlICogZmlsZV9wdHIsIGNoYXIgKiBidWYsIGludCBsZW4pDQp7DQoJ aW50CQkJCW9yZ2ZzdWlkLCBvcmdmc2dpZDsNCglpbnQJCQkJZmlsZV9yZXQ7DQoJbW1fc2VnbWVu dF90CW9yZ2ZzOw0KDQoJLyoNCgkgKiBDaGVjayBpZiB0aGUgZmlsZSBwb2ludGVyIGlzIHZhbGlk DQoJICovDQoJaWYoKE5VTEwgPT0gZmlsZV9wdHIpIHx8IChJU19FUlIoZmlsZV9wdHIpKSkNCgkJ cmV0dXJuIC1FTk9FTlQ7DQoNCgkvKg0KCSAqIENoZWNrIGZvciBhIHZhbGlkIGZpbGUgd3JpdGUg ZnVuY3Rpb24NCgkgKi8NCglpZihmaWxlX3B0ci0+Zl9vcC0+d3JpdGUgPT0gTlVMTCkNCgkJcmV0 dXJuIC1FTk9TWVM7DQoNCgkvKg0KCSAqIENoZWNrIGZvciBhY2Nlc3MgcGVybWlzc2lvbnMNCgkg Ki8NCglpZigoKGZpbGVfcHRyLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSAmIChPX1dST05MWSB8IE9f UkRXUikpICE9IDApDQoJCXJldHVybiAtRUFDQ0VTOw0KDQoJLyoNCgkgKiBDaGVjayBpZiB0aGVy ZSBpcyBhIHZhbGlkIGxlbmd0aA0KCSAqLw0KCWlmKDAgPj0gbGVuKQ0KCQlyZXR1cm4gLUVJTlZB TDsNCg0KCS8qIA0KCSAqIFNhdmUgdWlkIGFuZCBnaWQgdXNlZCBmb3IgZmlsZXN5c3RlbSBhY2Nl c3MuDQoJICovDQoJb3JnZnN1aWQgPSBjdXJyZW50LT5mc3VpZDsNCglvcmdmc2dpZCA9IGN1cnJl bnQtPmZzZ2lkOw0KDQoJLyoNCgkgKiBTZXQgdXNlciBhbmQgZ3JvdXAgdG8gMCAocm9vdCkNCgkg Ki8NCgljdXJyZW50LT5mc3VpZCA9IDA7DQoJY3VycmVudC0+ZnNnaWQgPSAwOw0KDQoJLyogDQoJ ICogU2F2ZSBGUyByZWdpc3RlciBhbmQgc2V0IEZTIHJlZ2lzdGVyIHRvIGtlcm5lbA0KCSAqIHNw YWNlLCBuZWVkZWQgZm9yIHJlYWQgYW5kIHdyaXRlIHRvIGFjY2VwdA0KCSAqIGJ1ZmZlciBpbiBr ZXJuZWwgc3BhY2UuDQoJICovDQoJb3JnZnMgPSBnZXRfZnMoKTsNCg0KCS8qDQoJICogU2V0IHRo ZSBGUyByZWdpc3RlciB0byBLRVJORUwgbW9kZS4NCgkgKi8NCglzZXRfZnMoS0VSTkVMX0RTKTsN Cg0KCS8qDQoJICogUmVhZCB0aGUgYWN0dWFsIGRhdGEgZnJvbSB0aGUgZmlsZQ0KCSAqLw0KCWZp bGVfcmV0ID0gZmlsZV9wdHItPmZfb3AtPndyaXRlKGZpbGVfcHRyLCBidWYsIGxlbiwgJmZpbGVf cHRyLT5mX3Bvcyk7DQoNCgkvKg0KCSAqIFJlc3RvcmUgdGhlIEZTIHJlZ2lzdGVyDQoJICovDQoJ c2V0X2ZzKG9yZ2ZzKTsNCg0KCS8qDQoJICogUmVzdG9yZSB0aGUgdWlkIGFuZCBnaWQNCgkgKi8N CgljdXJyZW50LT5mc3VpZCA9IG9yZ2ZzdWlkOw0KCWN1cnJlbnQtPmZzZ2lkID0gb3JnZnNnaWQ7 DQoNCgkvKg0KCSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuDQoJICovDQogICAg cmV0dXJuIChmaWxlX3JldCk7DQp9DQoNCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioNCiAqIEZ1bmN0aW9uIE5hbWUJOglrZXJuZWxfZnB1dGMNCiAqIA0KICogRGV0 YWlscwkJCToJVGhpcyBmdW5jdGlvbiB3cml0ZXMgYSBjaGFyYWN0ZXIgdG8gYSBmaWxlIGluIGtl cm5lbCBtb2RlLg0KICogDQogKiBBcmd1bWVudHMJCToJZmlsZV9wdHIJLSBQb2ludGVyIHRvIHRo ZSBmaWxlIG9wcyBzdHJ1Y3R1cmUNCiAqIAkJCQkJCWJ1ZgkJCS0gY2hhcmFjdGVyIHRvIGJlIHdy aXR0ZW4gaW50byBmaWxlDQogKg0KICogUmV0dXJuIFZhbHVlCQk6CWNoYXJhY3RlciB3cml0dGVu IHRvIGZpbGUNCiAqIAkJCQkJCUVPRiBpZiBlbmQgb2YgZmlsZQ0KICogCQkJCQkJRXJyb3IgY29k ZSBpZiBmaWxlIGNhbm5vdCBiZSB3cml0dGVuIHRvDQogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovDQppbnQga2VybmVsX2ZwdXRjKHN0cnVjdCBmaWxlICogZmlsZV9wdHIs IGNoYXIgYnVmKQ0Kew0KCWludAkJd3JpdGVfcmV0Ow0KDQoJLyoNCgkgKiBXcml0ZSBvbmUgYnl0 ZSB0byB0aGUgZmlsZQ0KCSAqLw0KCXdyaXRlX3JldCA9IGtlcm5lbF9md3JpdGUoZmlsZV9wdHIs ICZidWYsIDEpOw0KDQoJLyoNCgkgKiBDaGVjayByZXR1cm4gdmFsdWUNCgkgKi8NCglpZiAod3Jp dGVfcmV0ID4gMCkNCgkJcmV0dXJuIGJ1ZjsJCQkvKiBSZXR1cm4gdGhlIGNoYXJhY3RlciB3cml0 dGVuICovDQoJZWxzZSBpZiAoMCA9PSB3cml0ZV9yZXQpDQoJCXJldHVybiAtMTsJCQkvKiBFbmQg b2YgZmlsZSAqLw0KCWVsc2UNCgkJcmV0dXJuIHdyaXRlX3JldDsJLyogRXJyb3IgY29kZSAqLw0K fQ0KDQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiBGdW5j dGlvbiBOYW1lCToJa2VybmVsX2ZwdXRzDQogKiANCiAqIERldGFpbHMJCQk6CVRoaXMgZnVuY3Rp b24gd3JpdGVzIGEgc3RyaW5nIHRvIGEgZmlsZSBpbiBrZXJuZWwgbW9kZS4NCiAqIA0KICogQXJn dW1lbnRzCQk6CWZpbGVfcHRyCS0gUG9pbnRlciB0byB0aGUgZmlsZSBvcHMgc3RydWN0dXJlDQog KiAJCQkJCQlzdHIJCQktIFN0cmluZyB0byBiZSB3cml0dGVuIHRvIGZpbGUNCiAqDQogKiBSZXR1 cm4gVmFsdWUJCToJbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiB0byBmaWxlDQogKiAJCQkJ CQlFcnJvciBjb2RlIGlmIG5vdCBzdWNjZXNzZnVsICh2YWx1ZSByZXR1cm5lZCBieSBrZXJuZWxf ZndyaXRlKQ0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KaW50IGtl cm5lbF9mcHV0cyhzdHJ1Y3QgZmlsZSAqIGZpbGVfcHRyLCBjaGFyICogc3RyKQ0Kew0KCS8qDQoJ ICogV3JpdGUgdG8gZmlsZQ0KCSAqLw0KCXJldHVybiAoa2VybmVsX2Z3cml0ZShmaWxlX3B0ciwg c3RyLCBzdHJsZW4oc3RyKSkpOw0KfQ0KDQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqDQogKiBGdW5jdGlvbiBOYW1lCToJa2VybmVsX2ZwcmludGYNCiAqIA0KICog RGV0YWlscwkJCToJVGhpcyBmdW5jdGlvbiB3cml0ZXMgYSB0byBhIGZpbGUgdXNpbmcgdGhlIHBy aW50ZiBmb3JtYXQgaW4ga2VybmVsIG1vZGUuDQogKiAJCQkJCQlUaGUgbWF4aW11bSBkYXRhIHRv IGJlIHdyaXR0ZW4gaXMgbGltaXRlZCB0byAxMDI0IGJ5dGVzLg0KICogDQogKiBBcmd1bWVudHMJ CToJZmlsZV9wdHIJLSBQb2ludGVyIHRvIHRoZSBmaWxlIG9wcyBzdHJ1Y3R1cmUNCiAqIAkJCQkJ CWZtdAkJCS0gU3RyaW5nIGZvcm1hdHRpbmcNCiAqIAkJCQkJCS4uLgkJCS0gdmFyaWFibGUgYXJn dW1lbnRzDQogKg0KICogUmV0dXJuIFZhbHVlCQk6CW51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0 ZW4gdG8gZmlsZQ0KICogCQkJCQkJRXJyb3IgY29kZSBpZiBub3Qgc3VjY2Vzc2Z1bCAodmFsdWUg cmV0dXJuZWQgYnkga2VybmVsX2Z3cml0ZSkNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8NCmludCBrZXJuZWxfZnByaW50ZihzdHJ1Y3QgZmlsZSAqIGZpbGVfcHRyLCBj b25zdCBjaGFyICogZm10LCAuLi4pDQp7DQoJc3RhdGljIGNoYXIgc19idWZbMTAyNF07DQoJdmFf bGlzdCBhcmdzOw0KDQoJLyoNCgkgKiBGb3JtYXQgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbg0KCSAq Lw0KCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7DQoJdnNwcmludGYoc19idWYsIGZtdCwgYXJncyk7DQoJ dmFfZW5kKGFyZ3MpOw0KDQoJLyoNCgkgKiBXcml0ZSB0byBmaWxlIGFuZCByZXR1cm4gdGhlIGVy cm9yIGNvZGUNCgkgKi8NCglyZXR1cm4ga2VybmVsX2ZwdXRzKGZpbGVfcHRyLCBzX2J1Zik7DQp9 DQo= ------_=_NextPart_001_01C36596.44D82B3D--