Mercurial > bins
view debian/patches/18_bins-memory-leak @ 6:3021deef1599
Encoding related fixes
* chomp encoding string
* reformat else (seems someone hacked it in)
* debug print encoding
* do not use :utf8 binmode ("re-encode") on written file if the input is _already_ UTF-8
author | Peter Gervai <grin@grin.hu> |
---|---|
date | Thu, 16 Oct 2008 00:02:14 +0200 |
parents | c5749e43b1d7 |
children |
line wrap: on
line source
#! /bin/sh /usr/share/dpatch/dpatch-run ## 18_bins-1.1.29-memory-leak.dpatch by <rousseau@localhost.localdomain> ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: No description. @DPATCH@ --- bins-1.1.29.orig/bins +++ bins-1.1.29/bins @@ -449,13 +449,13 @@ $defaultConfig{fileActiveSizeNames} = \@fileActiveSizeNames; # Fields to display (in the list order) under the picture. These -# fields are defined in the getFields function below. +# fields are defined in the %fields hash below. my @mainFields = ("description", "people", "location", "date", "event", "comment"); # Fields to display (in the list order) in the details page. These -# fields are in the getFields function below. +# fields are in the %fields hash below. my @secondaryFields = ( # DigiCam _("BINS-SECTION DigiCam Info"), @@ -519,7 +519,6 @@ "BINS-SECTION end", # close the last section ); -sub getFields { # The key is the string used as the name in the picture # description file. # Name corresponds to the string displayed under the picture. @@ -527,9 +526,8 @@ # found in some JPEG images. # The value of the EXIF structure is only used if no value # is present in the picture description file. - # Transform is a Perl operator used to convert an exif value - # to the desired format to display. It is evaluated as - # normal Perl code and the result has to be in $_. + # Note: See also postProcessHashArrays() for dateString related + # items my %fields = ( "title" => @@ -547,12 +545,6 @@ "date" => { Name => _("Date"), EXIF => "DateTimeOriginal", - Transform => '$_ = local2html(strftime $configHash->{dateString}, localtime str2time "$_") if str2time "$_"', - # Alternatively, you could use regex substitution: - # English version is yyyy:mm:dd hh:mm:ss to yyyy/mm/dd hh:mm:ss : - # Transform => 's%^(\\d+):(\\d+):(\\d+) (.*)$%\$1/\$2/\$3 \$4%', - # French version is yyyy:mm:dd hh:mm:ss to dd/mm/yyyy hh:mm:ss : - # Transform => 's%^(\d+):(\d+):(\d+) (.*)$%$3/$2/$1 $4%', }, "event" => @@ -822,8 +814,6 @@ Tip => _("Indicates the image sensor type on the camera or input device."), }, ); - return \%fields; -} my @priorityExifTags = (); # the field in this list are taken from # the desc file, even if they are present @@ -847,10 +837,10 @@ }); $defaultConfig{colorsSubs} = \%colorsSubs; -sub getIntlSubs{ - my $configHash = shift; - # Strings to translate in the HTML template pages (if I18N is used) - my %intlSubs = ( STRING_THUMBNAILS => _("thumbnails"), +# Strings to translate in the HTML template pages (if I18N is used) +# Note: See also postProcessHashArrays() for dateString related +# items +my %intlSubs = ( STRING_THUMBNAILS => _("thumbnails"), STRING_IMAGELIST => _("Image List"), STRING_HOME => _("Home"), STRING_ALBUM => _("Album"), @@ -882,13 +872,11 @@ BINS_VERSION => "1.1.29", ENCODING => $defaultConfig{htmlEncoding}, GENERATED_DATE => _("on "). - local2html(strftime($configHash->{dateString}, + local2html(strftime($defaultConfig{dateString}, localtime)), BINS_ID => '<!--$Id: bins,v 1.182 2005/08/22 23:52:33 jerome Exp $-->', ); - return \%intlSubs; -} # @knownImageExtentions defines file extensions that BINS can handle as # input image. BINS _should_ handle all input format of ImageMagick @@ -925,6 +913,7 @@ sub beVerboseN; sub min; sub readConfigFile; +sub postProcessHashArrays; sub fileSize; sub generateAlbumPages; sub filenameToPreviewName; @@ -942,8 +931,6 @@ sub trimWhiteSpace; sub stringToBool; sub ignoreSet; -sub getFields; -sub getIntlSubs; sub generateThumbnailPages; sub generateThumbEntry; @@ -1015,6 +1002,27 @@ return \%option; } +# process hash arrays after reading config file +# a non-default value of dateString might have been read from the +# configuration file, so the proper values must be inserted into the +# %fields and %intlSubs hash arrays +sub postProcessHashArrays { + my $configHash = shift; + + # Transform is a Perl operator used to convert an exif value + # to the desired format to display. It is evaluated as + # normal Perl code and the result has to be in $_. + $fields{date}{Transform} = + '$_ = local2html(strftime $configHash->{dateString}, localtime str2time "$_")'; + # Alternatively, you could use regex substitution: + # English version is yyyy:mm:dd hh:mm:ss to yyyy/mm/dd hh:mm:ss : + # Transform => 's%^(\\d+):(\\d+):(\\d+) (.*)$%\$1/\$2/\$3 \$4%', + # French version is yyyy:mm:dd hh:mm:ss to dd/mm/yyyy hh:mm:ss : + # Transform => 's%^(\d+):(\d+):(\d+) (.*)$%$3/$2/$1 $4%', + $intlSubs{GENERATED_DATE} = _("on "). + local2html(strftime($configHash->{dateString}, localtime)), +} + # process command line arguments after reading config file sub postProcessArgs { my $option = shift; @@ -1272,6 +1280,9 @@ #?read configurations files my $defaultConfig = readConfigFile(\%defaultConfig); + # post process %fields and %intlSubs hash arrays + postProcessHashArrays($defaultConfig); + # post process command line args after reading config files postProcessArgs($options, $defaultConfig); @@ -2962,7 +2973,7 @@ $sectionTitle = $tagName; $sectionTitle =~ s/^BINS-SECTION //; }else{ - $tagValue = getFields($configHash)->{$tagName}; + $tagValue = $fields{$tagName}; if ($imageInfo->{$tagName}) { my %row = (FIELD_NAME => $tagValue->{'Name'}, FIELD_VALUE => local2html($imageInfo->{$tagName}) @@ -3017,7 +3028,7 @@ $subs_hash{CUSTOM_CSS} = $configHash->{customStyleSheet}; my @array; - push @array, {NAV_NAME => getIntlSubs($configHash)->{STRING_BACKTOTHEIMAGE}, + push @array, {NAV_NAME => $intlSubs{STRING_BACKTOTHEIMAGE}, NAV_LINK => "javascript:history.back();", NAV_ICON => "back.png", NAV_ID => "back"}; @@ -3674,7 +3685,7 @@ if (${%$hashref}{$tagName}) { my $value=${%$hashref}{$tagName}; $value =~ s/'/'/g ; # in case it's used in javascript code - push @descTable, {DESC_FIELD_NAME => getFields($configHash)->{$tagName}->{'Name'}, + push @descTable, {DESC_FIELD_NAME => $fields{$tagName}->{'Name'}, DESC_FIELD_VALUE => $value, }; } @@ -3819,7 +3830,7 @@ %{$templateParameters} = (%{$templateParameters}, %{$configHash->{colorsSubs}{$configHash->{colorStyle}}}, - %{getIntlSubs($configHash)}, + %intlSubs, ); # open the html template @@ -3951,7 +3962,7 @@ && $element->{Name} eq "field") { $fieldName = $element->{Attributes}{'name'}; $fieldValue = ""; - if (grep (/^$fieldName$/, keys(%{getFields($configHash)}))) { + if (grep (/^$fieldName$/, keys(%fields))) { beVerbose(" Reading field '$fieldName':", 3); foreach my $characters (@{$element->{Contents}}) { #if (UNIVERSAL::isa($characters, 'XML::Grove::Characters')) { @@ -4377,13 +4388,13 @@ } # add value to desc Hash if field is void - foreach my $field (keys(%{getFields($configHash)})) { - my $fieldExif = getFields($configHash)->{$field}->{'EXIF'}; + foreach my $field (keys(%fields)) { + my $fieldExif = $fields{$field}->{'EXIF'}; if ((! $descHash->{$field}) && $fieldExif && $exifHash->{$fieldExif}) { beVerboseN(" Using '$field' from EXIF data: ". $exifHash->{$fieldExif}, 3); - my $func = getFields($configHash)->{$field}->{'Transform'}; + my $func = $fields{$field}->{'Transform'}; if ($func) { $_ = $exifHash->{$fieldExif}; beVerbose(" Evaluating '$func' from '$_'", 4);