[interchange-cvs] interchange - racke modified 3 files
interchange-cvs at icdevgroup.org
interchange-cvs at icdevgroup.org
Mon Apr 27 10:00:17 UTC 2009
User: racke
Date: 2009-04-27 10:00:17 GMT
Modified: . WHATSNEW-5.7
Modified: lib/Vend Dispatch.pm File.pm
Log:
Encoding and fallback for reading/writing files while in UTF-8 mode.
Revision Changes Path
2.40 interchange/WHATSNEW-5.7
rev 2.40, prev_rev 2.39
Index: WHATSNEW-5.7
===================================================================
RCS file: /var/lib/cvs/interchange/WHATSNEW-5.7,v
retrieving revision 2.39
retrieving revision 2.40
diff -u -r2.39 -r2.40
--- WHATSNEW-5.7 16 Apr 2009 16:58:31 -0000 2.39
+++ WHATSNEW-5.7 27 Apr 2009 10:00:17 -0000 2.40
@@ -103,6 +103,8 @@
would break sessions up into separate directories instead of putting all
sessions in a huge directory.
+* Encoding and fallback for reading/writing files while in UTF-8 mode.
+
Payment
-------
1.112 interchange/lib/Vend/Dispatch.pm
rev 1.112, prev_rev 1.111
Index: Dispatch.pm
===================================================================
RCS file: /var/lib/cvs/interchange/lib/Vend/Dispatch.pm,v
retrieving revision 1.111
retrieving revision 1.112
diff -u -r1.111 -r1.112
--- Dispatch.pm 6 Apr 2009 12:23:22 -0000 1.111
+++ Dispatch.pm 27 Apr 2009 10:00:17 -0000 1.112
@@ -1,6 +1,6 @@
# Vend::Dispatch - Handle Interchange page requests
#
-# $Id: Dispatch.pm,v 1.111 2009-04-06 12:23:22 markj Exp $
+# $Id: Dispatch.pm,v 1.112 2009-04-27 10:00:17 racke Exp $
#
# Copyright (C) 2002-2009 Interchange Development Group
# Copyright (C) 2002 Mike Heins <mike at perusion.net>
@@ -26,7 +26,7 @@
package Vend::Dispatch;
use vars qw($VERSION);
-$VERSION = substr(q$Revision: 1.111 $, 10);
+$VERSION = substr(q$Revision: 1.112 $, 10);
use POSIX qw(strftime);
use Vend::Util;
@@ -370,7 +370,10 @@
Content-Type: $CGI::values{mv_content_type}
Content-Length: $size
EOF
- ::response( Vend::Util::readfile ($CGI::values{mv_data_file}) );
+ ::response(
+ Vend::Util::readfile($CGI::values{mv_data_file}, undef, undef,
+ {encoding => 'raw'}));
+
return 0;
}
2.31 interchange/lib/Vend/File.pm
rev 2.31, prev_rev 2.30
Index: File.pm
===================================================================
RCS file: /var/lib/cvs/interchange/lib/Vend/File.pm,v
retrieving revision 2.30
retrieving revision 2.31
diff -u -r2.30 -r2.31
--- File.pm 22 Mar 2009 19:32:31 -0000 2.30
+++ File.pm 27 Apr 2009 10:00:17 -0000 2.31
@@ -1,6 +1,6 @@
# Vend::File - Interchange file functions
#
-# $Id: File.pm,v 2.30 2009-03-22 19:32:31 mheins Exp $
+# $Id: File.pm,v 2.31 2009-04-27 10:00:17 racke Exp $
#
# Copyright (C) 2002-2008 Interchange Development Group
# Copyright (C) 1996-2002 Red Hat, Inc.
@@ -61,13 +61,18 @@
use File::Copy;
use subs qw(logError logGlobal);
use vars qw($VERSION @EXPORT @EXPORT_OK $errstr);
-$VERSION = substr(q$Revision: 2.30 $, 10);
+$VERSION = substr(q$Revision: 2.31 $, 10);
sub writefile {
my($file, $data, $opt) = @_;
+ my($encoding, $fallback);
- my $is_utf8;
- $is_utf8 = is_utf8(ref $data ? $$data : $data) if $::Variable->{MV_UTF8};
+ if ($::Variable->{MV_UTF8}) {
+ $encoding = $opt->{encoding} ||= 'utf-8';
+ undef $encoding if $encoding eq 'raw';
+ $fallback = $opt->{fallback};
+ $fallback = Encode::PERLQQ unless defined $fallback;
+ }
$file = ">>$file" unless $file =~ /^[|>]/;
if (ref $opt and $opt->{umask}) {
@@ -91,7 +96,11 @@
}
# We have checked for beginning > or | previously
open(MVLOGDATA, $file) or die "open\n";
- binmode(MVLOGDATA, ":utf8") if $is_utf8;
+ if ($encoding) {
+ local $PerlIO::encoding::fallback = $fallback;
+ binmode(MVLOGDATA, ":encoding($encoding)");
+ }
+
lockfile(\*MVLOGDATA, 1, 1) or die "lock\n";
seek(MVLOGDATA, 0, 2) or die "seek\n";
if(ref $data) {
@@ -105,7 +114,10 @@
else {
my (@args) = grep /\S/, Text::ParseWords::shellwords($file);
open(MVLOGDATA, "|-") || exec @args;
- binmode(MVLOGDATA, ":utf8") if $is_utf8;
+ if ($encoding) {
+ local $PerlIO::encoding::fallback = $fallback;
+ binmode(MVLOGDATA, ":encoding($encoding)");
+ }
if(ref $data) {
print(MVLOGDATA $$data) or die "pipe to\n";
}
@@ -181,10 +193,19 @@
# the file from the database.
sub readfile {
- my($ifile, $no, $loc) = @_;
- my($contents);
+ my($ifile, $no, $loc, $opt) = @_;
+ my($contents,$encoding,$fallback);
local($/);
+ $opt ||= {};
+
+ if ($::Variable->{MV_UTF8}) {
+ $encoding = $opt->{encoding} ||= 'utf-8';
+ $fallback = $opt->{fallback};
+ $fallback = Encode::PERLQQ unless defined $fallback;
+ undef $encoding if $encoding eq 'raw';
+ }
+
unless(allowed_file($ifile)) {
log_file_violation($ifile);
return undef;
@@ -204,6 +225,7 @@
}
if(! $file) {
+
$contents = readfile_db($ifile);
return undef unless defined $contents;
}
@@ -212,7 +234,12 @@
$Global::Variable->{MV_FILE} = $file;
binmode(READIN) if $Global::Windows;
- binmode(READIN, ":utf8") if $::Variable->{MV_UTF8};
+
+ if ($encoding) {
+ local $PerlIO::encoding::fallback = Encode::PERLQQ;
+ binmode(READIN, ":encoding($encoding)");
+ }
+
undef $/;
$contents = <READIN>;
close(READIN);
More information about the interchange-cvs
mailing list