2012-10-24 Vladimir Makarov <vmakarov@redhat.com>
[official-gcc.git] / libiberty / libiberty.texi
blob74f70d2bd5af1df2e4177f04152d9d6ff806d65e
1 \input texinfo  @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename libiberty.info
4 @settitle @sc{gnu} libiberty
5 @c %**end of header
7 @syncodeindex fn cp
8 @syncodeindex vr cp
9 @syncodeindex pg cp
11 @finalout
12 @c %**end of header
14 @dircategory GNU libraries
15 @direntry
16 * Libiberty: (libiberty).          Library of utility functions which
17                                    are missing or broken on some systems.
18 @end direntry
20 @macro libib
21 @code{libiberty}
22 @end macro
24 @ifinfo
25 This manual describes the GNU @libib library of utility subroutines.
27 Copyright @copyright{} 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
28 2009, 2010 Free Software Foundation, Inc.
30       Permission is granted to copy, distribute and/or modify this document
31       under the terms of the GNU Free Documentation License, Version 1.3
32       or any later version published by the Free Software Foundation;
33       with no Invariant Sections, with no Front-Cover Texts, and with no
34       Back-Cover Texts.  A copy of the license is included in the
35       section entitled ``GNU Free Documentation License''.
37 @ignore
38 Permission is granted to process this file through TeX and print the
39 results, provided the printed document carries a copying permission
40 notice identical to this one except for the removal of this paragraph
41 (this paragraph not being relevant to the printed manual).
43 @end ignore
44 @end ifinfo
47 @titlepage
48 @title @sc{gnu} libiberty
49 @author Phil Edwards et al.
50 @page
53 @vskip 0pt plus 1filll
54 Copyright @copyright{} 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
55 2009, 2010 Free Software Foundation, Inc.
57       Permission is granted to copy, distribute and/or modify this document
58       under the terms of the GNU Free Documentation License, Version 1.3
59       or any later version published by the Free Software Foundation;
60       with no Invariant Sections, with no Front-Cover Texts, and with no
61       Back-Cover Texts.  A copy of the license is included in the
62       section entitled ``GNU Free Documentation License''.
64 @end titlepage
65 @contents
66 @page
68 @ifnottex
69 @node    Top,Using,,
70 @top     Introduction
72 The @libib{} library is a collection of subroutines used by various
73 GNU programs.  It is available under the Library General Public
74 License; for more information, see @ref{Library Copying}.
76 @end ifnottex
78 @menu
79 * Using::              How to use libiberty in your code.
81 * Overview::           Overview of available function groups.
83 * Functions::          Available functions, macros, and global variables.
85 * Obstacks::           Object Stacks.
87 * Licenses::           The various licenses under which libiberty sources are
88                        distributed.
90 * Index::              Index of functions and categories.
91 @end menu
93 @node Using
94 @chapter Using
95 @cindex using libiberty
96 @cindex libiberty usage
97 @cindex how to use
99 @c THIS SECTION IS CRAP AND NEEDS REWRITING BADLY.
101 To date, @libib{} is generally not installed on its own.  It has evolved
102 over years but does not have its own version number nor release schedule.
104 Possibly the easiest way to use @libib{} in your projects is to drop the
105 @libib{} code into your project's sources, and to build the library along
106 with your own sources; the library would then be linked in at the end.  This
107 prevents any possible version mismatches with other copies of libiberty
108 elsewhere on the system.
110 Passing @option{--enable-install-libiberty} to the @command{configure}
111 script when building @libib{} causes the header files and archive library
112 to be installed when @kbd{make install} is run.  This option also takes
113 an (optional) argument to specify the installation location, in the same
114 manner as @option{--prefix}.
116 For your own projects, an approach which offers stability and flexibility
117 is to include @libib{} with your code, but allow the end user to optionally
118 choose to use a previously-installed version instead.  In this way the
119 user may choose (for example) to install @libib{} as part of GCC, and use
120 that version for all software built with that compiler.  (This approach
121 has proven useful with software using the GNU @code{readline} library.)
123 Making use of @libib{} code usually requires that you include one or more
124 header files from the @libib{} distribution.  (They will be named as
125 necessary in the function descriptions.)  At link time, you will need to
126 add @option{-liberty} to your link command invocation.
129 @node Overview
130 @chapter Overview
132 Functions contained in @libib{} can be divided into three general categories.
135 @menu
136 * Supplemental Functions::       Providing functions which don't exist
137                                  on older operating systems.
139 * Replacement Functions::        These functions are sometimes buggy or
140                                  unpredictable on some operating systems.
142 * Extensions::                   Functions which provide useful extensions
143                                  or safety wrappers around existing code.
144 @end menu
146 @node Supplemental Functions
147 @section Supplemental Functions
148 @cindex supplemental functions
149 @cindex functions, supplemental
150 @cindex functions, missing
152 Certain operating systems do not provide functions which have since
153 become standardized, or at least common.  For example, the Single
154 Unix Specification Version 2 requires that the @code{basename}
155 function be provided, but an OS which predates that specification
156 might not have this function.  This should not prevent well-written
157 code from running on such a system.
159 Similarly, some functions exist only among a particular ``flavor''
160 or ``family'' of operating systems.  As an example, the @code{bzero}
161 function is often not present on systems outside the BSD-derived
162 family of systems.
164 Many such functions are provided in @libib{}.  They are quickly
165 listed here with little description, as systems which lack them
166 become less and less common.  Each function @var{foo} is implemented
167 in @file{@var{foo}.c} but not declared in any @libib{} header file; more
168 comments and caveats for each function's implementation are often
169 available in the source file.  Generally, the function can simply
170 be declared as @code{extern}.
174 @node Replacement Functions
175 @section Replacement Functions
176 @cindex replacement functions
177 @cindex functions, replacement
179 Some functions have extremely limited implementations on different
180 platforms.  Other functions are tedious to use correctly; for example,
181 proper use of @code{malloc} calls for the return value to be checked and
182 appropriate action taken if memory has been exhausted.  A group of
183 ``replacement functions'' is available in @libib{} to address these issues
184 for some of the most commonly used subroutines.
186 All of these functions are declared in the @file{libiberty.h} header
187 file.  Many of the implementations will use preprocessor macros set by
188 GNU Autoconf, if you decide to make use of that program.  Some of these
189 functions may call one another.
192 @menu
193 * Memory Allocation::            Testing and handling failed memory
194                                    requests automatically.
195 * Exit Handlers::                Calling routines on program exit.
196 * Error Reporting::              Mapping errno and signal numbers to
197                                    more useful string formats.
198 @end menu
200 @node Memory Allocation
201 @subsection Memory Allocation
202 @cindex memory allocation
204 The functions beginning with the letter @samp{x} are wrappers around
205 standard functions; the functions provided by the system environment
206 are called and their results checked before the results are passed back
207 to client code.  If the standard functions fail, these wrappers will
208 terminate the program.  Thus, these versions can be used with impunity.
211 @node Exit Handlers
212 @subsection Exit Handlers
213 @cindex exit handlers
215 The existence and implementation of the @code{atexit} routine varies
216 amongst the flavors of Unix.  @libib{} provides an unvarying dependable
217 implementation via @code{xatexit} and @code{xexit}.
220 @node Error Reporting
221 @subsection Error Reporting
222 @cindex error reporting
224 These are a set of routines to facilitate programming with the system
225 @code{errno} interface.  The @libib{} source file @file{strerror.c}
226 contains a good deal of documentation for these functions.
228 @c signal stuff
231 @node Extensions
232 @section Extensions
233 @cindex extensions
234 @cindex functions, extension
236 @libib{} includes additional functionality above and beyond standard
237 functions, which has proven generically useful in GNU programs, such as
238 obstacks and regex.  These functions are often copied from other
239 projects as they gain popularity, and are included here to provide a
240 central location from which to use, maintain, and distribute them.
242 @menu
243 * Obstacks::                     Stacks of arbitrary objects.
244 @end menu
246 @c This is generated from the glibc manual using a make-obstacks-texi.sh
247 @c script of Phil's.  Hope it's accurate.
248 @include obstacks.texi
250 @node Functions
251 @chapter Function, Variable, and Macro Listing.
252 @include functions.texi
254 @node Licenses
255 @appendix Licenses
257 @menu
259 * Library Copying::   The GNU Library General Public License
260 * BSD::               Regents of the University of California
262 @end menu
264 @c This takes care of Library Copying.  It is the copying-lib.texi from the
265 @c GNU web site, with its @node line altered to make makeinfo shut up.
266 @include copying-lib.texi
268 @page
269 @node BSD
270 @appendixsec BSD
272 Copyright @copyright{} 1990 Regents of the University of California.
273 All rights reserved.
275 Redistribution and use in source and binary forms, with or without
276 modification, are permitted provided that the following conditions
277 are met:
279 @enumerate
281 @item
282 Redistributions of source code must retain the above copyright
283 notice, this list of conditions and the following disclaimer.
285 @item
286 Redistributions in binary form must reproduce the above copyright
287 notice, this list of conditions and the following disclaimer in the
288 documentation and/or other materials provided with the distribution.
290 @item
291 [rescinded 22 July 1999]
293 @item
294 Neither the name of the University nor the names of its contributors
295 may be used to endorse or promote products derived from this software
296 without specific prior written permission.
298 @end enumerate
300 THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
301 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
302 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
303 ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
304 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
305 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
306 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
307 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
308 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
309 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
310 SUCH DAMAGE.
312 @node Index
313 @unnumbered Index
315 @printindex cp
317 @bye