* simlpe patch implements eval command (with printf-like format and args)
@ 2008-02-21 17:33 Yakov Lerner
2008-02-21 22:37 ` Michael Snyder
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Yakov Lerner @ 2008-02-21 17:33 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 8248 bytes --]
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 @@
}
\f
+/* 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 == NULL || *allocated_size == 0)
+ to = xmalloc (*allocated_size = 32);
+
+ gdb_assert (*filled_len < *allocated_size);
+
+ len_add = vsnprintf (*to + *filled_len, *allocated_size -
*filled_len, format, args);
+ if (len_add >= *allocated_size - *filled_len)
+ {
+ *allocated_size = max (*allocated_size * 2, *filled_len + len_add + 1);
+ *to = xrealloc (*to, *allocated_size);
+
+ len_add = vsnprintf (*to + *filled_len, *allocated_size -
*filled_len, format, args);
+ gdb_assert( len_add < *allocated_size - *filled_len );
+ }
+ *filled_len += 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 = 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 = gdb_own_xasprintf (arg);
+
+ old_cleanups = make_cleanup (free_current_contents, &str);
+ execute_command (str, from_tty);
+ do_cleanups (old_chain);
+}
+
\f
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 = gdb_own_xasprintf (arg);
+
+ puts_filtered( str );
+ xfree (str);
+}
+
+char *
+gdb_own_xasprintf(char *arg)
+{
char *f = NULL;
char *s = arg;
char *string = NULL;
@@ -1725,10 +1734,16 @@
int nargs = 0;
int allocated_args = 20;
struct cleanup *old_cleanups;
-
+ size_t result_alloc = 16;
+ char *result;
+ size_t result_len = 0;
+
val_args = xmalloc (allocated_args * sizeof (struct value *));
old_cleanups = make_cleanup (free_current_contents, &val_args);
+ result = xmalloc(result_alloc);
+ make_cleanup (free_current_contents, &result);
+
if (s == 0)
error_no_arg (_("format-control string and values to print"));
@@ -2078,20 +2093,23 @@
read_memory (tem, str, j);
str[j] = 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 = 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 = 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 = 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 = 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 = 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++ = 'l';
*fmt_p++ = 'x';
*fmt_p++ = '\0';
- printf_filtered (fmt, val);
+ grow_xasprintf_append (&result, &result_len, &result_alloc,
+ fmt, val);
}
else
{
*fmt_p++ = 's';
*fmt_p++ = '\0';
- printf_filtered (fmt, "(nil)");
+ grow_xasprintf_append (&result, &result_len, &result_alloc,
+ fmt, "(nil)");
}
break;
@@ -2286,9 +2311,14 @@
current_substring += 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
[-- Attachment #2: eval-patch --]
[-- Type: application/octet-stream, Size: 7292 bytes --]
--- 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 @@
}
\f
+/* 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 == NULL || *allocated_size == 0)
+ to = xmalloc (*allocated_size = 32);
+
+ gdb_assert (*filled_len < *allocated_size);
+
+ len_add = vsnprintf (*to + *filled_len, *allocated_size - *filled_len, format, args);
+ if (len_add >= *allocated_size - *filled_len)
+ {
+ *allocated_size = max (*allocated_size * 2, *filled_len + len_add + 1);
+ *to = xrealloc (*to, *allocated_size);
+
+ len_add = vsnprintf (*to + *filled_len, *allocated_size - *filled_len, format, args);
+ gdb_assert( len_add < *allocated_size - *filled_len );
+ }
+ *filled_len += 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 = 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 = gdb_own_xasprintf (arg);
+
+ old_cleanups = make_cleanup (free_current_contents, &str);
+ execute_command (str, from_tty);
+ do_cleanups (old_chain);
+}
+
\f
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 = gdb_own_xasprintf (arg);
+
+ puts_filtered( str );
+ xfree (str);
+}
+
+char *
+gdb_own_xasprintf(char *arg)
+{
char *f = NULL;
char *s = arg;
char *string = NULL;
@@ -1725,10 +1734,16 @@
int nargs = 0;
int allocated_args = 20;
struct cleanup *old_cleanups;
-
+ size_t result_alloc = 16;
+ char *result;
+ size_t result_len = 0;
+
val_args = xmalloc (allocated_args * sizeof (struct value *));
old_cleanups = make_cleanup (free_current_contents, &val_args);
+ result = xmalloc(result_alloc);
+ make_cleanup (free_current_contents, &result);
+
if (s == 0)
error_no_arg (_("format-control string and values to print"));
@@ -2078,20 +2093,23 @@
read_memory (tem, str, j);
str[j] = 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 = 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 = 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 = 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 = 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 = 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++ = 'l';
*fmt_p++ = 'x';
*fmt_p++ = '\0';
- printf_filtered (fmt, val);
+ grow_xasprintf_append (&result, &result_len, &result_alloc,
+ fmt, val);
}
else
{
*fmt_p++ = 's';
*fmt_p++ = '\0';
- printf_filtered (fmt, "(nil)");
+ grow_xasprintf_append (&result, &result_len, &result_alloc,
+ fmt, "(nil)");
}
break;
@@ -2286,9 +2311,14 @@
current_substring += 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
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: simlpe patch implements eval command (with printf-like format and args)
2008-02-21 17:33 simlpe patch implements eval command (with printf-like format and args) Yakov Lerner
@ 2008-02-21 22:37 ` Michael Snyder
2008-02-21 22:50 ` Yakov Lerner
2008-02-22 9:59 ` Daniel Jacobowitz
2008-02-22 17:12 ` Eli Zaretskii
2 siblings, 1 reply; 8+ messages in thread
From: Michael Snyder @ 2008-02-21 22:37 UTC (permalink / raw)
To: Yakov Lerner; +Cc: gdb-patches
On Thu, 2008-02-21 at 11:20 +0200, Yakov Lerner wrote:
> 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.
Not bad at all, for a first contribution. But I suggest
you try to limit the scope a little bit and make it still
simpler -- maybe have it accept only strings, floats and ints
to start -- and see if you can't implement it less intrusively
eg. without taking over the function for another command and
introducing new cross-module infrastructure. Then we can
maybe iteratively improve on it.
I'll give you some style and structure feedback on this one:
>
> +/* Grow allocated buffer and appens to it, without causing quadratic
> slowdown */
"append", of course -- and comments must be punctuated (in this case,
period followed by two spaces". Plus indentation -- consult the GNU
coding standard.
> +/* Grow allocated buffer and appens to it, without causing quadratic
> slowdown */
As above.
> +static void
> +eval_command (char *arg, int from_tty)
> +{
> + struct cleanup *old_cleanups;
> + char *str = gdb_own_xasprintf (arg);
> +
> + old_cleanups = make_cleanup (free_current_contents, &str);
> + execute_command (str, from_tty);
> + do_cleanups (old_chain);
> +}
old_chain is undefined. Probably should be "old_cleanups"?
Actually, except for the comment tails, you've done a commendable
job of following the coding standard. I'd like to see an implementation
that's limited enough not to require the "append" function.
Thanks,
Michael
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: simlpe patch implements eval command (with printf-like format and args)
2008-02-21 22:37 ` Michael Snyder
@ 2008-02-21 22:50 ` Yakov Lerner
2008-02-21 22:56 ` Michael Snyder
0 siblings, 1 reply; 8+ messages in thread
From: Yakov Lerner @ 2008-02-21 22:50 UTC (permalink / raw)
To: Michael Snyder, gdb-patches
On Fri, Feb 22, 2008 at 12:11 AM, Michael Snyder <msnyder@specifix.com> wrote:
>
> On Thu, 2008-02-21 at 11:20 +0200, Yakov Lerner wrote:
> > 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.
>
> Not bad at all, for a first contribution. But I suggest
> you try to limit the scope a little bit and make it still
> simpler -- maybe have it accept only strings, floats and ints
> to start -- and see if you can't implement it less intrusively
You mean here, to replicate (with cuts) the code of existing
printf_command(), and leave existing printf_command()
unchanged, correct ?
> eg. without taking over the function for another command and
> introducing new cross-module infrastructure. Then we can
> maybe iteratively improve on it.
>
> I'll give you some style and structure feedback on this one:
> >
> > +/* Grow allocated buffer and appens to it, without causing quadratic
> > slowdown */
>
> "append", of course -- and comments must be punctuated (in this case,
> period followed by two spaces". Plus indentation -- consult the GNU
> coding standard.
ok
> > +/* Grow allocated buffer and appens to it, without causing quadratic
> > slowdown */
>
> as above.
ok
> > +static void
> > +eval_command (char *arg, int from_tty)
> > +{
> > + struct cleanup *old_cleanups;
> > + char *str = gdb_own_xasprintf (arg);
> > +
> > + old_cleanups = make_cleanup (free_current_contents, &str);
> > + execute_command (str, from_tty);
> > + do_cleanups (old_chain);
> > +}
>
> old_chain is undefined. Probably should be "old_cleanups"?
ok
Thanks
Yakov
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: simlpe patch implements eval command (with printf-like format and args)
2008-02-21 22:50 ` Yakov Lerner
@ 2008-02-21 22:56 ` Michael Snyder
0 siblings, 0 replies; 8+ messages in thread
From: Michael Snyder @ 2008-02-21 22:56 UTC (permalink / raw)
To: Yakov Lerner; +Cc: gdb-patches
On Fri, 2008-02-22 at 00:37 +0200, Yakov Lerner wrote:
> On Fri, Feb 22, 2008 at 12:11 AM, Michael Snyder <msnyder@specifix.com> wrote:
> >
> > On Thu, 2008-02-21 at 11:20 +0200, Yakov Lerner wrote:
> > > 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.
> >
> > Not bad at all, for a first contribution. But I suggest
> > you try to limit the scope a little bit and make it still
> > simpler -- maybe have it accept only strings, floats and ints
> > to start -- and see if you can't implement it less intrusively
>
> You mean here, to replicate (with cuts) the code of existing
> printf_command(), and leave existing printf_command()
> unchanged, correct ?
That is in fact what I meant, but now I'm having second thoughts.
It's just that you're modifying print_command quite a lot.
If you factored out the grow/append functionality, could you
do it with more minimal changes to printf_command (or to, say,
printf_command_core()?)
Aside, is there any reason to put the new command in source.c?
Why not keep the code close together by putting it in printcmd.c?
Doesn't seem like it's directly related to source files...
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: simlpe patch implements eval command (with printf-like format and args)
2008-02-21 17:33 simlpe patch implements eval command (with printf-like format and args) Yakov Lerner
2008-02-21 22:37 ` Michael Snyder
@ 2008-02-22 9:59 ` Daniel Jacobowitz
2008-02-22 11:17 ` Yakov Lerner
2008-02-22 17:12 ` Eli Zaretskii
2 siblings, 1 reply; 8+ messages in thread
From: Daniel Jacobowitz @ 2008-02-22 9:59 UTC (permalink / raw)
To: Yakov Lerner; +Cc: gdb-patches
On Thu, Feb 21, 2008 at 11:20:27AM +0200, Yakov Lerner wrote:
> This simple patch implements eval command with printf-like syntax:
Hi Yakov,
Do you have a copyright assignment on file? If not, do you think you
will be able to file one? I can send you the form.
--
Daniel Jacobowitz
CodeSourcery
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: simlpe patch implements eval command (with printf-like format and args)
2008-02-22 9:59 ` Daniel Jacobowitz
@ 2008-02-22 11:17 ` Yakov Lerner
0 siblings, 0 replies; 8+ messages in thread
From: Yakov Lerner @ 2008-02-22 11:17 UTC (permalink / raw)
To: Yakov Lerner, gdb-patches
On Fri, Feb 22, 2008 at 12:55 AM, Daniel Jacobowitz <drow@false.org> wrote:
>
> On Thu, Feb 21, 2008 at 11:20:27AM +0200, Yakov Lerner wrote:
> > This simple patch implements eval command with printf-like syntax:
>
> Hi Yakov,
>
> Do you have a copyright assignment on file?
No
> If not, do you think you will be able to file one?
I've never seen such a form. Send it in, I'll read it.
Yakov
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: simlpe patch implements eval command (with printf-like format and args)
2008-02-21 17:33 simlpe patch implements eval command (with printf-like format and args) Yakov Lerner
2008-02-21 22:37 ` Michael Snyder
2008-02-22 9:59 ` Daniel Jacobowitz
@ 2008-02-22 17:12 ` Eli Zaretskii
2008-02-24 15:39 ` Yakov Lerner
2 siblings, 1 reply; 8+ messages in thread
From: Eli Zaretskii @ 2008-02-22 17:12 UTC (permalink / raw)
To: Yakov Lerner; +Cc: gdb-patches
> Date: Thu, 21 Feb 2008 11:20:27 +0200
> From: "Yakov Lerner" <iler.ml@gmail.com>
>
> This simple patch implements eval command with printf-like syntax:
>
> eval "printf-like-format", comma-separated args
Thanks.
This new command will need documentation patch for the GDB manual
(gdb/doc/gdb.texinfo) and an entry for gdb/NEWS announcing its
addition. (You can wait till the code is approved, if you don't want
to risk the chance that the code will not be accepted for some
reason.)
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: simlpe patch implements eval command (with printf-like format and args)
2008-02-22 17:12 ` Eli Zaretskii
@ 2008-02-24 15:39 ` Yakov Lerner
0 siblings, 0 replies; 8+ messages in thread
From: Yakov Lerner @ 2008-02-24 15:39 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: gdb-patches
On Fri, Feb 22, 2008 at 6:37 PM, Eli Zaretskii <eliz@gnu.org> wrote:
> > Date: Thu, 21 Feb 2008 11:20:27 +0200
> > From: "Yakov Lerner" <iler.ml@gmail.com>
>
> >
> > This simple patch implements eval command with printf-like syntax:
> >
> > eval "printf-like-format", comma-separated args
>
> Thanks.
>
> This new command will need documentation patch for the GDB manual
> (gdb/doc/gdb.texinfo) and an entry for gdb/NEWS announcing its
> addition. (You can wait till the code is approved, if you don't want
> to risk the chance that the code will not be accepted for some
> reason.)
>
Ok, I will wait until the code is approved.
Yakov
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2008-02-24 14:58 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-02-21 17:33 simlpe patch implements eval command (with printf-like format and args) Yakov Lerner
2008-02-21 22:37 ` Michael Snyder
2008-02-21 22:50 ` Yakov Lerner
2008-02-21 22:56 ` Michael Snyder
2008-02-22 9:59 ` Daniel Jacobowitz
2008-02-22 11:17 ` Yakov Lerner
2008-02-22 17:12 ` Eli Zaretskii
2008-02-24 15:39 ` Yakov Lerner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox