1#!/bin/sh 2 3# Use stat to find a writable directory on a file system different from that 4# of the current directory. If one is found, create a temporary directory 5# inside it. 6 7# Copyright (C) 1998-2023 Free Software Foundation, Inc. 8 9# This program is free software: you can redistribute it and/or modify 10# it under the terms of the GNU General Public License as published by 11# the Free Software Foundation, either version 3 of the License, or 12# (at your option) any later version. 13 14# This program is distributed in the hope that it will be useful, 15# but WITHOUT ANY WARRANTY; without even the implied warranty of 16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17# GNU General Public License for more details. 18 19# You should have received a copy of the GNU General Public License 20# along with this program. If not, see <https://www.gnu.org/licenses/>. 21 22test "${CANDIDATE_TMP_DIRS+set}" = set \ 23 || CANDIDATE_TMP_DIRS="$TMPDIR /tmp /dev/shm /var/tmp /usr/tmp $HOME" 24 25other_partition_tmpdir= 26 27dot_mount_point=$(stat -c %d .) 28for d in $CANDIDATE_TMP_DIRS; do 29 30 # Skip nonexistent directories. 31 test -d "$d" || continue 32 33 d_mount_point=$(stat -L -c %d "$d") 34 35 # Same partition? Skip it. 36 test "x$d_mount_point" = "x$dot_mount_point" && continue 37 38 # See if we can create a directory in it. 39 if mkdir "$d/tmp$$" > /dev/null 2>&1; then 40 other_partition_tmpdir="$d/tmp$$" 41 break 42 fi 43 44done 45 46if test -z "$other_partition_tmpdir"; then 47 skip_ \ 48"requires a writable directory on a different file system, 49and I couldn't find one. I tried these: 50 $CANDIDATE_TMP_DIRS 51Set your environment variable CANDIDATE_TMP_DIRS to make 52this test use a different list." 53fi 54 55test "$VERBOSE" = yes && set -x 56