Module: wine
Branch: master
Commit: 65a82cb1802386795d8a3b134aa918cb3af74cc9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=65a82cb1802386795d8a3b134…
Author: Alexandre Julliard <julliard(a)winehq.org>
Date: Thu May 6 18:23:38 2010 +0200
libwine: Download Unicode data files from unicode.org as needed in cpmap.pl.
---
libs/wine/cpmap.pl | 68 ++++++++++++++++++++++++++++++++--------------------
1 files changed, 42 insertions(+), 26 deletions(-)
diff --git a/libs/wine/cpmap.pl b/libs/wine/cpmap.pl
index 69aae01..6cf7d7e 100755
--- a/libs/wine/cpmap.pl
+++ b/libs/wine/cpmap.pl
@@ -21,15 +21,12 @@
use strict;
-# base directory for ftp.unicode.org files
-my $BASEDIR = "ftp.unicode.org/Public/";
-my $MAPPREFIX = $BASEDIR . "MAPPINGS/";
-
-# UnicodeData file
-my $UNICODEDATA = $BASEDIR . "UNIDATA/UnicodeData.txt";
+# base URLs for www.unicode.org files
+my $MAPPINGS = "http://www.unicode.org/Public/MAPPINGS";
+my $UNIDATA = "http://www.unicode.org/Public/5.0.0/ucd";
# Sort keys file
-my $SORTKEYS = "www.unicode.org/reports/tr10/allkeys.txt";
+my $SORTKEYS = "http://www.unicode.org/reports/tr10/allkeys.txt";
# Defaults mapping
my $DEFAULTS = "./defaults";
@@ -203,6 +200,23 @@ my @compose_table = ();
################################################################
+# fetch a unicode.org file and open it
+sub open_data_file($)
+{
+ my $url = shift;
+ (my $name = $url) =~ s/^.*\///;
+ local *FILE;
+ unless (-f "data/$name")
+ {
+ print "Fetching $url...\n";
+ mkdir "data";
+ !system "wget", "-q", "-O", "data/$name", $url or die "cannot fetch $url";
+ }
+ open FILE, "<data/$name" or die "cannot open data/$name";
+ return *FILE;
+}
+
+################################################################
# read in the defaults file
sub READ_DEFAULTS($)
{
@@ -234,12 +248,12 @@ sub READ_DEFAULTS($)
}
die "Unrecognized line $_\n";
}
+ close DEFAULTS;
# now build mappings from the decomposition field of the Unicode database
- open UNICODEDATA, "$UNICODEDATA" or die "Cannot open $UNICODEDATA";
- print "Loading $UNICODEDATA\n";
- while (<UNICODEDATA>)
+ my $UNICODE_DATA = open_data_file "$UNIDATA/UnicodeData.txt";
+ while (<$UNICODE_DATA>)
{
# Decode the fields ...
my ($code, $name, $cat, $comb, $bidi,
@@ -344,6 +358,7 @@ sub READ_DEFAULTS($)
}
$unicode_defaults[$src] = $dst;
}
+ close $UNICODE_DATA;
# patch the category of some special characters
@@ -360,9 +375,9 @@ sub READ_DEFAULTS($)
sub READ_FILE($)
{
my $name = shift;
- open INPUT,$name or die "Cannot open $name";
+ my $INPUT = open_data_file $name;
- while (<INPUT>)
+ while (<$INPUT>)
{
next if /^\#/; # skip comments
next if /^$/; # skip empty lines
@@ -391,6 +406,7 @@ sub READ_FILE($)
}
die "$name: Unrecognized line $_\n";
}
+ close $INPUT;
}
@@ -485,8 +501,8 @@ sub READ_JIS0208_FILE($)
$cp2uni[0xa1c0] = 0xff3c;
$uni2cp[0xff3c] = 0xa1c0;
- open INPUT, "$name" or die "Cannot open $name";
- while (<INPUT>)
+ my $INPUT = open_data_file $name;
+ while (<$INPUT>)
{
next if /^\#/; # skip comments
next if /^$/; # skip empty lines
@@ -501,6 +517,7 @@ sub READ_JIS0208_FILE($)
}
die "$name: Unrecognized line $_\n";
}
+ close $INPUT;
}
@@ -511,9 +528,8 @@ sub READ_SORTKEYS_FILE()
my @sortkeys = ();
for (my $i = 0; $i < 65536; $i++) { $sortkeys[$i] = [ -1, 0, 0, 0, 0 ] };
- open INPUT, "$SORTKEYS" or die "Cannot open $SORTKEYS";
- print "Loading $SORTKEYS\n";
- while (<INPUT>)
+ my $INPUT = open_data_file $SORTKEYS;
+ while (<$INPUT>)
{
next if /^\#/; # skip comments
next if /^$/; # skip empty lines
@@ -533,7 +549,7 @@ sub READ_SORTKEYS_FILE()
}
die "$SORTKEYS: Unrecognized line $_\n";
}
- close INPUT;
+ close $INPUT;
# compress the keys to 32 bit:
# key 1 to 16 bits, key 2 to 8 bits, key 3 to 4 bits, key 4 to 1 bit
@@ -1206,9 +1222,9 @@ sub handle_bestfit_file($$$)
my ($lb_cur, $lb_end);
my @lb_ranges = ();
- open INPUT,$MAPPREFIX . $filename or die "Cannot open $filename";
+ my $INPUT = open_data_file "$MAPPINGS/$filename" or die "Cannot open $filename";
- while (<INPUT>)
+ while (<$INPUT>)
{
next if /^;/; # skip comments
next if /^\s*$/; # skip empty lines
@@ -1278,7 +1294,7 @@ sub handle_bestfit_file($$$)
}
die "$filename: Unrecognized line $_\n";
}
- close INPUT;
+ close $INPUT;
my $output = sprintf "c_%03d.c", $codepage;
open OUTPUT,">$output.new" or die "Cannot create $output";
@@ -1288,7 +1304,7 @@ sub handle_bestfit_file($$$)
# dump all tables
printf OUTPUT "/* code page %03d (%s) */\n", $codepage, $comment;
- printf OUTPUT "/* generated from %s */\n", $MAPPREFIX . $filename;
+ printf OUTPUT "/* generated from $MAPPINGS/$filename */\n";
printf OUTPUT "/* DO NOT EDIT!! */\n\n";
printf OUTPUT "#include \"wine/unicode.h\"\n\n";
@@ -1310,14 +1326,14 @@ sub HANDLE_FILE(@)
@uni2cp = ();
# symbol codepage file is special
- if ($codepage == 20932) { READ_JIS0208_FILE($MAPPREFIX . $filename); }
+ if ($codepage == 20932) { READ_JIS0208_FILE "$MAPPINGS/$filename"; }
elsif ($codepage == 20127) { fill_20127_codepage(); }
elsif ($filename =~ /\/bestfit/)
{
handle_bestfit_file( $filename, $has_glyphs, $comment );
return;
}
- else { READ_FILE($MAPPREFIX . $filename); }
+ else { READ_FILE "$MAPPINGS/$filename"; }
ADD_DEFAULT_MAPPINGS();
@@ -1331,8 +1347,8 @@ sub HANDLE_FILE(@)
printf OUTPUT "/* code page %03d (%s) */\n", $codepage, $comment;
if ($filename)
{
- printf OUTPUT "/* generated from %s */\n", $MAPPREFIX . $filename;
- printf OUTPUT "/* DO NOT EDIT!! */\n\n";
+ print OUTPUT "/* generated from $MAPPINGS/$filename */\n";
+ print OUTPUT "/* DO NOT EDIT!! */\n\n";
}
else
{
Module: wine
Branch: master
Commit: d07a4868a11a282acafa4cefcf3cac53da82277d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d07a4868a11a282acafa4cefc…
Author: Vincent Povirk <vincent(a)codeweavers.com>
Date: Wed May 5 14:23:12 2010 -0500
ole32: Rewrite transacted storage to be more lazy.
When creating a new transacted storage object (or reverting an
existing one), rather than copy the original storage, we simply create
a "stub directory entry" for the root. As stub entries are accessed,
we fill in their data from the parent and create new stubs for any
linked entries. The streams have copy on write semantics - reads are
from the original entry until a change is made, then we make a copy in
the scratch file.
When committing transacted storages, we have to create a new tree with
the new data so that the storage entry can be modified in one step,
but unmodified sections of the tree can now be shared between the new
tree and the old. An entry can be shared if it and all entries
reachable from it are unmodified. In the trivial case where nothing
has been modified, we don't have to make a new tree at all.
---
dlls/ole32/storage32.c | 792 +++++++++++++++++++++++++++++++++++++++---------
1 files changed, 646 insertions(+), 146 deletions(-)
Diff: http://source.winehq.org/git/wine.git/?a=commitdiff;h=d07a4868a11a282acafa4…