From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31377 invoked by alias); 21 Feb 2008 09:20:49 -0000 Received: (qmail 31359 invoked by uid 22791); 21 Feb 2008 09:20:47 -0000 X-Spam-Check-By: sourceware.org Received: from wf-out-1314.google.com (HELO wf-out-1314.google.com) (209.85.200.172) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 21 Feb 2008 09:20:29 +0000 Received: by wf-out-1314.google.com with SMTP id 29so982850wff.24 for ; Thu, 21 Feb 2008 01:20:27 -0800 (PST) Received: by 10.142.144.16 with SMTP id r16mr7387468wfd.97.1203585627927; Thu, 21 Feb 2008 01:20:27 -0800 (PST) Received: by 10.143.125.5 with HTTP; Thu, 21 Feb 2008 01:20:27 -0800 (PST) Message-ID: Date: Thu, 21 Feb 2008 17:33:00 -0000 From: "Yakov Lerner" To: gdb-patches@sourceware.org Subject: simlpe patch implements eval command (with printf-like format and args) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_5463_28465654.1203585627820" 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: 2008-02/txt/msg00349.txt.bz2 ------=_Part_5463_28465654.1203585627820 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-length: 8060 This simple patch implements eval command with printf-like syntax: eval "printf-like-format", comma-separated args The patch is against cvs-checkedout source. Suggestions are welcome. Implementation is very simple. I am unsure about naming of new variables and functions. Suggestions are welcome. Especially about "grow_xasprints_append" name. Sorry, can't think of better name at the moment. Long repeating calls to this functions can be shortened by packing 3 first args into if we declare 3-member struct dyna_str_t { char *buf; size_t len; size_t *size; }. Shall I do it ? I am attaching both inline AND as attachment; I am not sure about tabs mangling inline. Yakov Lerner --- defs.h.000 2008-02-21 10:00:40.000000000 +0200 +++ defs.h 2008-02-21 11:47:13.000000000 +0200 @@ -849,6 +849,12 @@ extern void xvasprintf (char **ret, const char *format, va_list ap) ATTR_FORMAT (printf, 2, 0); +/* Grow allocated buffer and appens to it, without causing quadratic slowdown */ +extern int grow_xvasprintf_append (char **to, size_t *filled_len, size_t *allocated_size, const char *format, va_list args) + ATTR_FORMAT (printf, 4, 0); +int grow_xasprintf_append (char **to, size_t *filled_len, size_t *allocated_size, const char *format, ...) + ATTR_FORMAT (printf, 4, 5); + /* Like asprintf and vasprintf, but return the string, throw an error if no memory. */ extern char *xstrprintf (const char *format, ...) ATTR_FORMAT (printf, 1, = 2); @@ -905,6 +911,8 @@ extern void vwarning (const char *, va_list args) ATTR_FORMAT (printf, 1, = 0); +char *gdb_own_xasprintf (char *arg); + /* List of known OS ABIs. If you change this, make sure to update the table in osabi.c. */ enum gdb_osabi --- utils.c.000 2008-02-21 09:47:38.000000000 +0200 +++ utils.c 2008-02-21 11:48:27.000000000 +0200 @@ -991,6 +991,46 @@ } =0C +/* Grow allocated buffer and appens to it, without causing quadratic slowdown */ + +int +grow_xvasprintf_append (char **to, size_t *filled_len, size_t *allocated_size, const char *format, va_list args) +{ + int len_add; + + if (*to =3D=3D NULL || *allocated_size =3D=3D 0) + to =3D xmalloc (*allocated_size =3D 32); + + gdb_assert (*filled_len < *allocated_size); + + len_add =3D vsnprintf (*to + *filled_len, *allocated_size - *filled_len, format, args); + if (len_add >=3D *allocated_size - *filled_len) + { + *allocated_size =3D max (*allocated_size * 2, *filled_len + len_add = + 1); + *to =3D xrealloc (*to, *allocated_size); + + len_add =3D vsnprintf (*to + *filled_len, *allocated_size - *filled_len, format, args); + gdb_assert( len_add < *allocated_size - *filled_len ); + } + *filled_len +=3D len_add; + + return *filled_len; +} + +int +grow_xasprintf_append (char **to, size_t *filled_len, size_t *allocated_size, const char *format, ...) +{ + va_list args; + int ret; + + va_start (args, format); + ret =3D grow_xvasprintf_append (to, filled_len, allocated_size, format, = args); + va_end (args); + + return ret; +} + + /* Like asprintf/vasprintf but get an internal_error if the call fails. */ --- source.c.000 2008-02-21 11:33:17.000000000 +0200 +++ source.c 2008-02-21 11:52:18.000000000 +0200 @@ -1928,6 +1928,17 @@ add_substitute_path_rule (argv[0], argv[1]); } +static void +eval_command (char *arg, int from_tty) +{ + struct cleanup *old_cleanups; + char *str =3D gdb_own_xasprintf (arg); + + old_cleanups =3D make_cleanup (free_current_contents, &str); + execute_command (str, from_tty); + do_cleanups (old_chain); +} + =0C void _initialize_source (void) @@ -2030,4 +2041,10 @@ Print the rule for substituting FROM in source file names. If FROM\n\ is not specified, print all substitution rules."), &showlist); + + add_cmd ("eval", class_support, eval_command, _("\ +eval \"printf-like format string\", arg1, arg2, arg3, ..., argn\n\ +Execute gdb command from a string generated by printf-like format and\n\ +arguments."), + &cmdlist); } --- printcmd.c.000 2008-02-20 14:37:39.000000000 +0200 +++ printcmd.c 2008-02-21 11:48:14.000000000 +0200 @@ -1716,6 +1716,15 @@ static void printf_command (char *arg, int from_tty) { + char *str =3D gdb_own_xasprintf (arg); + + puts_filtered( str ); + xfree (str); +} + +char * +gdb_own_xasprintf(char *arg) +{ char *f =3D NULL; char *s =3D arg; char *string =3D NULL; @@ -1725,10 +1734,16 @@ int nargs =3D 0; int allocated_args =3D 20; struct cleanup *old_cleanups; - + size_t result_alloc =3D 16; + char *result; + size_t result_len =3D 0; + val_args =3D xmalloc (allocated_args * sizeof (struct value *)); old_cleanups =3D make_cleanup (free_current_contents, &val_args); + result =3D xmalloc(result_alloc); + make_cleanup (free_current_contents, &result); + if (s =3D=3D 0) error_no_arg (_("format-control string and values to print")); @@ -2078,20 +2093,23 @@ read_memory (tem, str, j); str[j] =3D 0; - printf_filtered (current_substring, (char *) str); + grow_xasprintf_append (&result, &result_len, &result_alloc, + current_substring, (char *) str ); } break; case double_arg: { double val =3D value_as_double (val_args[i]); - printf_filtered (current_substring, val); + grow_xasprintf_append (&result, &result_len, &result_alloc, + current_substring, val); break; } case long_double_arg: #ifdef HAVE_LONG_DOUBLE { long double val =3D value_as_double (val_args[i]); - printf_filtered (current_substring, val); + grow_xasprintf_append (&result, &result_len, &result_alloc, + current_substring, val); break; } #else @@ -2101,7 +2119,8 @@ #if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG) { long long val =3D value_as_long (val_args[i]); - printf_filtered (current_substring, val); + grow_xasprintf_append (&result, &result_len, &result_alloc, + current_substring, val); break; } #else @@ -2110,13 +2129,15 @@ case int_arg: { int val =3D value_as_long (val_args[i]); - printf_filtered (current_substring, val); + grow_xasprintf_append (&result, &result_len, &result_alloc, + current_substring, val); break; } case long_arg: { long val =3D value_as_long (val_args[i]); - printf_filtered (current_substring, val); + grow_xasprintf_append (&result, &result_len, &result_alloc, + current_substring, val); break; } @@ -2127,7 +2148,8 @@ #if defined (PRINTF_HAS_DECFLOAT) /* If we have native support for Decimal floating printing, handle it here. */ - printf_filtered (current_substring, param_ptr); + grow_xasprintf_append (&result, &result_len, &result_alloc, + current_substring, param_ptr); #else /* As a workaround until vasprintf has native support for DFP @@ -2213,7 +2235,8 @@ decimal_to_string (dfp_ptr, dfp_len, decstr); /* Print the DFP value. */ - printf_filtered (current_substring, decstr); + grow_xasprintf_append (&result, &result_len, &result_alloc, + current_substring, decstr); break; #endif @@ -2267,13 +2290,15 @@ *fmt_p++ =3D 'l'; *fmt_p++ =3D 'x'; *fmt_p++ =3D '\0'; - printf_filtered (fmt, val); + grow_xasprintf_append (&result, &result_len, &result_alloc, + fmt, val); } else { *fmt_p++ =3D 's'; *fmt_p++ =3D '\0'; - printf_filtered (fmt, "(nil)"); + grow_xasprintf_append (&result, &result_len, &result_alloc, + fmt, "(nil)"); } break; @@ -2286,9 +2311,14 @@ current_substring +=3D strlen (current_substring) + 1; } /* Print the portion of the format string after the last argument. */ - puts_filtered (last_arg); + grow_xasprintf_append (&result, &result_len, &result_alloc, + "%s", last_arg); } - do_cleanups (old_cleanups); + + xfree (val_args); + discard_cleanups (old_cleanups); + + return result; } void ------=_Part_5463_28465654.1203585627820 Content-Type: application/octet-stream; name=eval-patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fcx3rpjc0 Content-Disposition: attachment; filename=eval-patch Content-length: 9887 LS0tIGRlZnMuaC4wMDAJMjAwOC0wMi0yMSAxMDowMDo0MC4wMDAwMDAwMDAg KzAyMDAKKysrIGRlZnMuaAkyMDA4LTAyLTIxIDExOjQ3OjEzLjAwMDAwMDAw MCArMDIwMApAQCAtODQ5LDYgKzg0OSwxMiBAQAogZXh0ZXJuIHZvaWQgeHZh c3ByaW50ZiAoY2hhciAqKnJldCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9s aXN0IGFwKQogICAgICBBVFRSX0ZPUk1BVCAocHJpbnRmLCAyLCAwKTsKIAor LyogR3JvdyBhbGxvY2F0ZWQgYnVmZmVyIGFuZCBhcHBlbnMgdG8gaXQsIHdp dGhvdXQgY2F1c2luZyBxdWFkcmF0aWMgc2xvd2Rvd24gKi8KK2V4dGVybiBp bnQgZ3Jvd194dmFzcHJpbnRmX2FwcGVuZCAoY2hhciAqKnRvLCBzaXplX3Qg KmZpbGxlZF9sZW4sIHNpemVfdCAqYWxsb2NhdGVkX3NpemUsIGNvbnN0IGNo YXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgICBBVFRSX0ZPUk1BVCAo cHJpbnRmLCA0LCAwKTsKK2ludCBncm93X3hhc3ByaW50Zl9hcHBlbmQgKGNo YXIgKip0bywgc2l6ZV90ICpmaWxsZWRfbGVuLCBzaXplX3QgKmFsbG9jYXRl ZF9zaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgQVRUUl9G T1JNQVQgKHByaW50ZiwgNCwgNSk7CisKIC8qIExpa2UgYXNwcmludGYgYW5k IHZhc3ByaW50ZiwgYnV0IHJldHVybiB0aGUgc3RyaW5nLCB0aHJvdyBhbiBl cnJvcgogICAgaWYgbm8gbWVtb3J5LiAgKi8KIGV4dGVybiBjaGFyICp4c3Ry cHJpbnRmIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgQVRUUl9GT1JNQVQg KHByaW50ZiwgMSwgMik7CkBAIC05MDUsNiArOTExLDggQEAKIAogZXh0ZXJu IHZvaWQgdndhcm5pbmcgKGNvbnN0IGNoYXIgKiwgdmFfbGlzdCBhcmdzKSBB VFRSX0ZPUk1BVCAocHJpbnRmLCAxLCAwKTsKIAorY2hhciAqZ2RiX293bl94 YXNwcmludGYgKGNoYXIgKmFyZyk7CisKIC8qIExpc3Qgb2Yga25vd24gT1Mg QUJJcy4gIElmIHlvdSBjaGFuZ2UgdGhpcywgbWFrZSBzdXJlIHRvIHVwZGF0 ZSB0aGUKICAgIHRhYmxlIGluIG9zYWJpLmMuICAqLwogZW51bSBnZGJfb3Nh YmkKLS0tIHV0aWxzLmMuMDAwCTIwMDgtMDItMjEgMDk6NDc6MzguMDAwMDAw MDAwICswMjAwCisrKyB1dGlscy5jCTIwMDgtMDItMjEgMTE6NDg6MjcuMDAw MDAwMDAwICswMjAwCkBAIC05OTEsNiArOTkxLDQ2IEBACiB9CiAMCiAKKy8q IEdyb3cgYWxsb2NhdGVkIGJ1ZmZlciBhbmQgYXBwZW5zIHRvIGl0LCB3aXRo b3V0IGNhdXNpbmcgcXVhZHJhdGljIHNsb3dkb3duICovCisKK2ludAorZ3Jv d194dmFzcHJpbnRmX2FwcGVuZCAoY2hhciAqKnRvLCBzaXplX3QgKmZpbGxl ZF9sZW4sIHNpemVfdCAqYWxsb2NhdGVkX3NpemUsIGNvbnN0IGNoYXIgKmZv cm1hdCwgdmFfbGlzdCBhcmdzKQoreworICBpbnQgbGVuX2FkZDsKKworICBp ZiAoKnRvID09IE5VTEwgfHwgKmFsbG9jYXRlZF9zaXplID09IDApCisgICAg dG8gPSB4bWFsbG9jICgqYWxsb2NhdGVkX3NpemUgPSAzMik7CisKKyAgZ2Ri X2Fzc2VydCAoKmZpbGxlZF9sZW4gPCAqYWxsb2NhdGVkX3NpemUpOworCisg IGxlbl9hZGQgPSB2c25wcmludGYgKCp0byArICpmaWxsZWRfbGVuLCAqYWxs b2NhdGVkX3NpemUgLSAqZmlsbGVkX2xlbiwgZm9ybWF0LCBhcmdzKTsKKyAg aWYgKGxlbl9hZGQgPj0gKmFsbG9jYXRlZF9zaXplIC0gKmZpbGxlZF9sZW4p CisgICAgeworICAgICAgKmFsbG9jYXRlZF9zaXplID0gbWF4ICgqYWxsb2Nh dGVkX3NpemUgKiAyLCAqZmlsbGVkX2xlbiArIGxlbl9hZGQgKyAxKTsKKyAg ICAgICp0byA9IHhyZWFsbG9jICgqdG8sICphbGxvY2F0ZWRfc2l6ZSk7CisK KyAgICAgIGxlbl9hZGQgPSB2c25wcmludGYgKCp0byArICpmaWxsZWRfbGVu LCAqYWxsb2NhdGVkX3NpemUgLSAqZmlsbGVkX2xlbiwgZm9ybWF0LCBhcmdz KTsKKyAgICAgIGdkYl9hc3NlcnQoIGxlbl9hZGQgPCAqYWxsb2NhdGVkX3Np emUgLSAqZmlsbGVkX2xlbiApOworICAgIH0KKyAgKmZpbGxlZF9sZW4gKz0g bGVuX2FkZDsgCisKKyAgcmV0dXJuICpmaWxsZWRfbGVuOworfQorCitpbnQK K2dyb3dfeGFzcHJpbnRmX2FwcGVuZCAoY2hhciAqKnRvLCBzaXplX3QgKmZp bGxlZF9sZW4sIHNpemVfdCAqYWxsb2NhdGVkX3NpemUsIGNvbnN0IGNoYXIg KmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIGludCByZXQ7 CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHJldCA9IGdyb3df eHZhc3ByaW50Zl9hcHBlbmQgKHRvLCBmaWxsZWRfbGVuLCBhbGxvY2F0ZWRf c2l6ZSwgZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKworICBy ZXR1cm4gcmV0OworfQorCisKIC8qIExpa2UgYXNwcmludGYvdmFzcHJpbnRm IGJ1dCBnZXQgYW4gaW50ZXJuYWxfZXJyb3IgaWYgdGhlIGNhbGwKICAgIGZh aWxzLiAqLwogCi0tLSBzb3VyY2UuYy4wMDAJMjAwOC0wMi0yMSAxMTozMzox Ny4wMDAwMDAwMDAgKzAyMDAKKysrIHNvdXJjZS5jCTIwMDgtMDItMjEgMTE6 NTI6MTguMDAwMDAwMDAwICswMjAwCkBAIC0xOTI4LDYgKzE5MjgsMTcgQEAK ICAgYWRkX3N1YnN0aXR1dGVfcGF0aF9ydWxlIChhcmd2WzBdLCBhcmd2WzFd KTsKIH0KIAorc3RhdGljIHZvaWQKK2V2YWxfY29tbWFuZCAoY2hhciAqYXJn LCBpbnQgZnJvbV90dHkpCit7CisgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xl YW51cHM7CisgIGNoYXIgKnN0ciA9IGdkYl9vd25feGFzcHJpbnRmIChhcmcp OworCisgIG9sZF9jbGVhbnVwcyA9IG1ha2VfY2xlYW51cCAoZnJlZV9jdXJy ZW50X2NvbnRlbnRzLCAmc3RyKTsKKyAgZXhlY3V0ZV9jb21tYW5kIChzdHIs IGZyb21fdHR5KTsKKyAgZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7Cit9CisK IAwKIHZvaWQKIF9pbml0aWFsaXplX3NvdXJjZSAodm9pZCkKQEAgLTIwMzAs NCArMjA0MSwxMCBAQAogUHJpbnQgdGhlIHJ1bGUgZm9yIHN1YnN0aXR1dGlu ZyBGUk9NIGluIHNvdXJjZSBmaWxlIG5hbWVzLiBJZiBGUk9NXG5cCiBpcyBu b3Qgc3BlY2lmaWVkLCBwcmludCBhbGwgc3Vic3RpdHV0aW9uIHJ1bGVzLiIp LAogICAgICAgICAgICAmc2hvd2xpc3QpOworCisgIGFkZF9jbWQgKCJldmFs IiwgY2xhc3Nfc3VwcG9ydCwgZXZhbF9jb21tYW5kLCBfKCJcCitldmFsIFwi cHJpbnRmLWxpa2UgZm9ybWF0IHN0cmluZ1wiLCBhcmcxLCBhcmcyLCBhcmcz LCAuLi4sIGFyZ25cblwKK0V4ZWN1dGUgZ2RiIGNvbW1hbmQgZnJvbSBhIHN0 cmluZyBnZW5lcmF0ZWQgYnkgcHJpbnRmLWxpa2UgZm9ybWF0IGFuZFxuXAor YXJndW1lbnRzLiIpLAorICAgICAgICAgICAmY21kbGlzdCk7CiB9Ci0tLSBw cmludGNtZC5jLjAwMAkyMDA4LTAyLTIwIDE0OjM3OjM5LjAwMDAwMDAwMCAr MDIwMAorKysgcHJpbnRjbWQuYwkyMDA4LTAyLTIxIDExOjQ4OjE0LjAwMDAw MDAwMCArMDIwMApAQCAtMTcxNiw2ICsxNzE2LDE1IEBACiBzdGF0aWMgdm9p ZAogcHJpbnRmX2NvbW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21fdHR5KQog eworICBjaGFyICpzdHIgPSBnZGJfb3duX3hhc3ByaW50ZiAoYXJnKTsKKwor ICBwdXRzX2ZpbHRlcmVkKCBzdHIgKTsKKyAgeGZyZWUgKHN0cik7Cit9CisK K2NoYXIgKgorZ2RiX293bl94YXNwcmludGYoY2hhciAqYXJnKQorewogICBj aGFyICpmID0gTlVMTDsKICAgY2hhciAqcyA9IGFyZzsKICAgY2hhciAqc3Ry aW5nID0gTlVMTDsKQEAgLTE3MjUsMTAgKzE3MzQsMTYgQEAKICAgaW50IG5h cmdzID0gMDsKICAgaW50IGFsbG9jYXRlZF9hcmdzID0gMjA7CiAgIHN0cnVj dCBjbGVhbnVwICpvbGRfY2xlYW51cHM7Ci0KKyAgc2l6ZV90IHJlc3VsdF9h bGxvYyA9IDE2OworICBjaGFyICpyZXN1bHQ7CisgIHNpemVfdCByZXN1bHRf bGVuID0gMDsKKyAgCiAgIHZhbF9hcmdzID0geG1hbGxvYyAoYWxsb2NhdGVk X2FyZ3MgKiBzaXplb2YgKHN0cnVjdCB2YWx1ZSAqKSk7CiAgIG9sZF9jbGVh bnVwcyA9IG1ha2VfY2xlYW51cCAoZnJlZV9jdXJyZW50X2NvbnRlbnRzLCAm dmFsX2FyZ3MpOwogCisgIHJlc3VsdCA9IHhtYWxsb2MocmVzdWx0X2FsbG9j KTsKKyAgbWFrZV9jbGVhbnVwIChmcmVlX2N1cnJlbnRfY29udGVudHMsICZy ZXN1bHQpOworCiAgIGlmIChzID09IDApCiAgICAgZXJyb3Jfbm9fYXJnIChf KCJmb3JtYXQtY29udHJvbCBzdHJpbmcgYW5kIHZhbHVlcyB0byBwcmludCIp KTsKIApAQCAtMjA3OCwyMCArMjA5MywyMyBAQAogCQlyZWFkX21lbW9yeSAo dGVtLCBzdHIsIGopOwogCSAgICAgIHN0cltqXSA9IDA7CiAKLQkgICAgICBw cmludGZfZmlsdGVyZWQgKGN1cnJlbnRfc3Vic3RyaW5nLCAoY2hhciAqKSBz dHIpOworCSAgICAgIGdyb3dfeGFzcHJpbnRmX2FwcGVuZCAoJnJlc3VsdCwg JnJlc3VsdF9sZW4sICZyZXN1bHRfYWxsb2MsCisJCWN1cnJlbnRfc3Vic3Ry aW5nLCAoY2hhciAqKSBzdHIgKTsKIAkgICAgfQogCSAgICBicmVhazsKIAkg IGNhc2UgZG91YmxlX2FyZzoKIAkgICAgewogCSAgICAgIGRvdWJsZSB2YWwg PSB2YWx1ZV9hc19kb3VibGUgKHZhbF9hcmdzW2ldKTsKLQkgICAgICBwcmlu dGZfZmlsdGVyZWQgKGN1cnJlbnRfc3Vic3RyaW5nLCB2YWwpOworCSAgICAg IGdyb3dfeGFzcHJpbnRmX2FwcGVuZCAoJnJlc3VsdCwgJnJlc3VsdF9sZW4s ICZyZXN1bHRfYWxsb2MsCisJCWN1cnJlbnRfc3Vic3RyaW5nLCB2YWwpOwog CSAgICAgIGJyZWFrOwogCSAgICB9CiAJICBjYXNlIGxvbmdfZG91YmxlX2Fy ZzoKICNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCiAJICAgIHsKIAkgICAgICBs b25nIGRvdWJsZSB2YWwgPSB2YWx1ZV9hc19kb3VibGUgKHZhbF9hcmdzW2ld KTsKLQkgICAgICBwcmludGZfZmlsdGVyZWQgKGN1cnJlbnRfc3Vic3RyaW5n LCB2YWwpOworCSAgICAgICBncm93X3hhc3ByaW50Zl9hcHBlbmQgKCZyZXN1 bHQsICZyZXN1bHRfbGVuLCAmcmVzdWx0X2FsbG9jLAorCQkgICBjdXJyZW50 X3N1YnN0cmluZywgdmFsKTsKIAkgICAgICBicmVhazsKIAkgICAgfQogI2Vs c2UKQEAgLTIxMDEsNyArMjExOSw4IEBACiAjaWYgZGVmaW5lZCAoQ0NfSEFT X0xPTkdfTE9ORykgJiYgZGVmaW5lZCAoUFJJTlRGX0hBU19MT05HX0xPTkcp CiAJICAgIHsKIAkgICAgICBsb25nIGxvbmcgdmFsID0gdmFsdWVfYXNfbG9u ZyAodmFsX2FyZ3NbaV0pOwotCSAgICAgIHByaW50Zl9maWx0ZXJlZCAoY3Vy cmVudF9zdWJzdHJpbmcsIHZhbCk7CisJICAgICAgZ3Jvd194YXNwcmludGZf YXBwZW5kICgmcmVzdWx0LCAmcmVzdWx0X2xlbiwgJnJlc3VsdF9hbGxvYywK KwkJY3VycmVudF9zdWJzdHJpbmcsIHZhbCk7CiAJICAgICAgYnJlYWs7CiAJ ICAgIH0KICNlbHNlCkBAIC0yMTEwLDEzICsyMTI5LDE1IEBACiAJICBjYXNl IGludF9hcmc6CiAJICAgIHsKIAkgICAgICBpbnQgdmFsID0gdmFsdWVfYXNf bG9uZyAodmFsX2FyZ3NbaV0pOwotCSAgICAgIHByaW50Zl9maWx0ZXJlZCAo Y3VycmVudF9zdWJzdHJpbmcsIHZhbCk7CisJICAgICAgZ3Jvd194YXNwcmlu dGZfYXBwZW5kICgmcmVzdWx0LCAmcmVzdWx0X2xlbiwgJnJlc3VsdF9hbGxv YywKKwkJY3VycmVudF9zdWJzdHJpbmcsIHZhbCk7CiAJICAgICAgYnJlYWs7 CiAJICAgIH0KIAkgIGNhc2UgbG9uZ19hcmc6CiAJICAgIHsKIAkgICAgICBs b25nIHZhbCA9IHZhbHVlX2FzX2xvbmcgKHZhbF9hcmdzW2ldKTsKLQkgICAg ICBwcmludGZfZmlsdGVyZWQgKGN1cnJlbnRfc3Vic3RyaW5nLCB2YWwpOwor CSAgICAgIGdyb3dfeGFzcHJpbnRmX2FwcGVuZCAoJnJlc3VsdCwgJnJlc3Vs dF9sZW4sICZyZXN1bHRfYWxsb2MsCisJCWN1cnJlbnRfc3Vic3RyaW5nLCB2 YWwpOwogCSAgICAgIGJyZWFrOwogCSAgICB9CiAKQEAgLTIxMjcsNyArMjE0 OCw4IEBACiAjaWYgZGVmaW5lZCAoUFJJTlRGX0hBU19ERUNGTE9BVCkKIAkg ICAgICAvKiBJZiB3ZSBoYXZlIG5hdGl2ZSBzdXBwb3J0IGZvciBEZWNpbWFs IGZsb2F0aW5nCiAJCSBwcmludGluZywgaGFuZGxlIGl0IGhlcmUuICAqLwot CSAgICAgIHByaW50Zl9maWx0ZXJlZCAoY3VycmVudF9zdWJzdHJpbmcsIHBh cmFtX3B0cik7CisJICAgICAgZ3Jvd194YXNwcmludGZfYXBwZW5kICgmcmVz dWx0LCAmcmVzdWx0X2xlbiwgJnJlc3VsdF9hbGxvYywKKwkJY3VycmVudF9z dWJzdHJpbmcsIHBhcmFtX3B0cik7CiAjZWxzZQogCiAJICAgICAgLyogQXMg YSB3b3JrYXJvdW5kIHVudGlsIHZhc3ByaW50ZiBoYXMgbmF0aXZlIHN1cHBv cnQgZm9yIERGUApAQCAtMjIxMyw3ICsyMjM1LDggQEAKIAkgICAgICBkZWNp bWFsX3RvX3N0cmluZyAoZGZwX3B0ciwgZGZwX2xlbiwgZGVjc3RyKTsKIAog CSAgICAgIC8qIFByaW50IHRoZSBERlAgdmFsdWUuICAqLwotCSAgICAgIHBy aW50Zl9maWx0ZXJlZCAoY3VycmVudF9zdWJzdHJpbmcsIGRlY3N0cik7CisJ ICAgICAgZ3Jvd194YXNwcmludGZfYXBwZW5kICgmcmVzdWx0LCAmcmVzdWx0 X2xlbiwgJnJlc3VsdF9hbGxvYywKKwkJY3VycmVudF9zdWJzdHJpbmcsIGRl Y3N0cik7CiAKIAkgICAgICBicmVhazsKICNlbmRpZgpAQCAtMjI2NywxMyAr MjI5MCwxNSBAQAogCQkgICpmbXRfcCsrID0gJ2wnOwogCQkgICpmbXRfcCsr ID0gJ3gnOwogCQkgICpmbXRfcCsrID0gJ1wwJzsKLQkJICBwcmludGZfZmls dGVyZWQgKGZtdCwgdmFsKTsKKwkJICBncm93X3hhc3ByaW50Zl9hcHBlbmQg KCZyZXN1bHQsICZyZXN1bHRfbGVuLCAmcmVzdWx0X2FsbG9jLAorCQkgICAg Zm10LCB2YWwpOwogCQl9CiAJICAgICAgZWxzZQogCQl7CiAJCSAgKmZtdF9w KysgPSAncyc7CiAJCSAgKmZtdF9wKysgPSAnXDAnOwotCQkgIHByaW50Zl9m aWx0ZXJlZCAoZm10LCAiKG5pbCkiKTsKKwkJICBncm93X3hhc3ByaW50Zl9h cHBlbmQgKCZyZXN1bHQsICZyZXN1bHRfbGVuLCAmcmVzdWx0X2FsbG9jLAor CQkgICAgZm10LCAiKG5pbCkiKTsKIAkJfQogCiAJICAgICAgYnJlYWs7CkBA IC0yMjg2LDkgKzIzMTEsMTQgQEAKIAljdXJyZW50X3N1YnN0cmluZyArPSBz dHJsZW4gKGN1cnJlbnRfc3Vic3RyaW5nKSArIDE7CiAgICAgICB9CiAgICAg LyogUHJpbnQgdGhlIHBvcnRpb24gb2YgdGhlIGZvcm1hdCBzdHJpbmcgYWZ0 ZXIgdGhlIGxhc3QgYXJndW1lbnQuICAqLwotICAgIHB1dHNfZmlsdGVyZWQg KGxhc3RfYXJnKTsKKyAgICBncm93X3hhc3ByaW50Zl9hcHBlbmQgKCZyZXN1 bHQsICZyZXN1bHRfbGVuLCAmcmVzdWx0X2FsbG9jLAorICAgICAgIiVzIiwg bGFzdF9hcmcpOwogICB9Ci0gIGRvX2NsZWFudXBzIChvbGRfY2xlYW51cHMp OworCisgIHhmcmVlICh2YWxfYXJncyk7CisgIGRpc2NhcmRfY2xlYW51cHMg KG9sZF9jbGVhbnVwcyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9p ZAo= ------=_Part_5463_28465654.1203585627820--