`finish_async`::
 
-       Wait for the completeion of an asynchronous function that was
+       Wait for the completion of an asynchronous function that was
        started with start_async().
 
 
 
 The caller:
 
-1. allocates and clears (memset(&chld, '0', sizeof(chld));) a
+1. allocates and clears (memset(&chld, 0, sizeof(chld));) a
    struct child_process variable;
 2. initializes the members;
 3. calls start_command();
        .no_stdin, .no_stdout, .no_stderr: The respective channel is
                redirected to /dev/null.
 
-       .stdout_to_stderr: stdout of the child is redirected to the
-               parent's stderr (i.e. *not* to what .err or
-               .no_stderr specify).
+       .stdout_to_stderr: stdout of the child is redirected to its
+               stderr. This happens after stderr is itself redirected.
+               So stdout will follow stderr to wherever it is
+               redirected.
 
 To modify the environment of the sub-process, specify an array of
 string pointers (NULL terminated) in .env:
 . If the string is of the form "VAR=value", i.e. it contains '='
   the variable is added to the child process's environment.
 
-. If the string does not contain '=', it names an environement
-  variable that will be removed from the child process's envionment.
+. If the string does not contain '=', it names an environment
+  variable that will be removed from the child process's environment.
 
 To specify a new initial working directory for the sub-process,
 specify it in the .dir member.
 
 The caller:
 
-1. allocates and clears (memset(&asy, '0', sizeof(asy));) a
+1. allocates and clears (memset(&asy, 0, sizeof(asy));) a
    struct async variable;
 2. initializes .proc and .data;
 3. calls start_async();