From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30607 invoked by alias); 19 Feb 2009 08:29:10 -0000 Received: (qmail 30597 invoked by uid 22791); 19 Feb 2009 08:29:08 -0000 X-SWARE-Spam-Status: No, hits=1.3 required=5.0 tests=AWL,BAYES_50,J_CHICKENPOX_33,J_CHICKENPOX_37,J_CHICKENPOX_74,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from yx-out-1718.google.com (HELO yx-out-1718.google.com) (74.125.44.154) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 19 Feb 2009 08:29:02 +0000 Received: by yx-out-1718.google.com with SMTP id 3so106436yxi.48 for ; Thu, 19 Feb 2009 00:28:59 -0800 (PST) MIME-Version: 1.0 Received: by 10.90.120.19 with SMTP id s19mr483152agc.73.1235032139633; Thu, 19 Feb 2009 00:28:59 -0800 (PST) In-Reply-To: References: Date: Thu, 19 Feb 2009 20:26:00 -0000 Message-ID: Subject: Re: Use external editor in 'commands' command From: Alfredo Ortega To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=001636283736f8134304634153eb X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-02/txt/msg00396.txt.bz2 --001636283736f8134304634153eb Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 4300 2009/2/19 Alfredo Ortega : > 2009/2/2 Tom Tromey : >>>>>>> "Alfredo" == Alfredo Ortega writes: >> >> Alfredo> 1) Following the suggestion of Tom Tromey, i made "commands" >> Alfredo> a prefix command, and now it is "commands edit n". >> >> Your patch does this using strncmp -- but gdb already has built-in >> machinery for prefix commands. See add_prefix_cmd. So, the idea here >> would be to change _initialize_breakpoint to use add_prefix_cmd, >> instead of add_com, when creating the "commands" command. Then, you'd >> have a separate function to implement "commands edit". Maybe this >> means introducing a helper function to do some of the work, I don't >> know. >> >> Alfredo> This is a much better patch, but also is a much bigger one (I already >> Alfredo> sent the FSF form that Tom suggested), so surely there are plenty of >> Alfredo> errors. Corrections are welcomed. >> >> A few nits inline. >> >> Alfredo> +#define COMMANDS_EDCOMMAND "edit" >> >> With the prefix change, you won't need this. >> >> Alfredo> + /* Edit commands with external editor */ >> >> In the GNU style, comments are full sentences that start with a >> capital letter and end with a period and two spaces. This one is >> missing the period, but others are incorrect in other ways. >> >> Alfredo> + /* discard the "edit" command */ >> >> E.g., this one... >> >> Alfredo> + get_number (&p); >> Alfredo> + bnum = get_number (&p); >> >> Two calls to get_number seems suspect. >> >> Alfredo> + /* vitmp = tempnam(NULL,".gdb"); this is more secure according to man mkstemp, but gcc complains... */ >> >> There's no need for this comment, IMO. >> >> Alfredo> + if (!(vitmp = make_temp_file (NULL))) >> >> GNU style prohibits assignments in conditionals. >> >> Alfredo> + { >> Alfredo> + error (_("Can't create temporary file for editing.")); >> Alfredo> + return; >> Alfredo> + } >> >> The "error" function never returns. It calls longjmp. So, this >> return is not needed. This occurs in a few spots. >> >> Alfredo> + l = b->commands; >> Alfredo> + while (l) >> Alfredo> + { >> Alfredo> + fsize = 0; >> Alfredo> + fsize += fwrite (l->line, 1, strlen (l->line), tmpstream); >> >> I think you should probably use "print_command_lines" to print the >> breakpoint commands to a file. >> >> Alfredo> + sysret = system (cmdline); >> Alfredo> + xfree (cmdline); >> Alfredo> + if (sysret < 0) >> >> I think this should also check "sysret" when it is >= 0, and fail if >> the editor does not exit with status 0. >> >> Thanks for working on this, >> Tom >> > > Sorry for the late answer. > I refactored the whole patch, is getting better...add_prefix_cmd() > made me sweat! :) and print_command_lines() is a little tricky to use, > so maybe i didn't get it right this time. > Also I send the FSF paperwork and tried to do all your corrections in > the following patch. > Thanks to you for teaching and the patience! > > Regards, > > Alfred > Sorry, I forgot the changelog in the last e-mail. I'm resending the patch. 2009-01-16 Alfredo Ortega * breakpoint.c (commands_command,_initialize_breakpoint, edit_command,check_executing_commands, commands_edit_command, commands_dump_to_file): Add the 'edit' keyword to the 'commands' command to allow the use of an external editor to add or modify commands. Added an utility function to dump breakpoint commands to a file. Added an utility function to launch an external editor on breakpoint commands. Joined common checks in commands_command and edit_command. * utils.c,defs.h (external_editor,initialize_utils): Added an utility function to return the external text editor of the system. Added "set external-editor" and "show external-editor" commands to set/show the external editor variable 2009-01-16 Alfredo Ortega * gdb.texinfo, refcard.tex (breakpoint commands, set external-editor, show external-editor): Added documentation of the edit option, for editing commands with an external editor. Also, added a brief description of the "set external-editor" and "show external-editor" commands. --001636283736f8134304634153eb Content-Type: text/x-diff; charset=US-ASCII; name="commands2.diff" Content-Disposition: attachment; filename="commands2.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_frd67uxc1 Content-length: 13465 ZGlmZiAtdXByIE9MRC9zcmMvZ2RiL2JyZWFrcG9pbnQuYyBORVcvc3JjL2dk Yi9icmVha3BvaW50LmMKLS0tIE9MRC9zcmMvZ2RiL2JyZWFrcG9pbnQuYwky MDA5LTAxLTE0IDAzOjEwOjI5LjAwMDAwMDAwMCAtMDIwMAorKysgTkVXL3Ny Yy9nZGIvYnJlYWtwb2ludC5jCTIwMDktMDItMTkgMDY6MTI6MjYuMDAwMDAw MDAwIC0wMjAwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiY29tcGxl dGVyLmgiCiAjaW5jbHVkZSAiZ2RiLmgiCiAjaW5jbHVkZSAidWktb3V0Lmgi CisjaW5jbHVkZSAiY2xpLW91dC5oIgogI2luY2x1ZGUgImNsaS9jbGktc2Ny aXB0LmgiCiAjaW5jbHVkZSAiZ2RiX2Fzc2VydC5oIgogI2luY2x1ZGUgImJs b2NrLmgiCkBAIC01ODUsMjAgKzU4NiwxMTYgQEAgY29uZGl0aW9uX2NvbW1h bmQgKGNoYXIgKmFyZywgaW50IGZyb21fdAogICBlcnJvciAoXygiTm8gYnJl YWtwb2ludCBudW1iZXIgJWQuIiksIGJudW0pOwogfQogCisvKiBEdW1wcyBi cmVha3BvaW50IGNvbW1hbmRzIHRvIGEgZmlsZS4gICovCiBzdGF0aWMgdm9p ZAotY29tbWFuZHNfY29tbWFuZCAoY2hhciAqYXJnLCBpbnQgZnJvbV90dHkp Citjb21tYW5kc19kdW1wX3RvX2ZpbGUgKGNoYXIgKmZpbGVuYW1lLCBzdHJ1 Y3QgYnJlYWtwb2ludCAqYikKK3sKKyAgc3RydWN0IGNsZWFudXAgKmNsZWFu dXBzOworICBzdHJ1Y3QgdWlfZmlsZSAqb2xkLCAqb3V0ZmlsZSA9IGdkYl9m b3BlbiAoZmlsZW5hbWUsICJ3Iik7CisgIGNsZWFudXBzID0gbWFrZV9jbGVh bnVwX3VpX2ZpbGVfZGVsZXRlIChvdXRmaWxlKTsKKyAgb2xkID0gY2xpX291 dF9zZXRfc3RyZWFtICh1aW91dCwgb3V0ZmlsZSk7CisgIHByaW50X2NvbW1h bmRfbGluZXMgKHVpb3V0LCBiLT5jb21tYW5kcywgNCk7CisgIGNsaV9vdXRf c2V0X3N0cmVhbSAodWlvdXQsIG9sZCk7CisgIGRvX2NsZWFudXBzIChjbGVh bnVwcyk7CisKK30KKworLyogTGF1bmNoZXMgdGhlIGVkaXRvciBvbiB0aGUg YnJlYWtwb2ludCBjb21tYW5kLiAgKi8KK2NoYXIgKgorY29tbWFuZHNfZWRp dF9jb21tYW5kIChpbnQgYm51bSkKIHsKKyAgY2hhciAqdml0bXAgPSBOVUxM OworICBjaGFyICplZGl0b3I7CiAgIHN0cnVjdCBicmVha3BvaW50ICpiOwot ICBjaGFyICpwOwotICBpbnQgYm51bTsKLSAgc3RydWN0IGNvbW1hbmRfbGlu ZSAqbDsKKyAgY2hhciAqY21kbGluZSA9IE5VTEw7CisgIGludCBzeXNyZXQ7 CisgIC8qIEdlbmVyYXRlcyB0aGUgdGVtcG9yYXJ5IGZpbGUgbmFtZS4gICov CisgIHZpdG1wID0gbWFrZV90ZW1wX2ZpbGUgKE5VTEwpOworICBpZiAoIXZp dG1wKQorICAgICAgZXJyb3IgKF8oIkNhbid0IGNyZWF0ZSB0ZW1wb3Jhcnkg ZmlsZSBmb3IgZWRpdGluZy4iKSk7CisgIGVkaXRvciA9IGV4dGVybmFsX2Vk aXRvciAoKTsKKyAgaWYgKCFlZGl0b3IpCisgICAgICBlcnJvciAoXygiRXh0 ZXJuYWwgZWRpdG9yIG5vdCBmb3VuZC4iKSk7CisgIEFMTF9CUkVBS1BPSU5U UyAoYikgaWYgKGItPm51bWJlciA9PSBibnVtKQorICAgIHsKKyAgICAgIGlm ICgmYi0+Y29tbWFuZHMpCisJY29tbWFuZHNfZHVtcF90b19maWxlICh2aXRt cCwgYik7CisgICAgICAvKiBFZGl0IHRoZSBmaWxlLiAgKi8KKyAgICAgIGNt ZGxpbmUgPSB4bWFsbG9jIChzdHJsZW4gKGVkaXRvcikgKyBzdHJsZW4gKHZp dG1wKSArIDUwKTsKKyAgICAgIHNwcmludGYgKGNtZGxpbmUsICIlcyBcIiVz XCIiLCBlZGl0b3IsIHZpdG1wKTsKKyAgICAgIHN5c3JldCA9IHN5c3RlbSAo Y21kbGluZSk7CisgICAgICB4ZnJlZSAoY21kbGluZSk7CisgICAgICBpZiAo c3lzcmV0IDwgMCkKKwkgIGVycm9yIChfKCJDYW4ndCBleGVjdXRlIGV4dGVy bmFsIGVkaXRvci4iKSk7CisgICAgICBpZiAoc3lzcmV0ID4gMCkKKwkgIGVy cm9yIChfKCJFeHRlcm5hbCBlZGl0b3IgcmV0dXJuZWQgbm9uLXplcm8gc3Rh dHVzLiIpKTsKKyAgICB9CisgIHJldHVybiB2aXRtcDsKK30KKwogCiAgIC8q IElmIHdlIGFsbG93ZWQgdGhpcywgd2Ugd291bGQgaGF2ZSBwcm9ibGVtcyB3 aXRoIHdoZW4gdG8KICAgICAgZnJlZSB0aGUgc3RvcmFnZSwgaWYgd2UgY2hh bmdlIHRoZSBjb21tYW5kcyBjdXJyZW50bHkKICAgICAgYmVpbmcgcmVhZCBm cm9tLiAgKi8KIAorc3RhdGljIHZvaWQKK2NoZWNrX2V4ZWN1dGluZ19jb21t YW5kcyAoKQorewogICBpZiAoZXhlY3V0aW5nX2JyZWFrcG9pbnRfY29tbWFu ZHMpCi0gICAgZXJyb3IgKF8oIkNhbid0IHVzZSB0aGUgXCJjb21tYW5kc1wi IGNvbW1hbmQgYW1vbmcgYSBicmVha3BvaW50J3MgY29tbWFuZHMuIikpOwor ICAgIGVycm9yIChfCisJICAgKCJDYW4ndCB1c2UgdGhlIFwiY29tbWFuZHNc IiBjb21tYW5kIGFtb25nIGEgYnJlYWtwb2ludCdzIGNvbW1hbmRzLiIpKTsK K30KKworLyogTGlrZSBjb21tYW5kc19jb21tYW5kIGJ1dCB1c2luZyBhbiBl eHRlcm5hbCBlZGl0b3IuICAqLworc3RhdGljIHZvaWQKK2VkaXRfY29tbWFu ZCAoY2hhciAqYXJncywgaW50IGZyb21fdHR5KQoreworICBpbnQgYm51bTsK KyAgY2hhciAqcDsKKyAgY2hhciAqdml0bXA7CisgIHN0cnVjdCBicmVha3Bv aW50ICpiOworICBzdHJ1Y3QgY29tbWFuZF9saW5lICpsOworICBGSUxFICp0 bXBzdHJlYW0gPSBOVUxMOworCisgIGNoZWNrX2V4ZWN1dGluZ19jb21tYW5k cyAoKTsKKyAgcCA9IGFyZ3M7CisgIGlmICghcCkKKyAgICBlcnJvciAoXygi Tm8gYnJlYWtwb2ludCBudW1iZXIuIikpOworICBibnVtID0gZ2V0X251bWJl ciAoJnApOworICBpZiAocCAmJiAqcCkKKyAgICBlcnJvciAoXygiVW5leHBl Y3RlZCBleHRyYSBhcmd1bWVudHMgZm9sbG93aW5nIGJyZWFrcG9pbnQgbnVt YmVyLiIpKTsKKyAgLyogTGF1bmNoZXMgdGhlIGVkaXRvci4gICovCisgIHZp dG1wID0gY29tbWFuZHNfZWRpdF9jb21tYW5kIChibnVtKTsKKyAgaWYgKCF2 aXRtcCkKKyAgICByZXR1cm47CisKKyAgQUxMX0JSRUFLUE9JTlRTIChiKSBp ZiAoYi0+bnVtYmVyID09IGJudW0pCisgICAgeworICAgICAgLyogUmVkaXJl Y3QgaW5zdHJlYW0gdG8gdGhlIGNvbW1hbmRzIHRlbXBvcmFsIGZpbGUuICAq LworICAgICAgdG1wc3RyZWFtID0gaW5zdHJlYW07CisgICAgICBpbnN0cmVh bSA9IGZvcGVuICh2aXRtcCwgInIiKTsKKyAgICAgIGwgPSByZWFkX2NvbW1h bmRfbGluZXMgKE5VTEwsIGZyb21fdHR5LCAxKTsKKyAgICAgIGZyZWVfY29t bWFuZF9saW5lcyAoJmItPmNvbW1hbmRzKTsKKyAgICAgIGItPmNvbW1hbmRz ID0gbDsKKyAgICAgIGJyZWFrcG9pbnRzX2NoYW5nZWQgKCk7CisgICAgICBv YnNlcnZlcl9ub3RpZnlfYnJlYWtwb2ludF9tb2RpZmllZCAoYi0+bnVtYmVy KTsKKyAgICAgIC8qIFJlc3RvcmUgaW5zdHJlYW0gYW5kIGVyYXNlIHRlbXBv cmFsIGZpbGUuICAqLworICAgICAgaW5zdHJlYW0gPSB0bXBzdHJlYW07Cisg ICAgICB1bmxpbmsgKHZpdG1wKTsKKyAgICAgIHJldHVybjsKKyAgICB9Cisg IGVycm9yIChfKCJObyBicmVha3BvaW50IG51bWJlciAlZC4iKSwgYm51bSk7 Cit9CisKK3N0YXRpYyB2b2lkCitjb21tYW5kc19jb21tYW5kIChjaGFyICph cmcsIGludCBmcm9tX3R0eSkKK3sKKyAgc3RydWN0IGJyZWFrcG9pbnQgKmI7 CisgIGNoYXIgKnA7CisgIGludCBibnVtOworICBzdHJ1Y3QgY29tbWFuZF9s aW5lICpsOworCisgIGNoZWNrX2V4ZWN1dGluZ19jb21tYW5kcygpOwogCiAg IHAgPSBhcmc7CiAgIGJudW0gPSBnZXRfbnVtYmVyICgmcCk7CkBAIC04MDUy LDYgKzgxNDksMTIgQEAgTXVsdGlwbGUgYnJlYWtwb2ludHMgYXQgb25lIHBs YWNlIGFyZSBwZQogXG5cCiBEbyBcImhlbHAgYnJlYWtwb2ludHNcIiBmb3Ig aW5mbyBvbiBvdGhlciBjb21tYW5kcyBkZWFsaW5nIHdpdGggYnJlYWtwb2lu dHMuIgogCisvKiBMaXN0IG9mIHN1YmNvbW1hbmRzIGZvciAiY29tbWFuZHMi LiAgKi8KK3N0YXRpYyBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqY29tbWFu ZHNfY29tbWFuZF9saXN0OworCisvKiBMaXN0IG9mIHN1YmNvbW1hbmRzIGZv ciAiZWRpdCIuICAqLworc3RhdGljIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50 ICplZGl0X2NvbW1hbmRfbGlzdDsKKwogLyogTGlzdCBvZiBzdWJjb21tYW5k cyBmb3IgImNhdGNoIi4gICovCiBzdGF0aWMgc3RydWN0IGNtZF9saXN0X2Vs ZW1lbnQgKmNhdGNoX2NtZGxpc3Q7CiAKQEAgLTgxMDAsMTQgKzgyMDMsMjAg QEAgVXNhZ2UgaXMgYGlnbm9yZSBOIENPVU5UJy4iKSk7CiAgIGlmICh4ZGJf Y29tbWFuZHMpCiAgICAgYWRkX2NvbV9hbGlhcyAoImJjIiwgImlnbm9yZSIs IGNsYXNzX2JyZWFrcG9pbnQsIDEpOwogCi0gIGFkZF9jb20gKCJjb21tYW5k cyIsIGNsYXNzX2JyZWFrcG9pbnQsIGNvbW1hbmRzX2NvbW1hbmQsIF8oIlwK KyAgYWRkX3ByZWZpeF9jbWQgKCJjb21tYW5kcyIsIGNsYXNzX2JyZWFrcG9p bnQsIGNvbW1hbmRzX2NvbW1hbmQsIF8oIlwKIFNldCBjb21tYW5kcyB0byBi ZSBleGVjdXRlZCB3aGVuIGEgYnJlYWtwb2ludCBpcyBoaXQuXG5cCiBHaXZl IGJyZWFrcG9pbnQgbnVtYmVyIGFzIGFyZ3VtZW50IGFmdGVyIFwiY29tbWFu ZHNcIi5cblwKIFdpdGggbm8gYXJndW1lbnQsIHRoZSB0YXJnZXRlZCBicmVh a3BvaW50IGlzIHRoZSBsYXN0IG9uZSBzZXQuXG5cCiBUaGUgY29tbWFuZHMg dGhlbXNlbHZlcyBmb2xsb3cgc3RhcnRpbmcgb24gdGhlIG5leHQgbGluZS5c blwKIFR5cGUgYSBsaW5lIGNvbnRhaW5pbmcgXCJlbmRcIiB0byBpbmRpY2F0 ZSB0aGUgZW5kIG9mIHRoZW0uXG5cCiBHaXZlIFwic2lsZW50XCIgYXMgdGhl IGZpcnN0IGxpbmUgdG8gbWFrZSB0aGUgYnJlYWtwb2ludCBzaWxlbnQ7XG5c Ci10aGVuIG5vIG91dHB1dCBpcyBwcmludGVkIHdoZW4gaXQgaXMgaGl0LCBl eGNlcHQgd2hhdCB0aGUgY29tbWFuZHMgcHJpbnQuIikpOwordGhlbiBubyBv dXRwdXQgaXMgcHJpbnRlZCB3aGVuIGl0IGlzIGhpdCwgZXhjZXB0IHdoYXQg dGhlIGNvbW1hbmRzIHByaW50LiIpLAorCQkgICAgICAmY29tbWFuZHNfY29t bWFuZF9saXN0LCAiY29tbWFuZHMgIiwgMSwgJmNtZGxpc3QpOworCisgIGFk ZF9wcmVmaXhfY21kICgiZWRpdCIsIGNsYXNzX2JyZWFrcG9pbnQsIGVkaXRf Y29tbWFuZCxfKCJcCitFZGl0IHRoZSBjb21tYW5kIHVzaW5nIHRoZSBleHRl cm5hbC1lZGl0b3IgdmFyaWFibGUsIEVESVRPUiBlbnZpcm9ubWVudFxuXAor dmFyaWFibGUgb3IgL2Jpbi9leCwgaW4gdGhhdCBwcmVjZWRlbmNlLiIpLAor CQkgICAgICAmZWRpdF9jb21tYW5kX2xpc3QsICJjb21tYW5kIGVkaXQgIiwg MSwgJmNvbW1hbmRzX2NvbW1hbmRfbGlzdCk7CiAKICAgYWRkX2NvbSAoImNv bmRpdGlvbiIsIGNsYXNzX2JyZWFrcG9pbnQsIGNvbmRpdGlvbl9jb21tYW5k LCBfKCJcCiBTcGVjaWZ5IGJyZWFrcG9pbnQgbnVtYmVyIE4gdG8gYnJlYWsg b25seSBpZiBDT05EIGlzIHRydWUuXG5cCmRpZmYgLXVwciBPTEQvc3JjL2dk Yi9kZWZzLmggTkVXL3NyYy9nZGIvZGVmcy5oCi0tLSBPTEQvc3JjL2dkYi9k ZWZzLmgJMjAwOS0wMS0xNCAwMzoxMDoyOC4wMDAwMDAwMDAgLTAyMDAKKysr IE5FVy9zcmMvZ2RiL2RlZnMuaAkyMDA5LTAxLTE5IDA4OjU3OjA0LjAwMDAw MDAwMCAtMDIwMApAQCAtMzMwLDYgKzMzMCw4IEBAIGV4dGVybiBpbnQgc3Vi c2V0X2NvbXBhcmUgKGNoYXIgKiwgY2hhciAKIAogZXh0ZXJuIGNoYXIgKnNh ZmVfc3RyZXJyb3IgKGludCk7CiAKK2V4dGVybiBjaGFyICpleHRlcm5hbF9l ZGl0b3IoIHZvaWQgKTsKKwogI2RlZmluZQlBTExfQ0xFQU5VUFMJKChzdHJ1 Y3QgY2xlYW51cCAqKTApCiAKIGV4dGVybiB2b2lkIGRvX2NsZWFudXBzIChz dHJ1Y3QgY2xlYW51cCAqKTsKZGlmZiAtdXByIE9MRC9zcmMvZ2RiL2RvYy9n ZGIudGV4aW5mbyBORVcvc3JjL2dkYi9kb2MvZ2RiLnRleGluZm8KLS0tIE9M RC9zcmMvZ2RiL2RvYy9nZGIudGV4aW5mbwkyMDA5LTAxLTE0IDAzOjEwOjI3 LjAwMDAwMDAwMCAtMDIwMAorKysgTkVXL3NyYy9nZGIvZG9jL2dkYi50ZXhp bmZvCTIwMDktMDEtMTkgMDk6MjY6MzcuMDAwMDAwMDAwIC0wMjAwCkBAIC0z OTc2LDYgKzM5NzYsOCBAQCBmb2xsb3cgaXQgaW1tZWRpYXRlbHkgd2l0aCBA Y29kZXtlbmR9OyB0CiBXaXRoIG5vIEB2YXJ7Ym51bX0gYXJndW1lbnQsIEBj b2Rle2NvbW1hbmRzfSByZWZlcnMgdG8gdGhlIGxhc3QKIGJyZWFrcG9pbnQs IHdhdGNocG9pbnQsIG9yIGNhdGNocG9pbnQgc2V0IChub3QgdG8gdGhlIGJy ZWFrcG9pbnQgbW9zdAogcmVjZW50bHkgZW5jb3VudGVyZWQpLgorQGl0ZW0g Y29tbWFuZHMgZWRpdCBAcntbfUB2YXJ7Ym51bX1AcntdfQorVGhpcyBzcGF3 bnMgYW4gZXh0ZXJuYWwgZWRpdG9yIGZvciBhZGRpbmcgb3IgZWRpdGluZyBj b21tYW5kcy4gIFRoZSBmaW5hbCAgQGNvZGV7ZW5kfSBpcyBub3QgbmVjZXNz YXJ5IGluIHRoaXMgY2FzZS4gIEB4cmVme0Nob29zaW5nIHlvdXIgRWRpdG9y fS4KIEBlbmQgdGFibGUKIAogUHJlc3NpbmcgQGtleXtSRVR9IGFzIGEgbWVh bnMgb2YgcmVwZWF0aW5nIHRoZSBsYXN0IEB2YWx1ZXtHREJOfSBjb21tYW5k IGlzCkBAIC01Mzg0LDYgKzUzODYsNyBAQCBwcmVmZXIgdG8gdXNlIEVtYWNz IGZhY2lsaXRpZXMgdG8gdmlldyBzCiAqIExpc3Q6OiAgICAgICAgICAgICAg ICAgICAgICAgIFByaW50aW5nIHNvdXJjZSBsaW5lcwogKiBTcGVjaWZ5IExv Y2F0aW9uOjogICAgICAgICAgICBIb3cgdG8gc3BlY2lmeSBjb2RlIGxvY2F0 aW9ucwogKiBFZGl0OjogICAgICAgICAgICAgICAgICAgICAgICBFZGl0aW5n IHNvdXJjZSBmaWxlcworKiBDaG9vc2luZyB5b3VyIEVkaXRvcjo6ICAgICAg ICBTcGVjaWZ5aW5nIHlvdXIgdGV4dCBlZGl0b3IKICogU2VhcmNoOjogICAg ICAgICAgICAgICAgICAgICAgU2VhcmNoaW5nIHNvdXJjZSBmaWxlcwogKiBT b3VyY2UgUGF0aDo6ICAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIHNvdXJj ZSBkaXJlY3RvcmllcwogKiBNYWNoaW5lIENvZGU6OiAgICAgICAgICAgICAg ICBTb3VyY2UgYW5kIG1hY2hpbmUgY29kZQpAQCAtNTU4Nyw2ICs1NTkwLDcg QEAgRWRpdCB0aGUgZmlsZSBjb250YWluaW5nIEB2YXJ7ZnVuY3Rpb259IAog CiBAZW5kIHRhYmxlCiAKK0Bub2RlIENob29zaW5nIHlvdXIgRWRpdG9yCiBA c3Vic2VjdGlvbiBDaG9vc2luZyB5b3VyIEVkaXRvcgogWW91IGNhbiBjdXN0 b21pemUgQHZhbHVle0dEQk59IHRvIHVzZSBhbnkgZWRpdG9yIHlvdSB3YW50 CiBAZm9vdG5vdGV7CkBAIC01NjExLDYgKzU2MTUsMTkgQEAgb3IgaW4gdGhl IEBjb2Rle2NzaH0gc2hlbGwsCiBzZXRlbnYgRURJVE9SIC91c3IvYmluL3Zp CiBnZGIgQGRvdHN7fQogQGVuZCBzbWFsbGV4YW1wbGUKK0Fub3RoZXIgb3B0 aW9uIGlzIHRvIHVzZSB0aGUgQGNvZGV7c2V0IGV4dGVybmFsLWVkaXRvcn0g Y29tbWFuZDoKKworQHRhYmxlIEBjb2RlCitAaXRlbSBzZXQgZXh0ZXJuYWwt ZWRpdG9yCitAa2luZGV4IHNldCBleHRlcm5hbC1lZGl0b3IKK1RoaXMgY29t bWFuZCBjb250cm9scyB0aGUgZXh0ZXJuYWwgdGV4dCBlZGl0b3IgdGhhdCBp bnRlcm5hbCBnZGIgY29tbWFuZHMgdXNlLiBUaGUgZXh0ZXJuYWwtZWRpdG9y IHZhcmlhYmxlIGhhcyBwcmVjZWRlbmNlIG92ZXIgdGhlIEBjb2Rle0VESVRP Un0gZW52aXJvbWVudCB2YXJpYWJsZS4KK0BlbmQgdGFibGUKKworQHRhYmxl IEBjb2RlCitAaXRlbSBzaG93IGV4dGVybmFsLWVkaXRvcgorQGtpbmRleCBz aG93IGV4dGVybmFsLWVkaXRvcgorVGhpcyBjb21tYW5kIHNob3dzIHRoZSBl eHRlcm5hbCB0ZXh0IGVkaXRvciB0aGF0IGludGVybmFsIGdkYiBjb21tYW5k cyB1c2UuIAorQGVuZCB0YWJsZQogCiBAbm9kZSBTZWFyY2gKIEBzZWN0aW9u IFNlYXJjaGluZyBTb3VyY2UgRmlsZXMKZGlmZiAtdXByIE9MRC9zcmMvZ2Ri L2RvYy9yZWZjYXJkLnRleCBORVcvc3JjL2dkYi9kb2MvcmVmY2FyZC50ZXgK LS0tIE9MRC9zcmMvZ2RiL2RvYy9yZWZjYXJkLnRleAkyMDA5LTAxLTE0IDAz OjEwOjI3LjAwMDAwMDAwMCAtMDIwMAorKysgTkVXL3NyYy9nZGIvZG9jL3Jl ZmNhcmQudGV4CTIwMDktMDEtMTkgMDg6NTc6MTkuMDAwMDAwMDAwIC0wMjAw CkBAIC0zNTUsMTAgKzM1NSw5IEBAIGRlbGV0ZSB3aGVuIHJlYWNoZWQKIGln bm9yZSB7XGl0IG59IHtcaXQgY291bnR9Jmlnbm9yZSBicmVha3BvaW50IHtc aXQgbn0sIHtcaXQgY291bnR9CiB0aW1lc1xjcgogXGNyCi1jb21tYW5kcyB7 XGl0IG59XHBhcgorY29tbWFuZHMgXG9wdHt7XGl0IGVkaXR9fSB7XGl0IG59 XHBhcgogXHFxdWFkIFxvcHR7XHR0IHNpbGVudH1ccGFyCi1ccXF1YWQge1xp dCBjb21tYW5kLWxpc3R9JmV4ZWN1dGUgR0RCIHtcaXQgY29tbWFuZC1saXN0 fSBldmVyeSB0aW1lIGJyZWFrcG9pbnQge1xpdCBufSBpcyByZWFjaGVkLiBc b3B0e3tcdHQgc2lsZW50fSBzdXBwcmVzc2VzIGRlZmF1bHQKLWRpc3BsYXl9 XGNyCitccXF1YWQge1xpdCBjb21tYW5kLWxpc3R9JmV4ZWN1dGUgR0RCIHtc aXQgY29tbWFuZC1saXN0fSBldmVyeSB0aW1lIGJyZWFrcG9pbnQge1xpdCBu fSBpcyByZWFjaGVkICBcb3B0e3tcdHQgZWRpdH0gdXNpbmcgZXh0ZXJuYWwg ZWRpdG9yfS4gXG9wdHt7XHR0IHNpbGVudH0gc3VwcHJlc3NlcyBkZWZhdWx0 IGRpc3BsYXl9IFxjcgogZW5kJmVuZCBvZiB7XGl0IGNvbW1hbmQtbGlzdH1c Y3IKIFxlbmRzZWMKIApkaWZmIC11cHIgT0xEL3NyYy9nZGIvdXRpbHMuYyBO RVcvc3JjL2dkYi91dGlscy5jCi0tLSBPTEQvc3JjL2dkYi91dGlscy5jCTIw MDktMDEtMTQgMDM6MTA6MjcuMDAwMDAwMDAwIC0wMjAwCisrKyBORVcvc3Jj L2dkYi91dGlscy5jCTIwMDktMDEtMTkgMDk6MjU6MTkuMDAwMDAwMDAwIC0w MjAwCkBAIC05Niw2ICs5NiwxMCBAQCBzdGF0aWMgdm9pZCBwcm9tcHRfZm9y X2NvbnRpbnVlICh2b2lkKTsKIHN0YXRpYyB2b2lkIHNldF9zY3JlZW5fc2l6 ZSAodm9pZCk7CiBzdGF0aWMgdm9pZCBzZXRfd2lkdGggKHZvaWQpOwogCisv KiBFeHRlcm5hbCB0ZXh0IGVkaXRvciAqLworCitzdGF0aWMgY2hhciAqZXh0 ZXJuYWxfZWRpdG9yX2NvbW1hbmQgPSBOVUxMOworCiAvKiBBIGZsYWcgaW5k aWNhdGluZyB3aGV0aGVyIHRvIHRpbWVzdGFtcCBkZWJ1Z2dpbmcgbWVzc2Fn ZXMuICAqLwogCiBzdGF0aWMgaW50IGRlYnVnX3RpbWVzdGFtcCA9IDA7CkBA IC0yNjk0LDYgKzI2OTgsMTIgQEAgV2hlbiBzZXQsIGRlYnVnZ2luZyBtZXNz YWdlcyB3aWxsIGJlIG1hcgogCQkJICAgTlVMTCwKIAkJCSAgIHNob3dfZGVi dWdfdGltZXN0YW1wLAogCQkJICAgJnNldGRlYnVnbGlzdCwgJnNob3dkZWJ1 Z2xpc3QpOworICBhZGRfc2V0c2hvd19maWxlbmFtZV9jbWQgKCJleHRlcm5h bC1lZGl0b3IiLCBub19jbGFzcywgJmV4dGVybmFsX2VkaXRvcl9jb21tYW5k LCBfKCJcCitTZXQgdGhlIGV4dGVybmFsIHRleHQgZWRpdG9yIHRoYXQgZ2Ri IHVzZXMuIiksCisJCQkgICAgXygiXAorU2hvdyB0aGUgZXh0ZXJuYWwgdGV4 dCBlZGl0b3IuIiksIE5VTEwsCisJCQkgICAgTlVMTCwgTlVMTCwKKwkJCSAg ICAmc2V0bGlzdCwgJnNob3dsaXN0KTsKIH0KIAogLyogTWFjaGluZSBzcGVj aWZpYyBmdW5jdGlvbiB0byBoYW5kbGUgU0lHV0lOQ0ggc2lnbmFsLiAqLwpA QCAtMzQ0MywzICszNDUzLDE2IEBAIGdkYl9idWlsZGFyZ3YgKGNvbnN0IGNo YXIgKnMpCiAgICAgbm9tZW0gKDApOwogICByZXR1cm4gYXJndjsKIH0KKwor LyogUmV0dXJucyB0aGUgZXh0ZXJuYWwgZWRpdG9yICovCitjaGFyICoKK2V4 dGVybmFsX2VkaXRvciAodm9pZCkKK3sKKyAgY2hhciAqZWRpdG9yOworICBp ZiAoZXh0ZXJuYWxfZWRpdG9yX2NvbW1hbmQpCisgICAgcmV0dXJuIGV4dGVy bmFsX2VkaXRvcl9jb21tYW5kOworICBpZiAoKGVkaXRvciA9IChjaGFyICop IGdldGVudiAoIkVESVRPUiIpKSA9PSBOVUxMKQorICAgIGVkaXRvciA9ICIv YmluL2V4IjsKKyAgcmV0dXJuIGVkaXRvcjsKKworfQo= --001636283736f8134304634153eb--