Propagating gettext into gnulib a bit better.
[gnulib.git] / README
diff --git a/README b/README
index 1cd8bc2..ea528bd 100644 (file)
--- a/README
+++ b/README
@@ -63,15 +63,13 @@ Other things:
   systems that have the function.
 * Autoconf functions can use gl_* prefix. The AC_* prefix is for
   autoconf internal functions.
   systems that have the function.
 * Autoconf functions can use gl_* prefix. The AC_* prefix is for
   autoconf internal functions.
-* Try to prevent that the files are built if they aren't needed on a
-  platform.  Valid excuses to this rule include ELIDE constructs that
-  lead to an empty .o file (see getopt module).
-* If you have a .c file that leads to an empty .o file on some platforms
-  (through some big #if around all the code), still make sure that after
-  preprocessing the compilation unit is not empty. This is usually fulfilled
-  if you #include <stdio.h> or #include <sys/types.h> before the big #if;
-  otherwise you need to add a #else branch containing "typedef int dummy;"
-  or "extern int dummy;".
+* Build files only if they are needed on a platform.  Look at the
+  alloca and fnmatch modules for how to achieve this.  If for some
+  reason you cannot do this, and you have a .c file that leads to an
+  empty .o file on some platforms (through some big #if around all the
+  code), then ensure that the compilation unit is not empty after
+  preprocessing.  One way to do this is to #include <stddef.h> or
+  <stdio.h> before the big #if.
 
 Portability guidelines
 ----------------------
 
 Portability guidelines
 ----------------------
@@ -132,9 +130,17 @@ as well.  GNULib code makes the following additional assumptions:
    for all practical hosts with flat address spaces, but it is not
    always true for hosts with segmented address spaces.
 
    for all practical hosts with flat address spaces, but it is not
    always true for hosts with segmented address spaces.
 
+ * If an existing object has size S, and if T is sufficiently small
+   (e.g., 8 KiB), then S + T cannot overflow.  Overflow in this case
+   would mean that the rest of your program fits into T bytes, which
+   can't happen in realistic flat-address-space hosts.
+
  * Objects with all bits zero are treated as 0 or NULL.  For example,
    memset (A, 0, sizeof A) initializes an array A of pointers to NULL.
 
  * Objects with all bits zero are treated as 0 or NULL.  For example,
    memset (A, 0, sizeof A) initializes an array A of pointers to NULL.
 
+ * Adding zero to a null pointer does not change the pointer.
+   For example, 0 + (char *) NULL == (char *) NULL.
+
 The above assumptions are not required by the C or POSIX standards but
 hold on all practical porting targets that we're familiar with.  If
 you have a porting target where these assumptions are not true, we'd
 The above assumptions are not required by the C or POSIX standards but
 hold on all practical porting targets that we're familiar with.  If
 you have a porting target where these assumptions are not true, we'd