Browse Source

base-files: upgrade: add get_image_dd()

This is mainly to handle stderr message "Broken pipe", "F+P records
in/out" by common pattern "xcat | dd .."

Ref: https://bugs.openwrt.org/index.php?do=details&task_id=3140
Reported-by: Philip Prindeville <[email protected]>
Signed-off-by: Yousong Zhou <[email protected]>
Reviewed-By: Philip Prindeville <[email protected]>
Yousong Zhou 5 years ago
parent
commit
50b870ee3c
1 changed files with 11 additions and 0 deletions
  1. 11 0
      package/base-files/files/lib/upgrade/common.sh

+ 11 - 0
package/base-files/files/lib/upgrade/common.sh

@@ -106,6 +106,17 @@ get_image() { # <source> [ <command> ]
 	$cmd <"$from"
 }
 
+get_image_dd() {
+	local from="$1"; shift
+
+	(
+		exec 3>&2
+		( exec 3>&2; get_image "$from" 2>&1 1>&3 | grep -v -F ' Broken pipe'     ) 2>&1 1>&3 \
+			| ( exec 3>&2; dd "$@" 2>&1 1>&3 | grep -v -E ' records (in|out)') 2>&1 1>&3
+		exec 3>&-
+	)
+}
+
 get_magic_word() {
 	(get_image "$@" | dd bs=2 count=1 | hexdump -v -n 2 -e '1/1 "%02x"') 2>/dev/null
 }