summaryrefslogtreecommitdiff
path: root/lib/libcurses/trace_buf.c
blob: 610c66bd4c9b536cd8b31fcdc440b5656d3fab9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*	$OpenBSD: trace_buf.c,v 1.1 1997/12/03 05:21:44 millert Exp $	*/

/******************************************************************************
 * Copyright 1997 by Thomas E. Dickey <dickey@clark.net>                      *
 * All Rights Reserved.                                                       *
 *                                                                            *
 * Permission to use, copy, modify, and distribute this software and its      *
 * documentation for any purpose and without fee is hereby granted, provided  *
 * that the above copyright notice appear in all copies and that both that    *
 * copyright notice and this permission notice appear in supporting           *
 * documentation, and that the name of the above listed copyright holder(s)   *
 * not be used in advertising or publicity pertaining to distribution of the  *
 * software without specific, written prior permission.                       *
 *                                                                            *
 * THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD   *
 * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND  *
 * FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE  *
 * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES          *
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN      *
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR *
 * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.                *
 ******************************************************************************/
/*
 *	trace_buf.c - Tracing/Debugging buffers (attributes)
 */

#include <curses.priv.h>

MODULE_ID("Id: trace_buf.c,v 1.2 1997/10/26 22:09:05 tom Exp $")

char * _nc_trace_buf(int bufnum, size_t want)
{
	static struct {
		char *text;
		size_t size;
	} *list;
	static size_t have;

#if NO_LEAKS
	if (bufnum < 0) {
		if (have) {
			while (have--) {
				free(list[have].text);
			}
			free(list);
		}
		return 0;
	}
#endif

	if ((size_t)(bufnum+1) > have) {
		size_t need = (bufnum + 1) * 2;
		size_t used = sizeof(*list) * need;
		list = (list == 0) ? malloc(used) : realloc(list, used);
		if (list == 0) {
			errno = ENOMEM;
			return(NULL);
		}
		while (need > have)
			list[have++].text = 0;
	}

	if (list[bufnum].text == 0)
	{
		list[bufnum].text = malloc(want);
		list[bufnum].size = want;
	}
	else if (want > list[bufnum].size) {
		list[bufnum].text = realloc(list[bufnum].text, want);
		list[bufnum].size = want;
	}
	if (list[bufnum].text != 0)
		*(list[bufnum].text) = '\0';
	else
		errno = ENOMEM;
	return list[bufnum].text;
}