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

Reply via email to