Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_fixcpp/sys/src/cmd/htmlroff/util.c – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include "a.h"
2
 
3
void*
4
emalloc(uint n)
5
{
6
	void *v;
7
 
8
	v = mallocz(n, 1);
9
	if(v == nil)
10
		sysfatal("out of memory");
11
	return v;
12
}
13
 
14
char*
15
estrdup(char *s)
16
{
17
	char *t;
18
 
19
	t = strdup(s);
20
	if(t == nil)
21
		sysfatal("out of memory");
22
	return t;
23
}
24
 
25
Rune*
26
erunestrdup(Rune *s)
27
{
28
	Rune *t;
29
 
30
	t = emalloc(sizeof(Rune)*(runestrlen(s)+1));
31
	if(t == nil)
32
		sysfatal("out of memory");
33
	runestrcpy(t, s);
34
	return t;
35
}
36
 
37
void*
38
erealloc(void *ov, uint n)
39
{
40
	void *v;
41
 
42
	v = realloc(ov, n);
43
	if(v == nil)
44
		sysfatal("out of memory");
45
	return v;
46
}
47
 
48
Rune*
49
erunesmprint(char *fmt, ...)
50
{
51
	Rune *s;
52
	va_list arg;
53
 
54
	va_start(arg, fmt);
55
	s = runevsmprint(fmt, arg);
56
	va_end(arg);
57
	if(s == nil)
58
		sysfatal("out of memory");
59
	return s;
60
}
61
 
62
char*
63
esmprint(char *fmt, ...)
64
{
65
	char *s;
66
	va_list arg;
67
 
68
	va_start(arg, fmt);
69
	s = vsmprint(fmt, arg);
70
	va_end(arg);
71
	if(s == nil)
72
		sysfatal("out of memory");
73
	return s;
74
}
75
 
76
void
77
warn(char *fmt, ...)
78
{
79
	va_list arg;
80
 
81
	fprint(2, "htmlroff: %L: ");
82
	va_start(arg, fmt);
83
	vfprint(2, fmt, arg);
84
	va_end(arg);
85
	fprint(2, "\n");
86
}
87
 
88
/*
89
 * For non-Unicode compilers, so we can say
90
 * L("asdf") and get a Rune string.  Assumes strings
91
 * are identified by their pointers, so no mutable strings!
92
 */
93
typedef struct Lhash Lhash;
94
struct Lhash
95
{
96
	char *s;
97
	Lhash *next;
98
	Rune r[1];
99
};
100
static Lhash *hash[1127];
101
 
102
Rune*
103
L(char *s)
104
{
105
	Rune *p;
106
	Lhash *l;
107
	uint h;
108
 
109
	h = (uintptr)s%nelem(hash);
110
	for(l=hash[h]; l; l=l->next)
111
		if(l->s == s)
112
			return l->r;
113
	l = emalloc(sizeof *l+(utflen(s)+1)*sizeof(Rune));
114
	p = l->r;
115
	l->s = s;
116
	while(*s)
117
		s += chartorune(p++, s);
118
	*p = 0;
119
	l->next = hash[h];
120
	hash[h] = l;
121
	return l->r;
122
}
123