summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorAlexey Neyman <stilor@att.net>2018-12-01 22:16:39 (GMT)
committerAlexey Neyman <stilor@att.net>2018-12-01 22:44:08 (GMT)
commita4dc14dba4f13027684e456b6a21326dfc1bc3c5 (patch)
tree42a3c4ba9c15122edbd56fd30ca431af4b5c8fe6 /scripts
parentdc681ec8eb53eccdd18521853abaf0574d6ae75f (diff)
Consider it success if DoForceRmdir removes only the content
Fixes #929. Signed-off-by: Alexey Neyman <stilor@att.net>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/crosstool-NG.sh5
-rw-r--r--scripts/functions48
2 files changed, 27 insertions, 26 deletions
diff --git a/scripts/crosstool-NG.sh b/scripts/crosstool-NG.sh
index b60976c..3e888d7 100644
--- a/scripts/crosstool-NG.sh
+++ b/scripts/crosstool-NG.sh
@@ -253,11 +253,6 @@ if [ "${CT_SAVE_TARBALLS}" = "y" \
CT_SAVE_TARBALLS=
fi
-# Check now if we can write to the destination directory:
-if [ -d "${CT_PREFIX_DIR}" ]; then
- CT_TestAndAbort "Destination directory '${CT_PREFIX_DIR}' is not removable" ! -w $(dirname "${CT_PREFIX_DIR}")
-fi
-
# Good, now grab a bit of informations on the system we're being run on,
# just in case something goes awok, and it's not our fault:
CT_SYS_USER=$(id -un)
diff --git a/scripts/functions b/scripts/functions
index 6e54582..e93618c 100644
--- a/scripts/functions
+++ b/scripts/functions
@@ -582,7 +582,8 @@ CT_Popd() {
# Create a dir and pushd into it
# Usage: CT_mkdir_pushd <dir/to/create>
-CT_mkdir_pushd() {
+CT_mkdir_pushd()
+{
local dir="${1}"
mkdir -p "${dir}"
@@ -592,7 +593,8 @@ CT_mkdir_pushd() {
# Creates a temporary directory
# $1: variable to assign to
# Usage: CT_MktempDir foo
-CT_MktempDir() {
+CT_MktempDir()
+{
# Some mktemp do not allow more than 6 Xs
eval "$1"=$(mktemp -q -d "${CT_BUILD_DIR}/tmp.XXXXXX")
CT_TestOrAbort "Could not make temporary directory" -n "${!1}" -a -d "${!1}"
@@ -602,26 +604,29 @@ CT_MktempDir() {
# Removes one or more directories, even if it is read-only, or its parent is
# Usage: CT_DoForceRmdir dir [...]
-CT_DoForceRmdir() {
+CT_DoForceRmdir()
+{
local dir
- local mode
+ local cnt
+
for dir in "${@}"; do
- [ -d "${dir}" ] || continue
- case "${CT_CONFIGURE_has_stat_flavor_GNU},${CT_CONFIGURE_has_stat_flavor_BSD}" in
- y,*)
- mode="$(stat -c '%a' "$(dirname "${dir}")")"
- ;;
- *,y)
- mode="$(stat -f '%Lp' "$(dirname "${dir}")")"
- ;;
- *)
- CT_Abort "Unknown stat format options"
- ;;
- esac
- CT_DoExecLog ALL chmod u+w "$(dirname "${dir}")"
- CT_DoExecLog ALL chmod -R u+w "${dir}"
- CT_DoExecLog ALL rm -rf "${dir}"
- CT_DoExecLog ALL chmod ${mode} "$(dirname "${dir}")"
+ [ -e "${dir}" ] || continue
+ CT_TestOrAbort "Cannot remove '${dir}': not a directory" -d "${dir}"
+ CT_DoExecLog ALL chmod -R u+w "${dir}" || :;
+ if CT_DoExecLog ALL rm -rf "${dir}"; then
+ continue
+ fi
+ # If we succeeded in removing the whole directory, good. If not,
+ # but only the top level directory remains - it is fine, too, because
+ # this function is used to remove the directories that are going to be
+ # re-created. Hence, verify we at least succeeded in verifying the
+ # contents of this directory.
+ if [ -d "${dir}" ]; then
+ cnt=$(ls -a "${dir}" | { grep -v '^\.\{1,2\}$' || :; } | wc -l)
+ if [ "${cnt}" != "0" ]; then
+ CT_Abort "Failed to remove '${dir}'"
+ fi
+ fi
done
}
@@ -630,7 +635,8 @@ CT_DoForceRmdir() {
# $1: path to add
# $2: add as 'first' or 'last' path, 'first' is assumed if $2 is empty
# Usage CT_SetLibPath /some/where/lib [first|last]
-CT_SetLibPath() {
+CT_SetLibPath()
+{
local path="$1"
local pos="$2"