Hello community,

here is the log from the commit of package perl-Bootloader for openSUSE:Factory 
checked in at 2015-04-25 16:46:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Bootloader (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Bootloader.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Bootloader"

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Bootloader/perl-Bootloader.changes  
2015-03-29 20:17:08.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.perl-Bootloader.new/perl-Bootloader.changes     
2015-04-25 16:46:18.000000000 +0200
@@ -1,0 +2,12 @@
+Wed Apr 22 14:01:05 CEST 2015 - [email protected]
+
+- started pbl-yaml testsuite
+- added test cases for various utf8/non-utf8/really broken config files
+- rewrite file-io to do some utf8 processing that keeps non-utf8 files intact 
as much as possible
+- use only WriteFileRaw() to actually write files
+- use ReadFileRaw() to read grub2 config (bnc #899921)
+- rewrite ReadFile() to handle utf8 properly (bnc #899921)
+- export more pbl functions via yaml interface to allow easier testing
+- 0.832
+
+-------------------------------------------------------------------

Old:
----
  perl-Bootloader-0.831.tar.xz

New:
----
  perl-Bootloader-0.832.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Bootloader.spec ++++++
--- /var/tmp/diff_new_pack.dHvoto/_old  2015-04-25 16:46:18.000000000 +0200
+++ /var/tmp/diff_new_pack.dHvoto/_new  2015-04-25 16:46:18.000000000 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-Bootloader
 #
-# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           perl-Bootloader
-Version:        0.831
+Version:        0.832
 Release:        0
 Requires:       coreutils
 Requires:       perl-base = %{perl_version}

++++++ perl-Bootloader-0.831.tar.xz -> perl-Bootloader-0.832.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/perl-Bootloader-0.831/VERSION 
new/perl-Bootloader-0.832/VERSION
--- old/perl-Bootloader-0.831/VERSION   2015-03-26 12:58:27.000000000 +0100
+++ new/perl-Bootloader-0.832/VERSION   2015-04-22 13:59:11.000000000 +0200
@@ -1 +1 @@
-0.831
+0.832
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/perl-Bootloader-0.831/changelog 
new/perl-Bootloader-0.832/changelog
--- old/perl-Bootloader-0.831/changelog 2015-03-26 12:58:27.000000000 +0100
+++ new/perl-Bootloader-0.832/changelog 2015-04-22 13:59:11.000000000 +0200
@@ -1,3 +1,12 @@
+2015-04-22:    0.832
+       - started pbl-yaml testsuite
+       - added test cases for various utf8/non-utf8/really broken config files
+       - rewrite file-io to do some utf8 processing that keeps non-utf8 files 
intact as much as possible
+       - use only WriteFileRaw() to actually write files
+       - use ReadFileRaw() to read grub2 config (bnc #899921)
+       - rewrite ReadFile() to handle utf8 properly (bnc #899921)
+       - export more pbl functions via yaml interface to allow easier testing
+
 2015-03-26:    0.831
        - remove unrelated comment
        - add device scannning speed-ups done for sle11-sp3 (bnc #910479)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/perl-Bootloader-0.831/pbl-yaml 
new/perl-Bootloader-0.832/pbl-yaml
--- old/perl-Bootloader-0.831/pbl-yaml  2015-03-26 12:58:27.000000000 +0100
+++ new/perl-Bootloader-0.832/pbl-yaml  2015-04-22 13:59:11.000000000 +0200
@@ -106,6 +106,12 @@
     elsif(exists $Bootloader::Library::{$func}) {
       $res = $pbl_state->$func(@args);
     }
+    elsif(exists $Bootloader::FileIO::{$func}) {
+      $res = $pbl_state->$func(@args);
+    }
+    elsif(exists $Bootloader::Path::{$func}) {
+      eval "\$res = Bootloader::Path::$func(\@args)";
+    }
     else {
       $logger->error("$func: no such function");
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/Makefile
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/Makefile
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/Makefile
   2015-03-26 12:58:27.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/Makefile
   2015-04-22 13:59:11.000000000 +0200
@@ -1,4 +1,6 @@
-main: prepare test clean
+all: test yaml clean
+
+.PHONY: prepare test yaml clean
 
 prepare: clean
        mkdir -p Bootloader
@@ -7,7 +9,7 @@
        cp -rf backup/fake_root2 .
        @mkdir -p fake_root{1,2}/var/log/YaST2
 
-test:
+test: prepare
        perl -w grub1-test.pl
        perl -w lilo1-test.pl
        perl -w elilo1-test.pl
@@ -20,9 +22,11 @@
        rm -rf Bootloader
        rm -rf fake_root[12]
 
+yaml:
+       cd yaml; ./yaml_test
+
 #usefull target after failed test
 clean: 
        @rm -rf Bootloader
        rm -rf fake_root*
-       cp -rf backup/fake_root1 .
-       cp -rf backup/fake_root2 .
+       rm -rf yaml/{arg*,res*,var}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/README
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/README
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/README
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/README
  2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1,8 @@
+===  Test file encoding during file-i/o in perl-Bootloader  ===
+
+- file*: test inputs
+
+- input*: internal yaml representation of file* (generated from res00?
+  obtained during yaml_test run)
+
+- other files: encoding samples used to put together file*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/ascii
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/ascii
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/ascii
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/ascii
   2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1 @@
+ascii abc 123 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file1
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file1
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file1
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file1
   2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1 @@
+ascii abc 123 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file2
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file2
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file2
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file2
   2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1 @@
+uni äö 123 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file3
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file3
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file3
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file3
   2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1 @@
+uni1 äöß 123 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file4
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file4
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file4
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file4
   2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1 @@
+uni2 äö€ 123 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file5
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file5
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file5
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file5
   2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1 @@
+lat �� 123 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file6
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file6
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file6
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file6
   2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1 @@
+lat1 ��� 123 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file7
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file7
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file7
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file7
   2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1,4 @@
+lat �� 123 
+uni äö 123 
+lat1 ��� 123 
+uni1 äöß 123 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file8
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file8
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file8
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file8
   2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1,4 @@
+uni2 äö€ 123 
+lat1 ��� 123 
+uni1 äöß 123 
+lat �� 123 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file9
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file9
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file9
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/file9
   2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1,6 @@
+invalid �� ��/�b
+uni2 äö€ 123 
+lat1 ��� 123 
+uni1 äöß 123 
+lat �� 123 
+invalid �� ��/�b
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input1
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input1
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input1
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input1
  2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1,3 @@
+---
+- "res101"
+- "ascii abc 123 \n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input2
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input2
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input2
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input2
  2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1,3 @@
+---
+- "res102"
+- "uni äö 123 \n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input3
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input3
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input3
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input3
  2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1,3 @@
+---
+- "res103"
+- "uni1 äöß 123 \n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input4
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input4
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input4
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input4
  2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1,3 @@
+---
+- "res104"
+- "uni2 äö€ 123 \n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input5
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input5
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input5
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input5
  2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1,3 @@
+---
+- "res105"
+- "lat \U001010E4\U001010F6 123 \n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input6
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input6
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input6
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input6
  2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1,3 @@
+---
+- "res106"
+- "lat1 \U001010E4\U001010F6\U001010DF 123 \n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input7
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input7
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input7
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input7
  2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1,4 @@
+---
+- "res107"
+- "lat \U001010E4\U001010F6 123 \nuni äö 123 \nlat1 
\U001010E4\U001010F6\U001010DF
+  123 \nuni1 äöß 123 \n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input8
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input8
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input8
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input8
  2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1,4 @@
+---
+- "res108"
+- "uni2 äö€ 123 \nlat1 \U001010E4\U001010F6\U001010DF 123 \nuni1 äöß 123 \nlat 
\U001010E4\U001010F6
+  123 \n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input9
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input9
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input9
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/input9
  2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1,5 @@
+---
+- "res109"
+- "invalid \U001010EF\U001010BB \U001010EF\U001010BB/\U001010EF\bb\nuni2 äö€ 
123
+  \nlat1 \U001010E4\U001010F6\U001010DF 123 \nuni1 äöß 123 \nlat 
\U001010E4\U001010F6
+  123 \ninvalid \U001010EF\U001010BB \U001010EF\U001010BB/\U001010EF\bb"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/invalid
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/invalid
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/invalid
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/invalid
 2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1 @@
+invalid �� ��/�b
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat
     2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1 @@
+lat �� 123 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat1
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat1
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat1
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/lat1
    2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1 @@
+lat1 ��� 123 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni
     2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1 @@
+uni äö 123 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni1
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni1
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni1
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni1
    2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1 @@
+uni1 äöß 123 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni2
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni2
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni2
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/test1/uni2
    2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1 @@
+uni2 äö€ 123 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/yaml_test
 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/yaml_test
--- 
old/perl-Bootloader-0.831/perl-Bootloader-testsuite/tests/test_interface/yaml/yaml_test
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/perl-Bootloader-0.832/perl-Bootloader-testsuite/tests/test_interface/yaml/yaml_test
     2015-04-22 13:59:11.000000000 +0200
@@ -0,0 +1,45 @@
+#! /bin/bash
+
+test_failed=0
+
+function yaml_scalar {
+  echo "--- \"$2\"" > "$1"
+}
+
+function yaml_array {
+  file="$1"
+  shift
+  echo "---" > "$file"
+  while [ -n "$1" ] ; do
+    echo "- \"$1\"" > "$file"
+    shift
+  done
+}
+
+function check {
+  if cmp -s "$1" "$2" ; then
+    echo $1: ok
+  else
+    echo $1: failed
+    test_failed=1
+  fi
+}
+
+
+# pbl log goes to var/log/pbl.log
+export PERL_BOOTLOADER_TESTSUITE_PATH=.
+mkdir -p var/log
+
+
+test_dir=test1
+sub_tests=9
+
+for i in `seq $sub_tests` ; do
+  yaml_scalar arg$i "$test_dir/file$i"
+  pbl-yaml "res00$i=ReadFileUnicode(arg$i)"
+  pbl-yaml "res20$i=WriteFileUnicode(@$test_dir/input$i)"
+  check "$test_dir/file$i" "res10$i"
+done
+
+
+exit $test_failed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/perl-Bootloader-0.831/src/Core/GRUB2.pm 
new/perl-Bootloader-0.832/src/Core/GRUB2.pm
--- old/perl-Bootloader-0.831/src/Core/GRUB2.pm 2015-03-26 12:58:27.000000000 
+0100
+++ new/perl-Bootloader-0.832/src/Core/GRUB2.pm 2015-04-22 13:59:11.000000000 
+0200
@@ -567,13 +567,10 @@
     }
 
     my @entries;
-    if (open (GRUBCFG, "<:encoding(utf8)", Bootloader::Path::Grub2_conf())) {
-        local $/;
-        undef $/;
-        my $cfg = <GRUBCFG>;
 
+    my $cfg = $self->ReadFileUnicode(Bootloader::Path::Grub2_conf());
+    if ($cfg) {
         &GrubCfgSections ("", $cfg, \@entries);
-        close (GRUBCFG);
     }
 
     $self->{"global"} = $glob_ref;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/perl-Bootloader-0.831/src/Core/GRUB2EFI.pm 
new/perl-Bootloader-0.832/src/Core/GRUB2EFI.pm
--- old/perl-Bootloader-0.831/src/Core/GRUB2EFI.pm      2015-03-26 
12:58:27.000000000 +0100
+++ new/perl-Bootloader-0.832/src/Core/GRUB2EFI.pm      2015-04-22 
13:59:11.000000000 +0200
@@ -286,13 +286,10 @@
     );
 
     my @entries;
-    if (open (GRUBCFG, "<:encoding(utf8)", Bootloader::Path::Grub2_conf())) {
-        local $/;
-        undef $/;
-        my $cfg = <GRUBCFG>;
 
+    my $cfg = $self->ReadFileUnicode(Bootloader::Path::Grub2_conf());
+    if ($cfg) {
         &GrubCfgSections ("", $cfg, \@entries);
-        close (GRUBCFG);
     }
 
     $self->{"global"} = $glob_ref;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/perl-Bootloader-0.831/src/FileIO.pm 
new/perl-Bootloader-0.832/src/FileIO.pm
--- old/perl-Bootloader-0.831/src/FileIO.pm     2015-03-26 12:58:27.000000000 
+0100
+++ new/perl-Bootloader-0.832/src/FileIO.pm     2015-04-22 13:59:11.000000000 
+0200
@@ -10,7 +10,7 @@
 
 =head1 PREFACE
 
-XXX
+This package provides basic file-i/o functions.
 
 =head1 SYNOPSIS
 
@@ -20,10 +20,16 @@
 
 C<< $lines_ref = Bootloader::FileIO->ReadFile($file_name); >>
 
+C<< $lines_ref = Bootloader::FileIO->ReadFileUnicode($file_name); >>
+
+C<< $lines_ref = Bootloader::FileIO->ReadFileRaw($file_name); >>
+
 C<< $number = Bootloader::FileIO->ReadNumber($file_name); >>
 
 C<< $lines_ref = Bootloader::FileIO->WriteFile($file, $lines); >>
 
+C<< $lines_ref = Bootloader::FileIO->WriteFileUnicode($file, $data); >>
+
 C<< $lines_ref = Bootloader::FileIO->WriteFileRaw($file, $data); >>
 
 =head1 DESCRIPTION
@@ -39,6 +45,15 @@
 
 use base qw ( Bootloader::Logger );
 
+# remap invalid 8-bit input data to this codepoint
+my $utf8_remap_codepoint = 0x101000;
+
+# private helper to convert a byte-stream into valid utf8
+sub u_decode;
+
+# private helper to convert utf8 back into byte-stream
+sub u_encode;
+
 
 =item
 C<< $files_ref = Bootloader::FileIO->ReadFiles(\@file_list); >>
@@ -68,7 +83,8 @@
 C<< $lines_ref = Bootloader::FileIO->ReadFile($file_name); >>
 
 Reads a file from disk and returns a reference to an array of lines (with
-newline stripped). If the file could not be read, returns undef.
+newline stripped).
+If the file could not be read, returns undef.
 
 =cut
 
@@ -79,18 +95,80 @@
 
   my $lines;
 
+  my $f = $self->ReadFileUnicode($file);
+
+  if($f) {
+    chomp $f;
+    $lines = [ split /\n/, $f, -1 ];
+  }
+
+  $self->debug("lines =", $lines);
+
+  return $lines;
+}
+
+
+=item
+C<< $lines_ref = Bootloader::FileIO->ReadFileUnicode($file_name); >>
+
+Reads a file from disk and returns its content.
+Some special processing is done to ensure it returns proper Unicode data.
+If the file could not be read, returns undef.
+
+=cut
+
+sub ReadFileUnicode
+{
+  my $self = shift;
+  my $file = shift;
+
+  return $self->ReadFileRaw($file, 1);
+}
+
+
+=item
+C<< $lines_ref = Bootloader::FileIO->ReadFileRaw($file_name); >>
+
+Reads a file from disk and returns its content.
+If the file could not be read, returns undef.
+
+=cut
+
+sub ReadFileRaw
+{
+  my $self = shift;
+  my $file = shift;
+  my $uni_decode = shift;
+
+  my $res;
+  my $utf8_ok = 1;
+
   if(open(my $fh, $file)) {
-    @$lines = (<$fh>);
+    # we read per-line so we don't have to treat the whole file specially
+    # when just a single char is wrong
+    while(<$fh>) {
+      if($uni_decode) {
+        my $x = u_decode($_);
+        $utf8_ok &&= $x->[1];
+        $res .= $x->[0];
+      }
+      else {
+        $res .= $_;
+      }
+    }
     close $fh;
-    my $l = join '', @$lines;
-    chomp @$lines;
-    $self->milestone("$file =", $l);
+
+    if(!$utf8_ok) {
+      $self->warning("$file: contains non-utf8 chars");
+    }
+
+    $self->milestone("$file =", $res);
   }
   else {
     $self->error("Failed to open $file: $!");
   }
 
-  return $lines;
+  return $res;
 }
 
 
@@ -117,7 +195,7 @@
 =item
 C<< $lines_ref = Bootloader::FileIO->WriteFile($file, $lines); >>
 
-Writes file to disk.
+Writes Unicode text in $lines to $file.
 Returns 1 on success, 0 otherwise.
 
 =cut
@@ -127,36 +205,36 @@
   my $self = shift;
   my $file = shift;
   my $lines = shift;
-  my $ok = 1;
 
-  my $l = join("\n", @$lines) . "\n";
+  return $self->WriteFileUnicode($file, join("\n", @$lines) . "\n");
+}
 
-  $self->milestone("$file =", $l);
 
-  my $saved_umask = umask 0066;
+=item
+C<< $lines_ref = Bootloader::FileIO->WriteFileUnicode($file, $data); >>
 
-  if(open(my $fh, '>', $file)) {
-    print $fh $l;
-    if(!close($fh)) {
-      $self->error("Failed to close $file: $!");
-      $ok = 0;
-    }
-  }
-  else {
-    $self->error("Failed to open $file: $!");
-    $ok = 0;
-  }
+Writes Unicode text $data to $file.
+Returns 1 on success, 0 otherwise.
 
-  umask $saved_umask;
+=cut
 
-  return $ok;
+sub WriteFileUnicode
+{
+  my $self = shift;
+  my $file = shift;
+  my $data = shift;
+  my $ok = 1;
+
+  $self->milestone("$file =", $data);
+
+  return $self->WriteFileRaw($file, u_encode($data));
 }
 
 
 =item
 C<< $lines_ref = Bootloader::FileIO->WriteFileRaw($file, $data); >>
 
-Writes file to disk.
+Writes $data to $file.
 Returns 1 on success, 0 otherwise.
 
 =cut
@@ -188,4 +266,83 @@
 }
 
 
+# Convert binary data into well-formed utf8 data.
+#
+# We are not allowed to use Encode, so we do our own malformed-utf8 handling
+# here and remap invalid 8-bit input data to codepoint U+101000-U1010FF
+# which is within a private-use range.
+#
+# u_encode() reverses this process.
+#
+# Returns a ref to an array that holds the decoded string and a tag
+# indicating whether it was valid utf8.
+#
+sub u_decode
+{
+  my $s = $_[0];
+  my $l = length $s;
+  my $p = 0;
+  my $u;
+  my $ok;
+
+  # if it's valid utf8, just return
+  return [ $s, 1 ] if utf8::decode($s);
+
+  no warnings 'utf8';
+
+  # what we do here is processing the utf8 data step-by-step using perl's
+  # unpack() function
+  # if we find a non-utf8 sequence, we return the first byte and map it to
+  # $utf8_remap_codepoint + X
+  while($p < $l) {
+    # add bytes until unpack() says it's utf8; give up at 8 bytes length
+    for($ok = 0, my $i = 1; $i < 8 && $i <= $l - $p; $i++) {
+      my $x = (unpack "C0U*", substr($s, $p, $i))[0];
+      if($x) {
+        # ok: return unicode char and continue
+        $u .= pack "U", $x;
+        $p += $i;
+        $ok = 1;
+        last;
+      }
+    }
+
+    if(!$ok) {
+      # not ok: return one byte and continue
+      $u .= pack("U", $utf8_remap_codepoint + ord(substr $s, $p, 1));
+      $p++;
+    }
+  }
+
+  return [ $u, 0 ];
+}
+
+
+# Convert utf8 data back to binary data.
+#
+# This is the reverse of u_decode().
+#
+sub u_encode
+{
+  my $x;
+
+  for (unpack "U*", $_[0]) {
+    if(
+      $_ >= $utf8_remap_codepoint &&
+      $_ <= $utf8_remap_codepoint + 0xff
+    ) {
+      $x .= chr($_ - $utf8_remap_codepoint);
+    }
+    else {
+      my $z = pack "U", $_;
+      # important: ensure perl removes its internal utf8 tag
+      utf8::encode($z);
+      $x .= $z;
+    }
+  }
+
+  return $x;
+}
+
+
 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/perl-Bootloader-0.831/src/Logger.pm 
new/perl-Bootloader-0.832/src/Logger.pm
--- old/perl-Bootloader-0.831/src/Logger.pm     2015-03-26 12:58:27.000000000 
+0100
+++ new/perl-Bootloader-0.832/src/Logger.pm     2015-04-22 13:59:11.000000000 
+0200
@@ -72,6 +72,7 @@
     my $tmp = select $f;
     $| = 1;
     select $tmp;
+    binmode $f, ':utf8';
     $self->{logger}{log_fh} = $f;
   }
 
@@ -80,10 +81,12 @@
     my $tmp = select $f;
     $| = 1;
     select $tmp;
+    binmode $f, ':utf8';
     $self->{logger}{log_fh_yast} = $f;
   }
 
   if(!$self->{logger}{log_fh} && open my $f, ">&STDERR") {
+    binmode $f, ':utf8';
     $self->{logger}{log_fh} = $f;
     $self->{logger}{log_is_stderr} = 1;
   }


Reply via email to