File: 0005-Workaround-for-perl-5.24-no-longer-allowing-syswrite.patch

package info (click to toggle)
liblog-log4perl-perl 1.48-1%2Bdeb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 1,900 kB
  • sloc: perl: 6,449; makefile: 9
file content (99 lines) | stat: -rw-r--r-- 3,070 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
From: mschilli <github@perlmeister.com>
Date: Sun, 19 Feb 2017 13:22:59 -0800
Subject: Workaround for perl-5.24 no longer allowing syswrite+utf8 (see
 https://github.com/mschilli/log4perl/issues/78)
Origin: https://github.com/mschilli/log4perl/commit/e8d8f6600312670a156399e220998dbd0832915f
Bug: https://github.com/mschilli/log4perl/issues/78
Bug-Debian: https://bugs.debian.org/855894

---
 lib/Log/Log4perl/Appender/File.pm | 39 ++++++++++++++++++++++++++++++++++-----
 1 file changed, 34 insertions(+), 5 deletions(-)

diff --git a/lib/Log/Log4perl/Appender/File.pm b/lib/Log/Log4perl/Appender/File.pm
index 8b9dfd8..abdce69 100755
--- a/lib/Log/Log4perl/Appender/File.pm
+++ b/lib/Log/Log4perl/Appender/File.pm
@@ -11,6 +11,7 @@ use Fcntl;
 use File::Path;
 use File::Spec::Functions qw(splitpath);
 use constant _INTERNAL_DEBUG => 0;
+use constant SYSWRITE_UTF8_OK => ( $] < 5.024 );
 
 ##################################################
 sub new {
@@ -26,7 +27,7 @@ sub new {
         syswrite  => 0,
         mode      => "append",
         binmode   => undef,
-        utf8      => undef,
+        utf8      => 0,
         recreate  => 0,
         recreate_check_interval => 30,
         recreate_check_signal   => undef,
@@ -62,12 +63,30 @@ sub new {
         close FILE;
     }
 
+    $self->{syswrite_encoder} = $self->syswrite_encoder();
+
         # This will die() if it fails
     $self->file_open() unless $self->{create_at_logtime};
 
     return $self;
 }
 
+##################################################
+sub syswrite_encoder {
+##################################################
+    my($self) = @_;
+
+    if(!SYSWRITE_UTF8_OK and $self->{syswrite} and $self->{utf8}) {
+        if( eval { require Encode } ) {
+            return sub { Encode::encode_utf8($_[0]) };
+        } else {
+            die "syswrite and utf8 requires Encode.pm";
+        }
+    }
+
+    return undef;
+}
+
 ##################################################
 sub filename {
 ##################################################
@@ -163,8 +182,11 @@ sub file_open {
         binmode $self->{fh}, $self->{binmode};
     }
 
-    if (defined $self->{utf8}) {
-        binmode $self->{fh}, ":utf8";
+    if ($self->{utf8}) {
+          # older perls can handle syswrite+utf8 just fine
+        if(SYSWRITE_UTF8_OK or !$self->{syswrite}) {
+            binmode $self->{fh}, ":utf8";
+        }
     }
 
     if(defined $self->{header_text}) {
@@ -269,8 +291,15 @@ sub log {
     my $fh = $self->{fh};
 
     if($self->{syswrite}) {
-       defined (syswrite $fh, $params{message}) or
-           die "Cannot syswrite to '$self->{filename}': $!";
+         my $rc = 
+           syswrite( $fh, 
+               $self->{ syswrite_encoder } ?
+                 $self->{ syswrite_encoder }->($params{message}) :
+                 $params{message} );
+
+         if(!$rc) {
+             die "Cannot syswrite to '$self->{filename}': $!";
+         }
     } else {
         print $fh $params{message} or
             die "Cannot write to '$self->{filename}': $!";
-- 
2.15.0