cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

helpline.c (1302B)


      1// SPDX-License-Identifier: GPL-2.0
      2#include <stdio.h>
      3#include <stdlib.h>
      4#include <string.h>
      5#include <pthread.h>
      6#include <linux/kernel.h>
      7#include <linux/string.h>
      8
      9#include "../helpline.h"
     10#include "../ui.h"
     11#include "../libslang.h"
     12
     13char ui_helpline__last_msg[1024];
     14bool tui_helpline__set;
     15
     16static void tui_helpline__pop(void)
     17{
     18}
     19
     20static void tui_helpline__push(const char *msg)
     21{
     22	const size_t sz = sizeof(ui_helpline__current);
     23
     24	SLsmg_gotorc(SLtt_Screen_Rows - 1, 0);
     25	SLsmg_set_color(0);
     26	SLsmg_write_nstring((char *)msg, SLtt_Screen_Cols);
     27	SLsmg_refresh();
     28	strlcpy(ui_helpline__current, msg, sz);
     29}
     30
     31static int tui_helpline__show(const char *format, va_list ap)
     32{
     33	int ret;
     34	static int backlog;
     35
     36	pthread_mutex_lock(&ui__lock);
     37	ret = vscnprintf(ui_helpline__last_msg + backlog,
     38			sizeof(ui_helpline__last_msg) - backlog, format, ap);
     39	backlog += ret;
     40
     41	tui_helpline__set = true;
     42
     43	if (ui_helpline__last_msg[backlog - 1] == '\n') {
     44		ui_helpline__puts(ui_helpline__last_msg);
     45		SLsmg_refresh();
     46		backlog = 0;
     47	}
     48	pthread_mutex_unlock(&ui__lock);
     49
     50	return ret;
     51}
     52
     53struct ui_helpline tui_helpline_fns = {
     54	.pop	= tui_helpline__pop,
     55	.push	= tui_helpline__push,
     56	.show	= tui_helpline__show,
     57};
     58
     59void ui_helpline__init(void)
     60{
     61	helpline_fns = &tui_helpline_fns;
     62	ui_helpline__puts(" ");
     63}