void-packages/srcpkgs/bmon/patches/out_curses.patch
Đoàn Trần Công Danh c6ce65d3d0 srcpkgs/b*: convert patches to -Np1
```sh

git grep -l '^patch_args=-Np0' "srcpkgs/$1*/template" |
while read template; do
	for p in ${template%/template}/patches/*; do
		sed -i '
			\,^[+-][+-][+-] /dev/null,b
			/^[*-]\+ [0-9]\+\(,[0-9]\+\)\? [*-]\+$/b
			s,^[*][*][*] ,&a/,
			/^--- /{
				s,\(^--- \)\(./\)*,\1a/,
				s,[.-][Oo][Rr][Ii][Gg]\([	/]\),\1,
				s/[.-][Oo][Rr][Ii][Gg]$//
				s/[.]patched[.]\([^.]\)/.\1/
				h
			}
			/^+++ -/{
				g
				s/^--- a/+++ b/
				b
			}
			s,\(^+++ \)\(./\)*,\1b/,
		' "$p"
	done
	sed -i '/^patch_args=/d' $template
done
```
2021-06-20 13:17:29 +07:00

52 lines
1.4 KiB
Diff

From 341375179514bfd96f2d6001df15a4079631491b Mon Sep 17 00:00:00 2001
From: Nachiketa Prachanda <nchkta@gmail.com>
Date: Tue, 31 Jan 2017 12:08:48 -0800
Subject: [PATCH] out_curses: use xcalloc instead of a fixed buffer
In put_line(), replace the fixed onstack buffer with a xcalloc-ed buffer.
This fixes a bmon crash with terminal size larger than 2048 bytes. The crash
be reproduced with
$ stty cols 2100
$ bmon ....
Signed-off-by: Nachiketa Prachanda <nchkta@gmail.com>
---
src/out_curses.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git src/out_curses.c src/out_curses.c
index 6d70ae3..e5317de 100644
--- a/src/out_curses.c
+++ b/src/out_curses.c
@@ -147,22 +147,24 @@ static char *float2str(double value, int width, int prec, char *buf, size_t len)
static void put_line(const char *fmt, ...)
{
va_list args;
- char buf[2048];
+ char *buf;
+ int len;
int x, y __unused__;
- memset(buf, 0, sizeof(buf));
getyx(stdscr, y, x);
+ len = cols - x;
+ buf = xcalloc(len+1, 1);
+
va_start(args, fmt);
- vsnprintf(buf, sizeof(buf), fmt, args);
+ vsnprintf(buf, len+1, fmt, args);
va_end(args);
- if (strlen(buf) > cols-x)
- buf[cols - x] = '\0';
- else
- memset(&buf[strlen(buf)], ' ', cols - strlen(buf)-x);
+ if (strlen(buf) < len)
+ memset(&buf[strlen(buf)], ' ', len - strlen(buf));
addstr(buf);
+ xfree(buf);
}
static void center_text(const char *fmt, ...)