As requested by Alfred Szmidt.

---------- Forwarded message ----------
From: Reuben Thomas <[email protected]>
Date: 25 April 2011 16:20
Subject: Patch to GCS
To: Karl Berry <[email protected]>


There's a heck of a lot more I could do, but relatively brief as my
edits so far are, I suspect they may need quite a lot of
consideration, so I attach a patch of where I'm up to.

Given that pretty much every extant platform has a Standard C
compiler, and that many GNU programs have already dropped support for
K&R C, is it not time to remove the advice about how to keep programs
pre-standard-compatible? Then we could move on to update the guidance
for use of C89 vs C99: a pretty accurate summary is that C99 is now to
C89 as C89 was to K&R when the advice was originally written: i.e.,
it's simple and worthwhile to keep C89-compatibility in existing code,
but (with a few exceptions) C99 support is widespread and can be used
to improve new code.

-- 
http://rrt.sc3d.org
? standards.texi.diff
Index: standards.texi
===================================================================
RCS file: /sources/gnustandards/gnustandards/standards.texi,v
retrieving revision 1.203
diff -u -r1.203 standards.texi
--- standards.texi	28 Mar 2011 22:56:55 -0000	1.203
+++ standards.texi	25 Apr 2011 14:20:20 -0000
@@ -3,7 +3,7 @@
 @setfilename standards.info
 @settitle GNU Coding Standards
 @c This date is automagically updated when you save this file:
-@set lastupdate March 28, 2011
+@set lastupdate April 25, 2011
 @c %**end of header
 
 @dircategory GNU organization
@@ -225,8 +225,7 @@
 
 We have more detailed advice for maintainers of programs; if you have
 reached the stage of actually maintaining a program for GNU (whether
-released or not), please ask us for a copy.  It is also available
-online for your perusal: @uref{http://www.gnu.org/prep/maintain/}.
+released or not), read it at: @uref{http://www.gnu.org/prep/maintain/}.
 
 @node Trademarks
 @section Trademarks
@@ -581,10 +580,9 @@
 
 POSIX.2 specifies that @samp{df} and @samp{du} must output sizes by
 default in units of 512 bytes.  What users want is units of 1k, so
-that is what we do by default.  If you want the ridiculous behavior
+that is what we do by default.  If you really want the behavior
 ``required'' by POSIX, you must set the environment variable
-@samp{POSIXLY_CORRECT} (which was originally going to be named
-@samp{POSIX_ME_HARDER}).
+@samp{POSIXLY_CORRECT}.
 
 GNU utilities also depart from the letter of the POSIX.2 specification
 when they support long-named command-line options, and intermixing
@@ -605,17 +603,13 @@
 
 @cindex @code{NUL} characters
 Utilities reading files should not drop NUL characters, or any other
-nonprinting characters @emph{including those with codes above 0177}.
-The only sensible exceptions would be utilities specifically intended
-for interface to certain types of terminals or printers
-that can't handle those characters.
-Whenever possible, try to make programs work properly with
-sequences of bytes that represent multibyte characters, using encodings
-such as UTF-8 and others.
+nonprinting characters.
+Programs should work properly with multibyte character encodings, such
+as UTF-8. You can use libiconv to deal with a wide range of encodings.
 
 @cindex error messages
 Check every system call for an error return, unless you know you wish to
-ignore errors.  Include the system error text (from @code{perror} or
+ignore errors.  Include the system error text (from @code{strerror} or
 equivalent) in @emph{every} error message resulting from a failing
 system call, as well as the name of the file if any and the name of the
 utility.  Just ``cannot open foo.c'' or ``stat failed'' is not
@@ -624,16 +618,10 @@
 @cindex @code{malloc} return value
 @cindex memory allocation failure
 Check every call to @code{malloc} or @code{realloc} to see if it
-returned zero.  Check @code{realloc} even if you are making the block
-smaller; in a system that rounds block sizes to a power of 2,
+returned @code{NULL}.  Check @code{realloc} even if you are making the
+block smaller; in a system that rounds block sizes to a power of 2,
 @code{realloc} may get a different block if you ask for less space.
 
-In Unix, @code{realloc} can destroy the storage block if it returns
-zero.  GNU @code{realloc} does not have this bug: if it fails, the
-original block is unchanged.  Feel free to assume the bug is fixed.  If
-you wish to run your program on Unix, and wish to avoid lossage in this
-case, you can use the GNU @code{malloc}.
-
 You must expect @code{free} to alter the contents of the block that was
 freed.  Anything you want to fetch from the block, you must fetch before
 calling @code{free}.
@@ -651,7 +639,7 @@
 When static storage is to be written in during program execution, use
 explicit C code to initialize it.  Reserve C initialized declarations
 for data that will not be changed.
-@c ADR: why?
+@c ADR: why? <-- Why indeed? Justify or remove?
 
 Try to avoid low-level interfaces to obscure Unix data structures (such
 as file directories, utmp, or the layout of kernel memory), since these
@@ -2333,6 +2321,9 @@
 don't complicate a program merely to avoid their false alarms.  For
 example, if memory is used until just before a process exits, don't
 free it simply to silence a leak detector.
+@c RRT: This is a bad example, as it’s not a leak, and valgrind wouldn’t
+@c complain about it (merely report that the memory was still in use and
+@c reachable).
 
 @node File Usage
 @section File Usage

Reply via email to