[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#799443: [PATCH initramfs-tools 1/5] hook-functions: Introduce copy_file function



Split the file copying logic out of copy_exec so we can use it without
invoking ldd.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 hook-functions | 54 ++++++++++++++++++++++++++++++++----------------------
 1 file changed, 32 insertions(+), 22 deletions(-)

diff --git a/hook-functions b/hook-functions
index 72f17ae..407dc61 100644
--- a/hook-functions
+++ b/hook-functions
@@ -118,30 +118,45 @@ manual_add_modules()
 	done
 }
 
-# $1 = file to copy to ramdisk
-# $2 (optional) Name for the file on the ramdisk
+# $1 = file type (for logging)
+# $2 = file to copy to ramdisk
+# $3 (optional) Name for the file on the ramdisk
 # Location of the image dir is assumed to be $DESTDIR
-# We never overwrite the target if it exists.
-copy_exec() {
-	local src target x nonoptlib
-	local libname dirname
+# If the target exists, we leave it and return 1.
+# On any other error, we return >1.
+copy_file() {
+	local type src target
 
-	src="${1}"
-	target="${2:-$1}"
+	type="${1}"
+	src="${2}"
+	target="${3:-$2}"
 
-	[ -f "${src}" ] || return 1
+	[ -f "${src}" ] || return 2
 
 	if [ -d "${DESTDIR}/${target}" ]; then
 		# check if already copied
-		[ -e "${DESTDIR}/$target/${src##*/}" ] && return 0
+		[ -e "${DESTDIR}/$target/${src##*/}" ] && return 1
 	else
-		[ -e "${DESTDIR}/$target" ] && return 0
+		[ -e "${DESTDIR}/$target" ] && return 1
 		#FIXME: inst_dir
 		mkdir -p "${DESTDIR}/${target%/*}"
 	fi
 
-	[ "${verbose}" = "y" ] && echo "Adding binary ${src}"
-	cp -pL "${src}" "${DESTDIR}/${target}"
+	[ "${verbose}" = "y" ] && echo "Adding ${type} ${src}"
+	cp -pL "${src}" "${DESTDIR}/${target}" || return $(($? + 1))
+}
+
+# $1 = executable to copy to ramdisk, with library dependencies
+# $2 (optional) Name for the file on the ramdisk
+# Location of the image dir is assumed to be $DESTDIR
+# We never overwrite the target if it exists.
+copy_exec() {
+	local src target x nonoptlib ret
+
+	src="${1}"
+	target="${2:-$1}"
+
+	copy_file binary "${src}" "${target}" || return $(($? - 1))
 
 	# Copy the dependant libraries
 	for x in $(ldd "${src}" 2>/dev/null | sed -e '
@@ -160,15 +175,10 @@ copy_exec() {
 			x="${nonoptlib}"
 		fi
 
-		libname=$(basename "${x}")
-		dirname=$(dirname "${x}")
-
-		# FIXME inst_lib
-		mkdir -p "${DESTDIR}/${dirname}"
-		if [ ! -e "${DESTDIR}/${dirname}/${libname}" ]; then
-			cp -pL "${x}" "${DESTDIR}/${dirname}"
-			[ "${verbose}" = "y" ] && echo "Adding library ${x}" || true
-		fi
+		copy_file library "${x}" || {
+			ret=$?
+			[ ${ret} = 1 ] || return $((ret - 1))
+		}
 	done
 }
 

Attachment: signature.asc
Description: Digital signature


Reply to: