]> git.saurik.com Git - apple/shell_cmds.git/blobdiff - sh/cd.c
shell_cmds-216.60.1.tar.gz
[apple/shell_cmds.git] / sh / cd.c
diff --git a/sh/cd.c b/sh/cd.c
index 67a80bd712eeb95b3511c075f542b72d788aeaef..cf63681f394701dc48bc66daeb9135d8cd90d290 100644 (file)
--- a/sh/cd.c
+++ b/sh/cd.c
@@ -13,7 +13,7 @@
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
@@ -36,7 +36,7 @@ static char sccsid[] = "@(#)cd.c      8.2 (Berkeley) 5/4/95";
 #endif
 #endif /* not lint */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/bin/sh/cd.c 294667 2016-01-24 17:01:34Z jilles $");
+__FBSDID("$FreeBSD: head/bin/sh/cd.c 320340 2017-06-25 21:53:08Z jilles $");
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -164,8 +164,17 @@ docd(char *dest, int print, int phys)
        if ((phys || (rc = cdlogical(dest)) < 0) && (rc = cdphysical(dest)) < 0)
                return (-1);
 
-       if (print && iflag && curdir)
+       if (print && iflag && curdir) {
                out1fmt("%s\n", curdir);
+               /*
+                * Ignore write errors to preserve the invariant that the
+                * current directory is changed iff the exit status is 0
+                * (or 1 if -e was given and the full pathname could not be
+                * determined).
+                */
+               flushout(out1);
+               outclearerror(out1);
+       }
 
        return (rc);
 }