linux/tools/perf/ui/helpline.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2#include <stdio.h>
   3#include <stdlib.h>
   4#include <string.h>
   5
   6#include "helpline.h"
   7#include "ui.h"
   8
   9char ui_helpline__current[512];
  10
  11static void nop_helpline__pop(void)
  12{
  13}
  14
  15static void nop_helpline__push(const char *msg __maybe_unused)
  16{
  17}
  18
  19static int nop_helpline__show(const char *fmt __maybe_unused,
  20                               va_list ap __maybe_unused)
  21{
  22        return 0;
  23}
  24
  25static struct ui_helpline default_helpline_fns = {
  26        .pop    = nop_helpline__pop,
  27        .push   = nop_helpline__push,
  28        .show   = nop_helpline__show,
  29};
  30
  31struct ui_helpline *helpline_fns = &default_helpline_fns;
  32
  33void ui_helpline__pop(void)
  34{
  35        helpline_fns->pop();
  36}
  37
  38void ui_helpline__push(const char *msg)
  39{
  40        helpline_fns->push(msg);
  41}
  42
  43void ui_helpline__vpush(const char *fmt, va_list ap)
  44{
  45        char *s;
  46
  47        if (vasprintf(&s, fmt, ap) < 0)
  48                vfprintf(stderr, fmt, ap);
  49        else {
  50                ui_helpline__push(s);
  51                free(s);
  52        }
  53}
  54
  55void ui_helpline__fpush(const char *fmt, ...)
  56{
  57        va_list ap;
  58
  59        va_start(ap, fmt);
  60        ui_helpline__vpush(fmt, ap);
  61        va_end(ap);
  62}
  63
  64void ui_helpline__puts(const char *msg)
  65{
  66        ui_helpline__pop();
  67        ui_helpline__push(msg);
  68}
  69
  70int ui_helpline__vshow(const char *fmt, va_list ap)
  71{
  72        return helpline_fns->show(fmt, ap);
  73}
  74
  75void ui_helpline__printf(const char *fmt, ...)
  76{
  77        va_list ap;
  78
  79        ui_helpline__pop();
  80        va_start(ap, fmt);
  81        ui_helpline__vpush(fmt, ap);
  82        va_end(ap);
  83}
  84