Bash-4.3 distribution sources and documentation
[platform/upstream/bash.git] / builtins / psize.sh
old mode 100755 (executable)
new mode 100644 (file)
index 961becd..29bc115
@@ -3,6 +3,20 @@
 # psize.sh -- determine this system's pipe size, and write a define to
 #             pipesize.h so ulimit.c can use it.
 
+: ${TMPDIR:=/tmp}
+# try to use mktemp(1) if the system supports it
+{ TMPFILE="`mktemp $TMPDIR/pipsize.XXXXXX 2>/dev/null`"; } 2>/dev/null
+used_mktemp=true
+
+if [ -z "$TMPFILE" ]; then
+       TMPNAME=pipsize.$$
+       TMPFILE=$TMPDIR/$TMPNAME
+       used_mktemp=false
+fi
+
+trap 'rm -f "$TMPFILE" ; exit 1' 1 2 3 6 15
+trap 'rm -f "$TMPFILE"' 0
+
 echo "/*"
 echo " * pipesize.h"
 echo " *"
@@ -11,14 +25,21 @@ echo " * Do not edit!"
 echo " */"
 echo ""
 
-./psize.aux 2>/tmp/pipesize | sleep 3
+#
+# Try to avoid tempfile races.  We can't really check for the file's
+# existence before we run psize.aux, because `test -e' is not portable,
+# `test -h' (test for symlinks) is not portable, and `test -f' only
+# checks for regular files.  If we used mktemp(1), we're ahead of the
+# game.
+#
+$used_mktemp || rm -f "$TMPFILE"
 
-if [ -s /tmp/pipesize ]; then
-       echo "#define PIPESIZE `cat /tmp/pipesize`"
+./psize.aux 2>"$TMPFILE" | sleep 3
+
+if [ -s "$TMPFILE" ]; then
+       echo "#define PIPESIZE `cat "$TMPFILE"`"
 else
        echo "#define PIPESIZE 512"
 fi
 
-rm -f /tmp/pipesize
-
 exit 0