aboutsummaryrefslogtreecommitdiffstats
path: root/mkinitfs.in
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2014-03-24 13:19:45 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2014-03-24 13:19:45 +0000
commitb5a2220b10ae071cb518ef1301a04710efb3341a (patch)
tree61de606e9979d025ae3452f8488dc54459fba4ca /mkinitfs.in
parent8cb0e815133c1000a84f59939620ed8a32696e2d (diff)
downloadmkinitfs-b5a2220b10ae071cb518ef1301a04710efb3341a.tar.bz2
mkinitfs-b5a2220b10ae071cb518ef1301a04710efb3341a.tar.xz
mkinitfs: refactor basedir handling
Try catch all corner cases properly
Diffstat (limited to 'mkinitfs.in')
-rwxr-xr-xmkinitfs.in35
1 files changed, 16 insertions, 19 deletions
diff --git a/mkinitfs.in b/mkinitfs.in
index c0d00cf..37df16f 100755
--- a/mkinitfs.in
+++ b/mkinitfs.in
@@ -13,23 +13,25 @@ group="$datadir"/group
startdir=$PWD
feature_files() {
- local suffix="$1"
- local dir="$features_dir"
+ local dir="$1"
+ local suffix="$2"
local glob file
for f in $features; do
- if [ ! -f "$dir/$f.$suffix" ]; then
+ if [ ! -f "$features_dir/$f.$suffix" ]; then
continue
fi
- for glob in $(sed 's:^/\+::' "$dir/$f.$suffix"); do
+ for glob in $(sed -e "s|^/*|$dir|" "$features_dir/$f.$suffix"); do
for file in $glob; do
if [ -d $file ]; then
find $file -type f
- else
+ elif [ -e "$file" ]; then
echo $file
+ elif [ "${file##*/}" != '*' ]; then
+ echo "$file: No such file or directory. Skipped" >&2
fi
done
done
- done
+ done | sort -u
}
initfs_base() {
@@ -42,9 +44,9 @@ initfs_base() {
local oldpwd="$PWD"
cd "${basedir}"
- for file in $(feature_files files); do
- echo "${file#/}"
- done | cpio -pdm "$tmpdir"
+ for file in $(feature_files "$basedir" files); do
+ echo "${file#$basedir}"
+ done | cpio -pdm "$tmpdir" || return 1
# copy init
cd $startdir
@@ -64,7 +66,7 @@ function recursedeps(k, j, dep) {
split(deps[k], dep, " ");
for (j in dep)
recursedeps(dep[j]);
- print(prepend k);
+ print(k);
}
BEGIN {
@@ -93,12 +95,8 @@ END {
find_kmods() {
local oldpwd="$PWD"
cd "$kerneldir" || return 1
- for file in $(feature_files modules); do
- if ! [ -e ${file} ]; then
- echo "$file: No such file or directory" >&2
- continue
- fi
- echo $file
+ for file in $(feature_files "${kerneldir}/" modules); do
+ echo ${file#$basedir}
done | find_kmod_deps
cd "$oldpwd"
}
@@ -110,12 +108,11 @@ initfs_kmods() {
if ! [ -f "$kerneldir"/modules.dep ]; then
depmod -b "${basedir}" $kernel
fi
- files=$(find_kmods)
local oldpwd="$PWD"
cd "${basedir}"
- for file in $files; do
+ for file in $(find_kmods); do
echo "${file#/}"
- done | cpio -pdm "$tmpdir"
+ done | cpio -pdm "$tmpdir" || return 1
depmod $kernel -b "$tmpdir"
cd "$oldpwd"
}