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