summaryrefslogtreecommitdiff
path: root/src/chroot-tools/librechroot
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2013-10-25 15:46:42 -0400
committerLuke Shumaker <LukeShu@sbcglobal.net>2013-10-26 00:46:25 -0400
commit18a7244ee5d47b083bc3653a8d97ac6ef8bad5bc (patch)
tree4dbd0bc4f5b13113295d32cf50382f2c00ae436d /src/chroot-tools/librechroot
parent0d673eadca425d63c7367372575058324e9ecc91 (diff)
librechroot+indent: Add in a bunch of extra '\r's to work-around the systemd bug
Diffstat (limited to 'src/chroot-tools/librechroot')
-rwxr-xr-xsrc/chroot-tools/librechroot14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/chroot-tools/librechroot b/src/chroot-tools/librechroot
index 4941b95..65977ea 100755
--- a/src/chroot-tools/librechroot
+++ b/src/chroot-tools/librechroot
@@ -178,10 +178,22 @@ arch_nspawn_flags=()
sysd_nspawn_flags=()
arch-nspawn() {
local copydir=$1; shift
+ # XXX: SYSTEMD-STDOUT HACK
if [[ -t 1 ]]; then
cmd=("$@")
else
- cmd=(bash --noprofile --norc -c "set -o pipefail; $(printf '%q ' "$@") |&cat")
+ # This perl script is equivalent to `sed -s 's|\n|\r\n|g', but
+ # it doesn't line-buffer.
+ local perlcmd='
+my $size;
+my $buffer;
+while(1) {
+ $size=sysread(STDIN, $buffer, 40);
+ last if ($size < 1);
+ $buffer =~ s/\n/\r\n/g;
+ syswrite(STDOUT, $buffer);
+}'
+ cmd=(bash --noprofile --norc -c "set -o pipefail; $(printf '%q ' "$@") |& perl -e $(printf '%q' "$perlcmd")")
fi
set +u # if an array is empty, it counts as unbound