Change to arena `realloc' interface, to fix a design bug.
[mLib] / man / mLib.3
CommitLineData
05fbeb03 1.\" -*-nroff-*-
2.TH mLib 3 "7 July 1999" mLib
3.SH NAME
4mLib \- library of miscellaneous utilities
5.\" @mLib
6.SH DESCRIPTION
7The
8.B mLib
484eed5d 9library is a mixed bag of things which the author finds useful in large
05fbeb03 10numbers of programs. As a result, its structure is somewhat arbitrary,
11and it's accreted extra bits over time rather than actually being
12designed as a whole. In the author's opinion this isn't too much of a
13hardship.
14.PP
15At the most granular level,
16.B mLib
17is split into `modules', each of which has its own header file and
18manual page. Sometimes there are identifiable `chunks' of several
19modules which fit together as a whole. Modules and chunks fit into
20`layers', each depending on the ones below it. The header file for
21module
22.I foo
23would be put in
24.BR <mLib/ \c
25.IR foo \c
484eed5d 26.BR .h> .
05fbeb03 27.PP
28This description is a bit abstract, and
29.BR mLib ,
30as a result of its history, doesn't fit it as well as I might like.
31Even so, it's not too bad a model really.
32.PP
33The rest of this section describes the various chunks and layers.
34.SS "Exception handling"
35Right at the bottom, there's a fairly primitive exception handling
36system. It's provided by the
484eed5d 37.BR exc (3)
05fbeb03 38module, and stands alone. It's used mainly by the memory allocation
39modules to raise exceptions when there's no more memory to be had.
40.SS "Memory allocation"
41The
484eed5d 42.BR alloc (3)
05fbeb03 43module provides simple veneers onto traditional memory allocation
44functions like
45.BR malloc (3)
46and
47.BR strdup (3)
48(although
49.B mLib
50doesn't actually depend on
51.B strdup
52being defined in the library) which raise exceptions when there's not
53enough memory left.
54.PP
55The
484eed5d 56.BR sub (3)
05fbeb03 57module handles efficient allocation of small blocks. It allocates
58memory in relatively big chunks and divides the chunks up into small
59blocks before returning them. It keeps lists of differently-sized
60blocks so allocation and freeing is fast. The downside is that your
61code must know how big a block is when it's being freed.
62.PP
63The
64.B track
65module (not yet documented) is a simple memory allocation tracker. It
66can be handy when trying to fix memory leaks.
67.SS "String handling"
68The
484eed5d 69.BR str (3)
05fbeb03 70module provides some trivial string-manipulation functions which tend to
71be useful quite often.
72.PP
73The
484eed5d 74.BR dstr (3)
05fbeb03 75module implements a dynamic string data type. It works quite quickly
76and well, and is handy in security-sensitive programs, to prevent
77buffer-overflows. Dynamic strings are used occasionally through the
78rest of the library, mainly as output arguments.
79.PP
80The
484eed5d 81.BR dspool (3)
05fbeb03 82module implements a `pool' of dynamic strings which saves lots of
83allocation and deallocation when a piece of code has high string
84turnover.
85.SS "Program identification and error reporting"
86The
484eed5d 87.BR quis (3)
05fbeb03 88module remembers the name of the program and supplies it when asked.
89It's used in error messages and similar things.
90.PP
91The
484eed5d 92.BR report (3)
05fbeb03 93module emits standard Unixy error messages. It provides functions
94.B moan
95and
96.B die
97which the author uses rather a lot.
98.PP
99The
53e76188 100.BR trace (3)
101module provides an interface for emitting tracing information with
102configurable verbosity levels. It needs improving to be able to cope
103with outputting to the system log.
05fbeb03 104.SS "Other data types"
105The
7eb5aec5 106.BR hash (3)
107module provides the basics for an extending hashtable implementation.
108Many different hashtable-based data structures can be constructed with
109little effort.
110.PP
111The
484eed5d 112.BR sym (3)
7eb5aec5 113module implements a rather good general-purpose extending hash table.
114Keys and values can be arbitrary data. It is implemented using
115.BR hash (3).
05fbeb03 116.PP
117The
53e76188 118.BR darray (3)
119module implements dynamically resizing arrays which support Perl-like
120stack operations efficiently.
05fbeb03 121.SS "Miscellaneous utilities"
122The
484eed5d 123.BR crc32 (3)
05fbeb03 124module calculates CRC values for strings. It's used by the symbol table
125manager as a hash function.
126.PP
127The
484eed5d 128.BR lock (3)
05fbeb03 129module does POSIX
130.BR fcntl (2)-style
131locking with a timeout.
132.PP
133The
484eed5d 134.BR env (3)
3fecac47 135module manipulates environment variables stored in a hashtable, and
136converts between the hashtable and the standard array representation of
137a process environment.
138.PP
139The
484eed5d 140.BR fdflags (3)
3fecac47 141module manipulates file descriptor flags in a fairly painless way.
142.PP
143The
484eed5d 144.BR lbuf (3)
05fbeb03 145module implements a `line buffer', which is an object that emits
146completed lines of text from an incoming asynchronous data stream. It's
147remarkably handy in programs that want to read lines from pipes and
148sockets can't block while waiting for a line-end to arrive.
149.PP
150The
484eed5d 151.BR tv (3)
05fbeb03 152module provides some macros and functions for playing with
484eed5d 153.BR "struct timeval" .
05fbeb03 154.PP
155The
484eed5d 156.BR bits (3)
05fbeb03 157module defines some types and macros for playing with words as chunks of
158bits. There are portable rotate and shift macros (harder than you'd
159think), and macros to do loading and storing in known-endian formats.
160values.
161.PP
162The
484eed5d 163.BR mdwopt (3)
05fbeb03 164module implements a fairly serious options parser compatible with the
165GNU options parser.
166.PP
167The
484eed5d 168.BR testrig (3)
05fbeb03 169module provides a generic structure for reading test vectors from files
170and running them through functions. I mainly use it for testing
171cryptographic transformations of various kinds.
172.SS "Encoding and decoding"
173The
484eed5d 174.BR base64 (3)
05fbeb03 175module does base64 encoding and decoding, as defined in RFC2045. Base64
176encodes arbitrary binary data in a reliable way which is resistant to
177character-set transformations and other mail transport bogosity.
178.PP
179The
484eed5d 180.BR url (3)
05fbeb03 181module does urlencoding and decoding, as defined in RFC1866.
182Urlencoding encodes arbitrary (but mostly text-like) name/value pairs as
183a text string containing no whitespace.
184.SS "Multiplexed I/O"
185The
484eed5d 186.BR sel (3)
05fbeb03 187module provides a basis for doing nonblocking I/O in Unix systems. It
188provides types and functions for receiving events when files are ready
189for reading or writing, and when timers expire.
190.PP
191The
484eed5d 192.BR conn (3)
05fbeb03 193module implements nonblocking network connections in a way which fits in
194with the
195.B sel
196system. It makes nonblocking connects pretty much trivial.
197.PP
198The
484eed5d 199.BR selbuf (3)
05fbeb03 200module attaches to the
201.B sel
202system and sends an event when lines of text arrive on a file. It's
203useful when reading text from a network connection.
484eed5d 204.PP
205The
206.BR sig (3)
207module introduces signal handling into the multiplexed I/O world.
208Signals are queued until dispatched through the normal
209.B sel
210mechanism.
83856dde 211.PP
212The
213.BR ident (3)
214module provides a nonblocking ident (RFC931) client.
215.PP
216The
217.BR bres (3)
218module does background hostname and address resolution.
05fbeb03 219.SH "SEE ALSO"
220.BR alloc (3),
221.BR base64 (3),
222.BR bits (3),
83856dde 223.BR bres (3),
05fbeb03 224.BR conn (3),
225.BR crc32 (3),
53e76188 226.BR darray (3),
05fbeb03 227.BR dspool (3),
228.BR dstr (3),
3fecac47 229.BR env (3),
05fbeb03 230.BR exc (3),
3fecac47 231.BR fdflags (3),
7eb5aec5 232.BR hash (3),
83856dde 233.BR ident (3),
05fbeb03 234.BR lbuf (3),
235.BR lock (3),
236.BR mdwopt (3),
237.BR quis (3),
238.BR report (3),
239.BR sel (3),
240.BR selbuf (3),
484eed5d 241.BR sig (3),
05fbeb03 242.BR str (3),
243.BR sub (3),
244.BR sym (3),
53e76188 245.BR trace (3),
05fbeb03 246.BR tv (3),
247.BR url (3).
248.SH AUTHOR
249Mark Wooding, <mdw@nsict.org>