strchrnul: work around cygwin bug
[pspp] / doc / posix-functions / realloc.texi
index c5519f14721503debde262a0d2693681c8801290..12a9dc7c3f2f6bd9018077d735e581f8cd907141 100644 (file)
@@ -2,7 +2,7 @@
 @section @code{realloc}
 @findex realloc
 
-POSIX specification: @url{http://www.opengroup.org/onlinepubs/9699919799/functions/realloc.html}
+POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/realloc.html}
 
 Gnulib module: realloc-posix
 
@@ -16,7 +16,20 @@ mingw.
 
 Portability problems not fixed by Gnulib:
 @itemize
+@item
+It is not portable to call @code{realloc} with a size of 0.  With a
+NULL pointer argument, this is the same ambiguity as @code{malloc (0)}
+on whether a unique zero-size object is created.  With a non-NULL
+pointer argument, C99 requires that if @code{realloc (p, 0)} returns
+@code{NULL} then @code{p} is still valid.  Among implementations that
+obey C99, behavior varies on whether @code{realloc (p, 0)} always
+fails and leaves @code{p} valid, or usually succeeds and returns a
+unique zero-size object; either way, a program not suspecting these
+semantics will leak memory (either the still-valid @code{p}, or the
+non-NULL return value).  Meanwhile, several implementations violate
+C99, by always calling @code{free (p)} but returning NULL:
+glibc, Cygwin
 @end itemize
 
-Extension: Gnulib provides a module @samp{realloc} that substitutes a
+Extension: Gnulib provides a module @samp{realloc-gnu} that substitutes a
 @code{realloc} implementation that behaves more like the glibc implementation.