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