|
@@ -680,6 +680,12 @@ int vkdb_printf(enum kdb_msgsrc src, const char *fmt, va_list ap)
|
|
|
size_avail = sizeof(kdb_buffer) - len;
|
|
|
goto kdb_print_out;
|
|
|
}
|
|
|
+ if (kdb_grepping_flag >= KDB_GREPPING_FLAG_SEARCH)
|
|
|
+ /*
|
|
|
+ * This was a interactive search (using '/' at more
|
|
|
+ * prompt) and it has completed. Clear the flag.
|
|
|
+ */
|
|
|
+ kdb_grepping_flag = 0;
|
|
|
/*
|
|
|
* at this point the string is a full line and
|
|
|
* should be printed, up to the null.
|
|
@@ -798,11 +804,23 @@ kdb_printit:
|
|
|
kdb_nextline = linecount - 1;
|
|
|
kdb_printf("\r");
|
|
|
suspend_grep = 1; /* for this recursion */
|
|
|
+ } else if (buf1[0] == '/' && !kdb_grepping_flag) {
|
|
|
+ kdb_printf("\r");
|
|
|
+ kdb_getstr(kdb_grep_string, KDB_GREP_STRLEN,
|
|
|
+ kdbgetenv("SEARCHPROMPT") ?: "search> ");
|
|
|
+ *strchrnul(kdb_grep_string, '\n') = '\0';
|
|
|
+ kdb_grepping_flag += KDB_GREPPING_FLAG_SEARCH;
|
|
|
+ suspend_grep = 1; /* for this recursion */
|
|
|
} else if (buf1[0] && buf1[0] != '\n') {
|
|
|
/* user hit something other than enter */
|
|
|
suspend_grep = 1; /* for this recursion */
|
|
|
- kdb_printf("\nOnly 'q' or 'Q' are processed at more "
|
|
|
- "prompt, input ignored\n");
|
|
|
+ if (buf1[0] != '/')
|
|
|
+ kdb_printf(
|
|
|
+ "\nOnly 'q', 'Q' or '/' are processed at "
|
|
|
+ "more prompt, input ignored\n");
|
|
|
+ else
|
|
|
+ kdb_printf("\n'/' cannot be used during | "
|
|
|
+ "grep filtering, input ignored\n");
|
|
|
} else if (kdb_grepping_flag) {
|
|
|
/* user hit enter */
|
|
|
suspend_grep = 1; /* for this recursion */
|