On Fri, Jan 22, 2016 at 09:06:36AM +0100, Michael Olbrich wrote: > On Fri, Jan 22, 2016 at 01:31:37AM +0100, Ladislav Michl wrote: > > Now I'm going to be honest. Previous patch 'Add usb-modeswitch-data package' > > break things - 'ptxdist images' fails as ':' is used as delimiter in perms > > file. > > Patch bellow escapes semicolon on producer side, anyone cares about > > consumer? > > This does not work well with IFS in bash and FS in awk. but I think we can > switch different character. Maybe a vertical tab?
Well, I did not give up 'escaping idea' yet. What about something like this? (awk part could be done better) diff --git a/scripts/lib/ptxd_lib_dopermissions.awk b/scripts/lib/ptxd_lib_dopermissions.awk index 336948c..17ee1b6 100755 --- a/scripts/lib/ptxd_lib_dopermissions.awk +++ b/scripts/lib/ptxd_lib_dopermissions.awk @@ -5,13 +5,29 @@ BEGIN { } $1 ~ "f" { - printf("chmod %s '.%s' &&\n" \ - "chown %s.%s '.%s' &&\n", \ - $5, $2, $3, $4, $2); + path = $2; + for (i = 3; i <= NF; i++) { + if (substr(path, length(path), 1) == "\\") + path = substr(path, 1, length(path) - 1) ":" $i; + else { + printf("chmod %s '.%s' &&\n" \ + "chown %s.%s '.%s' &&\n", \ + $(i+2), path, $i, $(i+1), path); + break; + } + } } $1 ~ "n" { - printf("mknod -m %s '.%s' %s %s %s &&\n" \ - "chown %s.%s '.%s' &&\n", \ - $5, $2, $6, $7, $8, $3, $4, $2); + path = $2; + for (i = 3; i <= NF; i++) { + if (substr(path, length(path), 1) == "\\") + path = substr(path, 1, length(path) - 1) ":" $i; + else { + printf("mknod -m %s '.%s' %s %s %s &&\n" \ + "chown %s.%s '.%s' &&\n", \ + $(i+2), path, $(i+3), $(i+4), $(i+5), $i, $(i+1), path); + break; + } + } } diff --git a/scripts/lib/ptxd_make_xpkg_pkg.sh b/scripts/lib/ptxd_make_xpkg_pkg.sh index 5ba404e..01ce361 100644 --- a/scripts/lib/ptxd_make_xpkg_pkg.sh +++ b/scripts/lib/ptxd_make_xpkg_pkg.sh @@ -210,7 +210,7 @@ install directory: install -m "${mod_nfs}" -d "${ndirs[@]/%/${dir}}" && install -m "${mod}" -o "${usr}" -g "${grp}" -d "${pdirs[@]/%/${dir}}" && - echo "f:${dir}:${usr}:${grp}:${mod}" >> "${pkg_xpkg_perms}" || + echo "f:${dir//:/\\:}:${usr}:${grp}:${mod}" >> "${pkg_xpkg_perms}" || ptxd_install_error "install_dir failed!" } export -f ptxd_install_dir @@ -343,7 +343,7 @@ Usually, just remove the 6th parameter and everything works fine. # now change to requested user and group chown "${usr}:${grp}" "${pdirs[@]/%/${dst}}" && - echo "f:${dst}:${usr}:${grp}:${mod}" >> "${pkg_xpkg_perms}" + echo "f:${dst//:/\\:}:${usr}:${grp}:${mod}" >> "${pkg_xpkg_perms}" } export -f ptxd_install_file_impl @@ -414,7 +414,7 @@ install device node: done && chown "${usr}:${grp}" "${pdirs[@]/%/${dst}}" && - echo "n:${dst}:${usr}:${grp}:${mod}:${type}:${major}:${minor}" >> "${pkg_xpkg_perms}" + echo "n:${dst//:/\\:}:${usr}:${grp}:${mod}:${type}:${major}:${minor}" >> "${pkg_xpkg_perms}" } export -f ptxd_install_mknod _______________________________________________ ptxdist mailing list ptxdist@pengutronix.de