Merge branch 'master' of /opt/gnu-chroot/home/dtbartle/glibc-opensolaris
[kopensolaris-gnu/glibc.git] / NOTES
diff --git a/NOTES b/NOTES
index b5c48b8..9bef242 100644 (file)
--- a/NOTES
+++ b/NOTES
@@ -1,8 +1,8 @@
 Feature Test Macros
 -------------------
 
-   The exact set of features available when you compile a source file
-is controlled by which "feature test macros" you define.
+The exact set of features available when you compile a source file is
+controlled by which "feature test macros" you define.
 
    If you compile your programs using `gcc -ansi', you get only the
 ISO C library features, unless you explicitly request additional
@@ -12,26 +12,60 @@ options.
 
    You should define these macros by using `#define' preprocessor
 directives at the top of your source code files.  These directives
-*must* come before any `#include' of a system header file.  It is best
+_must_ come before any `#include' of a system header file.  It is best
 to make them the very first thing in the file, preceded only by
 comments.  You could also use the `-D' option to GCC, but it's better
 if you make the source files indicate their own meaning in a
 self-contained way.
 
- - Macro: _POSIX_SOURCE
+   This system exists to allow the library to conform to multiple
+standards.  Although the different standards are often described as
+supersets of each other, they are usually incompatible because larger
+standards require functions with names that smaller ones reserve to the
+user program.  This is not mere pedantry -- it has been a problem in
+practice.  For instance, some non-GNU programs define functions named
+`getline' that have nothing to do with this library's `getline'.  They
+would not be compilable if all features were enabled indiscriminately.
+
+   This should not be used to verify that a program conforms to a
+limited standard.  It is insufficient for this purpose, as it will not
+protect you from including header files outside the standard, or
+relying on semantics undefined within the standard.
+
+ -- Macro: _POSIX_SOURCE
      If you define this macro, then the functionality from the POSIX.1
      standard (IEEE Standard 1003.1) is available, as well as all of the
      ISO C facilities.
 
- - Macro: _POSIX_C_SOURCE
-     If you define this macro with a value of `1', then the
-     functionality from the POSIX.1 standard (IEEE Standard 1003.1) is
-     made available.  If you define this macro with a value of `2',
-     then both the functionality from the POSIX.1 standard and the
-     functionality from the POSIX.2 standard (IEEE Standard 1003.2) are
-     made available.  This is in addition to the ISO C facilities.
+     The state of `_POSIX_SOURCE' is irrelevant if you define the macro
+     `_POSIX_C_SOURCE' to a positive integer.
 
- - Macro: _BSD_SOURCE
+ -- Macro: _POSIX_C_SOURCE
+     Define this macro to a positive integer to control which POSIX
+     functionality is made available.  The greater the value of this
+     macro, the more functionality is made available.
+
+     If you define this macro to a value greater than or equal to `1',
+     then the functionality from the 1990 edition of the POSIX.1
+     standard (IEEE Standard 1003.1-1990) is made available.
+
+     If you define this macro to a value greater than or equal to `2',
+     then the functionality from the 1992 edition of the POSIX.2
+     standard (IEEE Standard 1003.2-1992) is made available.
+
+     If you define this macro to a value greater than or equal to
+     `199309L', then the functionality from the 1993 edition of the
+     POSIX.1b standard (IEEE Standard 1003.1b-1993) is made available.
+
+     Greater values for `_POSIX_C_SOURCE' will enable future extensions.
+     The POSIX standards process will define these values as necessary,
+     and the GNU C Library should support them some time after they
+     become standardized.  The 1996 edition of POSIX.1 (ISO/IEC 9945-1:
+     1996) states that if you define `_POSIX_C_SOURCE' to a value
+     greater than or equal to `199506L', then the functionality from
+     the 1996 edition is made available.
+
+ -- Macro: _BSD_SOURCE
      If you define this macro, functionality derived from 4.3 BSD Unix
      is included as well as the ISO C, POSIX.1, and POSIX.2 material.
 
@@ -49,15 +83,15 @@ self-contained way.
      must give the option `-lbsd-compat' to the compiler or linker when
      linking the program, to tell it to find functions in this special
      compatibility library before looking for them in the normal C
-     library.
+     library.  
 
- - Macro: _SVID_SOURCE
+ -- Macro: _SVID_SOURCE
      If you define this macro, functionality derived from SVID is
      included as well as the ISO C, POSIX.1, POSIX.2, and X/Open
      material.
 
- - Macro: _XOPEN_SOURCE
- - Macro: _XOPEN_SOURCE_EXTENDED
+ -- Macro: _XOPEN_SOURCE
+ -- Macro: _XOPEN_SOURCE_EXTENDED
      If you define this macro, functionality described in the X/Open
      Portability Guide is included.  This is a superset of the POSIX.1
      and POSIX.2 functionality and in fact `_POSIX_SOURCE' and
@@ -72,12 +106,12 @@ self-contained way.
 
      If the macro `_XOPEN_SOURCE' has the value 500 this includes all
      functionality described so far plus some new definitions from the
-     Single Unix specification, version 2.
+     Single Unix Specification, version 2.
 
- - Macro: _LARGEFILE_SOURCE
+ -- Macro: _LARGEFILE_SOURCE
      If this macro is defined some extra functions are available which
-     rectify a few shortcomings in all previous standards.  More
-     concreten the functions `fseeko' and `ftello' are available.
+     rectify a few shortcomings in all previous standards.
+     Specifically, the functions `fseeko' and `ftello' are available.
      Without these functions the difference between the ISO C interface
      (`fseek', `ftell') and the low-level POSIX interface (`lseek')
      would lead to problems.
