summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMystery Man 535 <uid535@mandriva.org>2002-12-03 20:02:29 +0000
committerMystery Man 535 <uid535@mandriva.org>2002-12-03 20:02:29 +0000
commit6eb04547105e92f777b167c83d9cf2113b84b941 (patch)
tree9c89e726365ca895940a9f7e0be3a1bac274dc01
parent289a674b450b2ea2ddbd02577c88d8db44e02403 (diff)
downloaddrakx-backup-do-not-use-6eb04547105e92f777b167c83d9cf2113b84b941.tar
drakx-backup-do-not-use-6eb04547105e92f777b167c83d9cf2113b84b941.tar.gz
drakx-backup-do-not-use-6eb04547105e92f777b167c83d9cf2113b84b941.tar.bz2
drakx-backup-do-not-use-6eb04547105e92f777b167c83d9cf2113b84b941.tar.xz
drakx-backup-do-not-use-6eb04547105e92f777b167c83d9cf2113b84b941.zip
workaround perl sprintf bug when some parameters are utf8 and some not
-rw-r--r--perl-install/c/stuff.xs.pl26
-rw-r--r--perl-install/common.pm9
2 files changed, 34 insertions, 1 deletions
diff --git a/perl-install/c/stuff.xs.pl b/perl-install/c/stuff.xs.pl
index 60eb94b92..b1ec93bd2 100644
--- a/perl-install/c/stuff.xs.pl
+++ b/perl-install/c/stuff.xs.pl
@@ -520,6 +520,32 @@ iconv(s, from_charset, to_charset)
OUTPUT:
RETVAL
+int
+is_tagged_utf8(s)
+ SV *s
+ CODE:
+ RETVAL = SvUTF8(s);
+ OUTPUT:
+ RETVAL
+
+void
+set_tagged_utf8(s)
+ SV *s
+ CODE:
+ SvUTF8_on(s);
+
+void
+upgrade_utf8(s)
+ SV *s
+ CODE:
+ sv_utf8_upgrade(s);
+
+void
+unset_tagged_utf8(s)
+ SV *s
+ CODE:
+ SvUTF8_off(s);
+
char *
standard_charset()
CODE:
diff --git a/perl-install/common.pm b/perl-install/common.pm
index 0e431cbe4..ce86aa4a6 100644
--- a/perl-install/common.pm
+++ b/perl-install/common.pm
@@ -25,9 +25,16 @@ $SECTORSIZE = 512;
#-#####################################################################################
+sub sprintf_fixutf8 {
+ my $need_upgrade;
+ $need_upgrade |= to_bool(c::is_tagged_utf8($_)) + 1 foreach @_;
+ if ($need_upgrade == 3) { c::upgrade_utf8($_) foreach @_ };
+ sprintf shift, @_;
+}
+
sub N {
my $s = shift @_; my $t = translate($s);
- sprintf $t, @_;
+ sprintf_fixutf8 $t, @_;
}
sub N_ { $_[0] }