xref: /linux/tools/perf/ui/helpline.c (revision b746a1a2860f4a918f32d10dc569115d282aaf2f)
1*b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
2aca7a94dSNamhyung Kim #include <stdio.h>
3aca7a94dSNamhyung Kim #include <stdlib.h>
4aca7a94dSNamhyung Kim #include <string.h>
5aca7a94dSNamhyung Kim 
6aca7a94dSNamhyung Kim #include "helpline.h"
7aca7a94dSNamhyung Kim #include "ui.h"
8aca7a94dSNamhyung Kim 
9aca7a94dSNamhyung Kim char ui_helpline__current[512];
10aca7a94dSNamhyung Kim 
nop_helpline__pop(void)11e6e90468SNamhyung Kim static void nop_helpline__pop(void)
12e6e90468SNamhyung Kim {
13e6e90468SNamhyung Kim }
14e6e90468SNamhyung Kim 
nop_helpline__push(const char * msg __maybe_unused)151d037ca1SIrina Tirdea static void nop_helpline__push(const char *msg __maybe_unused)
16e6e90468SNamhyung Kim {
17e6e90468SNamhyung Kim }
18e6e90468SNamhyung Kim 
nop_helpline__show(const char * fmt __maybe_unused,va_list ap __maybe_unused)19b56e5331SNamhyung Kim static int nop_helpline__show(const char *fmt __maybe_unused,
20b56e5331SNamhyung Kim 			       va_list ap __maybe_unused)
21b56e5331SNamhyung Kim {
22b56e5331SNamhyung Kim 	return 0;
23b56e5331SNamhyung Kim }
24b56e5331SNamhyung Kim 
25e6e90468SNamhyung Kim static struct ui_helpline default_helpline_fns = {
26e6e90468SNamhyung Kim 	.pop	= nop_helpline__pop,
27e6e90468SNamhyung Kim 	.push	= nop_helpline__push,
28b56e5331SNamhyung Kim 	.show	= nop_helpline__show,
29e6e90468SNamhyung Kim };
30e6e90468SNamhyung Kim 
31e6e90468SNamhyung Kim struct ui_helpline *helpline_fns = &default_helpline_fns;
32e6e90468SNamhyung Kim 
ui_helpline__pop(void)33e6e90468SNamhyung Kim void ui_helpline__pop(void)
34e6e90468SNamhyung Kim {
35e6e90468SNamhyung Kim 	helpline_fns->pop();
36e6e90468SNamhyung Kim }
37e6e90468SNamhyung Kim 
ui_helpline__push(const char * msg)38aca7a94dSNamhyung Kim void ui_helpline__push(const char *msg)
39aca7a94dSNamhyung Kim {
40e6e90468SNamhyung Kim 	helpline_fns->push(msg);
41aca7a94dSNamhyung Kim }
42aca7a94dSNamhyung Kim 
ui_helpline__vpush(const char * fmt,va_list ap)43aca7a94dSNamhyung Kim void ui_helpline__vpush(const char *fmt, va_list ap)
44aca7a94dSNamhyung Kim {
45aca7a94dSNamhyung Kim 	char *s;
46aca7a94dSNamhyung Kim 
47aca7a94dSNamhyung Kim 	if (vasprintf(&s, fmt, ap) < 0)
48aca7a94dSNamhyung Kim 		vfprintf(stderr, fmt, ap);
49aca7a94dSNamhyung Kim 	else {
50aca7a94dSNamhyung Kim 		ui_helpline__push(s);
51aca7a94dSNamhyung Kim 		free(s);
52aca7a94dSNamhyung Kim 	}
53aca7a94dSNamhyung Kim }
54aca7a94dSNamhyung Kim 
ui_helpline__fpush(const char * fmt,...)55aca7a94dSNamhyung Kim void ui_helpline__fpush(const char *fmt, ...)
56aca7a94dSNamhyung Kim {
57aca7a94dSNamhyung Kim 	va_list ap;
58aca7a94dSNamhyung Kim 
59aca7a94dSNamhyung Kim 	va_start(ap, fmt);
60aca7a94dSNamhyung Kim 	ui_helpline__vpush(fmt, ap);
61aca7a94dSNamhyung Kim 	va_end(ap);
62aca7a94dSNamhyung Kim }
63aca7a94dSNamhyung Kim 
ui_helpline__puts(const char * msg)64aca7a94dSNamhyung Kim void ui_helpline__puts(const char *msg)
65aca7a94dSNamhyung Kim {
66aca7a94dSNamhyung Kim 	ui_helpline__pop();
67aca7a94dSNamhyung Kim 	ui_helpline__push(msg);
68aca7a94dSNamhyung Kim }
69b56e5331SNamhyung Kim 
ui_helpline__vshow(const char * fmt,va_list ap)70b56e5331SNamhyung Kim int ui_helpline__vshow(const char *fmt, va_list ap)
71b56e5331SNamhyung Kim {
72b56e5331SNamhyung Kim 	return helpline_fns->show(fmt, ap);
73b56e5331SNamhyung Kim }
749484b86eSArnaldo Carvalho de Melo 
ui_helpline__printf(const char * fmt,...)759484b86eSArnaldo Carvalho de Melo void ui_helpline__printf(const char *fmt, ...)
769484b86eSArnaldo Carvalho de Melo {
779484b86eSArnaldo Carvalho de Melo 	va_list ap;
789484b86eSArnaldo Carvalho de Melo 
799484b86eSArnaldo Carvalho de Melo 	ui_helpline__pop();
809484b86eSArnaldo Carvalho de Melo 	va_start(ap, fmt);
819484b86eSArnaldo Carvalho de Melo 	ui_helpline__vpush(fmt, ap);
829484b86eSArnaldo Carvalho de Melo 	va_end(ap);
839484b86eSArnaldo Carvalho de Melo }
84