@@ -85,40 +119,40 @@ self-contained way.
      This macro was introduced as part of the Large File Support
      extension (LFS).
 
- - Variable: Macro _LARGEFILE64_SOURCE
-     If you define this macro an additional set of function gets
-     available which enables to use on 32 bit systems to use files of
-     sizes beyond the usual limit of 2GB.  This interface is not
-     available if the system does not support files that large.  On
-     systems where the natural file size limit is greater than 2GB
-     (i.e., on 64 bit systems) the new functions are identical to the
-     replaced functions.
+ -- Macro: _LARGEFILE64_SOURCE
+     If you define this macro an additional set of functions is made
+     available which enables 32 bit systems to use files of sizes beyond
+     the usual limit of 2GB.  This interface is not available if the
+     system does not support files that large.  On systems where the
+     natural file size limit is greater than 2GB (i.e., on 64 bit
+     systems) the new functions are identical to the replaced functions.
 
      The new functionality is made available by a new set of types and
-     functions which replace existing.  The names of these new objects
-     contain `64' to indicate the intention, e.g., `off_t' vs.
+     functions which replace the existing ones.  The names of these new
+     objects contain `64' to indicate the intention, e.g., `off_t' vs.
      `off64_t' and `fseeko' vs. `fseeko64'.
 
      This macro was introduced as part of the Large File Support
-     extension (LFS).  It is a transition interface for the time 64 bit
-     offsets are not generally used (see `_FILE_OFFSET_BITS'.
-
- - Variable: _FILE_OFFSET_BITS
-     This macro lets decide which file system interface shall be used,
-     one replacing the other.  While `_LARGEFILE64_SOURCE' makes the
-     64 bit interface available as an additional interface
-     `_FILE_OFFSET_BITS' allows to use the 64 bit interface to replace
-     the old interface.
-
-     If `_FILE_OFFSET_BITS' is undefined or if it is defined to the
-     value `32' nothing changes.  The 32 bit interface is used and
+     extension (LFS).  It is a transition interface for the period when
+     64 bit offsets are not generally used (see `_FILE_OFFSET_BITS').
+
+ -- Macro: _FILE_OFFSET_BITS
+     This macro determines which file system interface shall be used,
+     one replacing the other.  Whereas `_LARGEFILE64_SOURCE' makes the
+     64 bit interface available as an additional interface,
+     `_FILE_OFFSET_BITS' allows the 64 bit interface to replace the old
+     interface.
+
+     If `_FILE_OFFSET_BITS' is undefined, or if it is defined to the
+     value `32', nothing changes.  The 32 bit interface is used and
      types like `off_t' have a size of 32 bits on 32 bit systems.
 
-     If the macro is defined to the value `64' the large file interface
+     If the macro is defined to the value `64', the large file interface
      replaces the old interface.  I.e., the functions are not made
-     available under different names as `_LARGEFILE64_SOURCE' does.
-     Instead the old function names now reference the new functions,
-     e.g., a call to `fseeko' now indeed calls `fseeko64'.
+     available under different names (as they are with
+     `_LARGEFILE64_SOURCE').  Instead the old function names now
+     reference the new functions, e.g., a call to `fseeko' now indeed
+     calls `fseeko64'.
 
      This macro should only be selected if the system provides
      mechanisms for handling large files.  On 64 bit systems this macro
@@ -128,11 +162,17 @@ self-contained way.
      This macro was introduced as part of the Large File Support
      extension (LFS).
 
- - Macro: _GNU_SOURCE
-     If you define this macro, everything is included: ISO C, POSIX.1,
-     POSIX.2, BSD, SVID, X/Open, LFS, and GNU extensions.  In the cases
-     where POSIX.1 conflicts with BSD, the POSIX definitions take
-     precedence.
+ -- Macro: _ISOC99_SOURCE
+     Until the revised ISO C standard is widely adopted the new features
+     are not automatically enabled.  The GNU libc nevertheless has a
+     complete implementation of the new standard and to enable the new
+     features the macro `_ISOC99_SOURCE' should be defined.
+
+ -- Macro: _GNU_SOURCE
+     If you define this macro, everything is included: ISO C89,
+     ISO C99, POSIX.1, POSIX.2, BSD, SVID, X/Open, LFS, and GNU
+     extensions.  In the cases where POSIX.1 conflicts with BSD, the
+     POSIX definitions take precedence.
 
      If you want to get the full effect of `_GNU_SOURCE' but make the
      BSD definitions take precedence over the POSIX definitions, use
@@ -147,16 +187,15 @@ self-contained way.
      compiler or linker.  *Note:* If you forget to do this, you may get
      very strange errors at run time.
 
- - Macro: _REENTRANT
- - Macro: _THREAD_SAFE
+ -- Macro: _REENTRANT
+ -- Macro: _THREAD_SAFE
      If you define one of these macros, reentrant versions of several
      functions get declared.  Some of the functions are specified in
      POSIX.1c but many others are only available on a few other systems
-     or are unique to GNU libc.  The problem is that the
-     standardization of the thread safe C library interface still is
-     behind.
+     or are unique to GNU libc.  The problem is the delay in the
+     standardization of the thread safe C library interface.
 
-     Unlike on some other systems no special version of the C library
+     Unlike on some other systems, no special version of the C library
      must be used for linking.  There is only one version but while
      compiling this it must have been specified to compile as thread
      safe.