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/'/&#39;/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);