hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/tools/perf/ui/browser.c
....@@ -1,8 +1,6 @@
11 // SPDX-License-Identifier: GPL-2.0
2
-#include "../util.h"
3
-#include "../string2.h"
4
-#include "../config.h"
5
-#include "../../perf.h"
2
+#include "../util/string2.h"
3
+#include "../util/config.h"
64 #include "libslang.h"
75 #include "ui.h"
86 #include "util.h"
....@@ -15,8 +13,9 @@
1513 #include "browser.h"
1614 #include "helpline.h"
1715 #include "keysyms.h"
18
-#include "../color.h"
19
-#include "sane_ctype.h"
16
+#include "../util/color.h"
17
+#include <linux/ctype.h>
18
+#include <linux/zalloc.h>
2019
2120 static int ui_browser__percent_color(struct ui_browser *browser,
2221 double percent, bool current)
....@@ -346,6 +345,8 @@
346345 SLsmg_fill_region(browser->y + row + browser->extra_title_lines, browser->x,
347346 browser->rows - row, width, ' ');
348347
348
+ if (browser->nr_entries == 0 && browser->no_samples_msg)
349
+ __ui__info_window(NULL, browser->no_samples_msg, NULL);
349350 return 0;
350351 }
351352
....@@ -594,7 +595,7 @@
594595 break;
595596
596597 *bg = '\0';
597
- bg = ltrim(++bg);
598
+ bg = skip_spaces(bg + 1);
598599 ui_browser__colorsets[i].bg = bg;
599600 ui_browser__colorsets[i].fg = fg;
600601 return 0;
....@@ -611,14 +612,16 @@
611612 browser->top = browser->entries;
612613 break;
613614 case SEEK_CUR:
614
- browser->top = browser->top + browser->top_idx + offset;
615
+ browser->top = (char **)browser->top + offset;
615616 break;
616617 case SEEK_END:
617
- browser->top = browser->top + browser->nr_entries - 1 + offset;
618
+ browser->top = (char **)browser->entries + browser->nr_entries - 1 + offset;
618619 break;
619620 default:
620621 return;
621622 }
623
+ assert((char **)browser->top < (char **)browser->entries + browser->nr_entries);
624
+ assert((char **)browser->top >= (char **)browser->entries);
622625 }
623626
624627 unsigned int ui_browser__argv_refresh(struct ui_browser *browser)
....@@ -630,7 +633,9 @@
630633 browser->top = browser->entries;
631634
632635 pos = (char **)browser->top;
633
- while (idx < browser->nr_entries) {
636
+ while (idx < browser->nr_entries &&
637
+ row < (unsigned)SLtt_Screen_Rows - 1) {
638
+ assert(pos < (char **)browser->entries + browser->nr_entries);
634639 if (!browser->filter || !browser->filter(browser, *pos)) {
635640 ui_browser__gotorc(browser, row, 0);
636641 browser->write(browser, pos, row);