On Wed, 2011-01-26 at 20:29 +0000, Dave Anderson wrote:
>
> I've pretty much got -p working OK, and next I'll plug in the -KVM
> restrictors.
By the way, thanks for running with this.
>
> > Today I'm trying to find out why parse_line() is messing up when given
> > more than one string in ""'s.
>
> Not sure I understand how you can do that, but don't let me interfere...
The syntax for the search command:
search [-s start | -k | -u] [-e end | -l length] [-m mask] value ...
allows multiple values for simultaneous search. For example:
crash-5.1.1str> search -k 00007ffffd401e28 00007f29a0cbeb9f
ffff88011e889f70: 7ffffd401e28
ffff88011e889fd8: 7f29a0cbeb9f
I thought I'd use a similar syntax for strings (-c for "chars", looking
for a better letter, maybe -S):
crash-5.1.1str> search -k -c "Memory value expected" "No such file or"
The current version of parse_line in tools.c has a problem with repeated
strings, so that it delivers the following in the value[] array:
(gdb) p value[0]
$1 = 0xb74a04 "Memory value expected"
(gdb) p value[1]
$2 = 0xb74a1b "\"No"
(gdb) p value[2]
$3 = 0xb74a1f "such"
(gdb) p value[3]
$4 = 0xb74a24 "file"
(gdb) p value[4]
$5 = 0xb74a29 "or\""
With the attached patch, it delivers:
(gdb) p value[0]
$1 = 0xb77a24 "Memory value expected"
(gdb) p value[1]
$2 = 0xb77a3c "No such file or"
I don't think it messes anything else up...
Bob Montgomery
--- tools.c.orig 2011-01-26 13:30:21.000000000 -0700
+++ tools.c 2011-01-26 13:34:26.000000000 -0700
@@ -171,6 +171,10 @@ parse_line(char *str, char *argv[])
case ' ':
case '\t':
str[i++] = NULLCHAR;
+
+ while (str[i] == ' ' || str[i] == '\t') {
+ i++;
+ }
if (str[i] == '"') {
str[i] = ' ';
@@ -182,9 +186,6 @@ parse_line(char *str, char *argv[])
expression = TRUE;
}
- while (str[i] == ' ' || str[i] == '\t') {
- i++;
- }
if (str[i] != NULLCHAR && str[i] != '\n') {
argv[j++] = &str[i];
--
Crash-utility mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/crash-utility