123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- \input texinfo @c -*-texinfo-*-
- @c %**start of header
- @setfilename libiberty.info
- @settitle @sc{gnu} libiberty
- @c %**end of header
- @syncodeindex fn cp
- @syncodeindex vr cp
- @syncodeindex pg cp
- @finalout
- @c %**end of header
- @dircategory GNU libraries
- @direntry
- * Libiberty: (libiberty). Library of utility functions which
- are missing or broken on some systems.
- @end direntry
- @macro libib
- @code{libiberty}
- @end macro
- @ifinfo
- This manual describes the GNU @libib library of utility subroutines.
- Copyright @copyright{} 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
- 2009, 2010 Free Software Foundation, Inc.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, with no Front-Cover Texts, and with no
- Back-Cover Texts. A copy of the license is included in the
- section entitled ``GNU Free Documentation License''.
- @ignore
- Permission is granted to process this file through TeX and print the
- results, provided the printed document carries a copying permission
- notice identical to this one except for the removal of this paragraph
- (this paragraph not being relevant to the printed manual).
- @end ignore
- @end ifinfo
- @titlepage
- @title @sc{gnu} libiberty
- @author Phil Edwards et al.
- @page
- @vskip 0pt plus 1filll
- Copyright @copyright{} 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
- 2009, 2010 Free Software Foundation, Inc.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, with no Front-Cover Texts, and with no
- Back-Cover Texts. A copy of the license is included in the
- section entitled ``GNU Free Documentation License''.
- @end titlepage
- @contents
- @page
- @ifnottex
- @node Top,Using,,
- @top Introduction
- The @libib{} library is a collection of subroutines used by various
- GNU programs. It is available under the Library General Public
- License; for more information, see @ref{Library Copying}.
- @end ifnottex
- @menu
- * Using:: How to use libiberty in your code.
- * Overview:: Overview of available function groups.
- * Functions:: Available functions, macros, and global variables.
- * Licenses:: The various licenses under which libiberty sources are
- distributed.
- * Index:: Index of functions and categories.
- @end menu
- @node Using
- @chapter Using
- @cindex using libiberty
- @cindex libiberty usage
- @cindex how to use
- @c THIS SECTION IS CRAP AND NEEDS REWRITING BADLY.
- To date, @libib{} is generally not installed on its own. It has evolved
- over years but does not have its own version number nor release schedule.
- Possibly the easiest way to use @libib{} in your projects is to drop the
- @libib{} code into your project's sources, and to build the library along
- with your own sources; the library would then be linked in at the end. This
- prevents any possible version mismatches with other copies of libiberty
- elsewhere on the system.
- Passing @option{--enable-install-libiberty} to the @command{configure}
- script when building @libib{} causes the header files and archive library
- to be installed when @kbd{make install} is run. This option also takes
- an (optional) argument to specify the installation location, in the same
- manner as @option{--prefix}.
- For your own projects, an approach which offers stability and flexibility
- is to include @libib{} with your code, but allow the end user to optionally
- choose to use a previously-installed version instead. In this way the
- user may choose (for example) to install @libib{} as part of GCC, and use
- that version for all software built with that compiler. (This approach
- has proven useful with software using the GNU @code{readline} library.)
- Making use of @libib{} code usually requires that you include one or more
- header files from the @libib{} distribution. (They will be named as
- necessary in the function descriptions.) At link time, you will need to
- add @option{-liberty} to your link command invocation.
- @node Overview
- @chapter Overview
- Functions contained in @libib{} can be divided into three general categories.
- @menu
- * Supplemental Functions:: Providing functions which don't exist
- on older operating systems.
- * Replacement Functions:: These functions are sometimes buggy or
- unpredictable on some operating systems.
- * Extensions:: Functions which provide useful extensions
- or safety wrappers around existing code.
- @end menu
- @node Supplemental Functions
- @section Supplemental Functions
- @cindex supplemental functions
- @cindex functions, supplemental
- @cindex functions, missing
- Certain operating systems do not provide functions which have since
- become standardized, or at least common. For example, the Single
- Unix Specification Version 2 requires that the @code{basename}
- function be provided, but an OS which predates that specification
- might not have this function. This should not prevent well-written
- code from running on such a system.
- Similarly, some functions exist only among a particular ``flavor''
- or ``family'' of operating systems. As an example, the @code{bzero}
- function is often not present on systems outside the BSD-derived
- family of systems.
- Many such functions are provided in @libib{}. They are quickly
- listed here with little description, as systems which lack them
- become less and less common. Each function @var{foo} is implemented
- in @file{@var{foo}.c} but not declared in any @libib{} header file; more
- comments and caveats for each function's implementation are often
- available in the source file. Generally, the function can simply
- be declared as @code{extern}.
- @node Replacement Functions
- @section Replacement Functions
- @cindex replacement functions
- @cindex functions, replacement
- Some functions have extremely limited implementations on different
- platforms. Other functions are tedious to use correctly; for example,
- proper use of @code{malloc} calls for the return value to be checked and
- appropriate action taken if memory has been exhausted. A group of
- ``replacement functions'' is available in @libib{} to address these issues
- for some of the most commonly used subroutines.
- All of these functions are declared in the @file{libiberty.h} header
- file. Many of the implementations will use preprocessor macros set by
- GNU Autoconf, if you decide to make use of that program. Some of these
- functions may call one another.
- @menu
- * Memory Allocation:: Testing and handling failed memory
- requests automatically.
- * Exit Handlers:: Calling routines on program exit.
- * Error Reporting:: Mapping errno and signal numbers to
- more useful string formats.
- @end menu
- @node Memory Allocation
- @subsection Memory Allocation
- @cindex memory allocation
- The functions beginning with the letter @samp{x} are wrappers around
- standard functions; the functions provided by the system environment
- are called and their results checked before the results are passed back
- to client code. If the standard functions fail, these wrappers will
- terminate the program. Thus, these versions can be used with impunity.
- @node Exit Handlers
- @subsection Exit Handlers
- @cindex exit handlers
- The existence and implementation of the @code{atexit} routine varies
- amongst the flavors of Unix. @libib{} provides an unvarying dependable
- implementation via @code{xatexit} and @code{xexit}.
- @node Error Reporting
- @subsection Error Reporting
- @cindex error reporting
- These are a set of routines to facilitate programming with the system
- @code{errno} interface. The @libib{} source file @file{strerror.c}
- contains a good deal of documentation for these functions.
- @c signal stuff
- @node Extensions
- @section Extensions
- @cindex extensions
- @cindex functions, extension
- @libib{} includes additional functionality above and beyond standard
- functions, which has proven generically useful in GNU programs, such as
- obstacks and regex. These functions are often copied from other
- projects as they gain popularity, and are included here to provide a
- central location from which to use, maintain, and distribute them.
- @menu
- * Obstacks:: Stacks of arbitrary objects.
- @end menu
- @c This is generated from the glibc manual using contrib/make-obstacks-texi.pl
- @include obstacks.texi
- @node Functions
- @chapter Function, Variable, and Macro Listing.
- @include functions.texi
- @node Licenses
- @appendix Licenses
- @menu
- * Library Copying:: The GNU Library General Public License
- * BSD:: Regents of the University of California
- @end menu
- @c This takes care of Library Copying. It is the copying-lib.texi from the
- @c GNU web site, with its @node line altered to make makeinfo shut up.
- @include copying-lib.texi
- @page
- @node BSD
- @appendixsec BSD
- Copyright @copyright{} 1990 Regents of the University of California.
- All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- @enumerate
- @item
- Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- @item
- Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- @item
- [rescinded 22 July 1999]
- @item
- Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
- @end enumerate
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- @node Index
- @unnumbered Index
- @printindex cp
- @bye
|