1 \input texinfo @c -*-texinfo-*-
3 @setfilename libiberty.info
4 @settitle @sc{gnu} libiberty
14 @dircategory GNU libraries
16 * Libiberty: (libiberty). Library of utility functions which
17 are missing or broken on some systems.
24 @c The edition date is written in three locations. Search for 'thedate'.
26 This manual describes the GNU @libib library of utility subroutines.
27 This edition accompanies GCC 3, September 2001.
29 Copyright @copyright{} 2001 Free Software Foundation, Inc.
31 Permission is granted to copy, distribute and/or modify this document
32 under the terms of the GNU Free Documentation License, Version 1.2
33 or any later version published by the Free Software Foundation;
34 with no Invariant Sections, with no Front-Cover Texts, and with no
35 Back-Cover Texts. A copy of the license is included in the
36 section entitled ``GNU Free Documentation License''.
39 Permission is granted to process this file through TeX and print the
40 results, provided the printed document carries a copying permission
41 notice identical to this one except for the removal of this paragraph
42 (this paragraph not being relevant to the printed manual).
48 @c The edition date is written in three locations. Search for 'thedate'.
50 @title @sc{gnu} libiberty
51 @subtitle September 2001
53 @author Phil Edwards et al.
57 @vskip 0pt plus 1filll
58 Copyright @copyright{} 2001 Free Software Foundation, Inc.
60 Permission is granted to copy, distribute and/or modify this document
61 under the terms of the GNU Free Documentation License, Version 1.2
62 or any later version published by the Free Software Foundation;
63 with no Invariant Sections, with no Front-Cover Texts, and with no
64 Back-Cover Texts. A copy of the license is included in the
65 section entitled ``GNU Free Documentation License''.
75 The @libib{} library is a collection of subroutines used by various
76 GNU programs. It is available under the Library General Public
77 License; for more information, see @ref{Library Copying}.
79 @c The edition date is written in three locations. Search for 'thedate'.
80 This edition accompanies GCC 3, September 2001.
85 * Using:: How to use libiberty in your code.
87 * Overview:: Overview of available function groups.
89 * Functions:: Available functions, macros, and global variables.
91 * Obstacks:: Object Stacks.
93 * Licenses:: The various licenses under which libiberty sources are
96 * Index:: Index of functions and categories.
101 @cindex using libiberty
102 @cindex libiberty usage
105 @c THIS SECTION IS CRAP AND NEEDS REWRITING BADLY.
107 To date, @libib{} is generally not installed on its own. It has evolved
108 over years but does not have its own version number nor release schedule.
110 Possibly the easiest way to use @libib{} in your projects is to drop the
111 @libib{} code into your project's sources, and to build the library along
112 with your own sources; the library would then be linked in at the end. This
113 prevents any possible version mismatches with other copies of libiberty
114 elsewhere on the system.
116 Passing @option{--enable-install-libiberty} to the @command{configure}
117 script when building @libib{} causes the header files and archive library
118 to be installed when @kbd{make install} is run. This option also takes
119 an (optional) argument to specify the installation location, in the same
120 manner as @option{--prefix}.
122 For your own projects, an approach which offers stability and flexibility
123 is to include @libib{} with your code, but allow the end user to optionally
124 choose to use a previously-installed version instead. In this way the
125 user may choose (for example) to install @libib{} as part of GCC, and use
126 that version for all software built with that compiler. (This approach
127 has proven useful with software using the GNU @code{readline} library.)
129 Making use of @libib{} code usually requires that you include one or more
130 header files from the @libib{} distribution. (They will be named as
131 necessary in the function descriptions.) At link time, you will need to
132 add @option{-liberty} to your link command invocation.
138 Functions contained in @libib{} can be divided into three general categories.
142 * Supplemental Functions:: Providing functions which don't exist
143 on older operating systems.
145 * Replacement Functions:: These functions are sometimes buggy or
146 unpredictable on some operating systems.
148 * Extensions:: Functions which provide useful extensions
149 or safety wrappers around existing code.
152 @node Supplemental Functions
153 @section Supplemental Functions
154 @cindex supplemental functions
155 @cindex functions, supplemental
156 @cindex functions, missing
158 Certain operating systems do not provide functions which have since
159 become standardized, or at least common. For example, the Single
160 Unix Specification Version 2 requires that the @code{basename}
161 function be provided, but an OS which predates that specification
162 might not have this function. This should not prevent well-written
163 code from running on such a system.
165 Similarly, some functions exist only among a particular ``flavor''
166 or ``family'' of operating systems. As an example, the @code{bzero}
167 function is often not present on systems outside the BSD-derived
170 Many such functions are provided in @libib{}. They are quickly
171 listed here with little description, as systems which lack them
172 become less and less common. Each function @var{foo} is implemented
173 in @file{@var{foo}.c} but not declared in any @libib{} header file; more
174 comments and caveats for each function's implementation are often
175 available in the source file. Generally, the function can simply
176 be declared as @code{extern}.
180 @node Replacement Functions
181 @section Replacement Functions
182 @cindex replacement functions
183 @cindex functions, replacement
185 Some functions have extremely limited implementations on different
186 platforms. Other functions are tedious to use correctly; for example,
187 proper use of @code{malloc} calls for the return value to be checked and
188 appropriate action taken if memory has been exhausted. A group of
189 ``replacement functions'' is available in @libib{} to address these issues
190 for some of the most commonly used subroutines.
192 All of these functions are declared in the @file{libiberty.h} header
193 file. Many of the implementations will use preprocessor macros set by
194 GNU Autoconf, if you decide to make use of that program. Some of these
195 functions may call one another.
199 * Memory Allocation:: Testing and handling failed memory
200 requests automatically.
201 * Exit Handlers:: Calling routines on program exit.
202 * Error Reporting:: Mapping errno and signal numbers to
203 more useful string formats.
206 @node Memory Allocation
207 @subsection Memory Allocation
208 @cindex memory allocation
210 The functions beginning with the letter @samp{x} are wrappers around
211 standard functions; the functions provided by the system environment
212 are called and their results checked before the results are passed back
213 to client code. If the standard functions fail, these wrappers will
214 terminate the program. Thus, these versions can be used with impunity.
218 @subsection Exit Handlers
219 @cindex exit handlers
221 The existence and implementation of the @code{atexit} routine varies
222 amongst the flavors of Unix. @libib{} provides an unvarying dependable
223 implementation via @code{xatexit} and @code{xexit}.
226 @node Error Reporting
227 @subsection Error Reporting
228 @cindex error reporting
230 These are a set of routines to facilitate programming with the system
231 @code{errno} interface. The @libib{} source file @file{strerror.c}
232 contains a good deal of documentation for these functions.
240 @cindex functions, extension
242 @libib{} includes additional functionality above and beyond standard
243 functions, which has proven generically useful in GNU programs, such as
244 obstacks and regex. These functions are often copied from other
245 projects as they gain popularity, and are included here to provide a
246 central location from which to use, maintain, and distribute them.
249 * Obstacks:: Stacks of arbitrary objects.
252 @c This is generated from the glibc manual using a make-obstacks-texi.sh
253 @c script of Phil's. Hope it's accurate.
254 @include obstacks.texi
257 @chapter Function, Variable, and Macro Listing.
258 @include functions.texi
265 * Library Copying:: The GNU Library General Public License
266 * BSD:: Regents of the University of California
270 @c This takes care of Library Copying. It is the copying-lib.texi from the
271 @c GNU web site, with its @node line altered to make makeinfo shut up.
272 @include copying-lib.texi
278 Copyright @copyright{} 1990 Regents of the University of California.
281 Redistribution and use in source and binary forms, with or without
282 modification, are permitted provided that the following conditions
288 Redistributions of source code must retain the above copyright
289 notice, this list of conditions and the following disclaimer.
292 Redistributions in binary form must reproduce the above copyright
293 notice, this list of conditions and the following disclaimer in the
294 documentation and/or other materials provided with the distribution.
297 [rescinded 22 July 1999]
300 Neither the name of the University nor the names of its contributors
301 may be used to endorse or promote products derived from this software
302 without specific prior written permission.
306 THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
307 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
308 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
309 ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
310 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
311 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
312 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
313 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
314 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
315 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF