[unshield] 12/30: Import patch for new InstallShield versions from Upstream

Evgeni Golov evgeni at moszumanska.debian.org
Sun Dec 27 11:05:38 UTC 2015


This is an automated email from the git hooks/post-receive script.

evgeni pushed a commit to branch master
in repository unshield.

commit 7b40b9a66c81767d314a1686aac265e1058c3c8e
Author: Evgeni Golov <evgeni at debian.org>
Date:   Sat Mar 3 14:55:55 2012 +0100

    Import patch for new InstallShield versions from Upstream
    
    https://github.com/twogood/unshield/commit/0c81b16e9b73a19e349963af06ede6bc26100b3f
    Closes: #580470
---
 debian/patches/new_installshield_format.patch | 207 ++++++++++++++++++++++++++
 debian/patches/series                         |   1 +
 2 files changed, 208 insertions(+)

diff --git a/debian/patches/new_installshield_format.patch b/debian/patches/new_installshield_format.patch
new file mode 100644
index 0000000..a3aa72b
--- /dev/null
+++ b/debian/patches/new_installshield_format.patch
@@ -0,0 +1,207 @@
+Author: David Eriksson <david+github at 2good.nu>
+Date:   Sat Jan 22 11:25:05 2011 +0000
+
+    Patch from Ignaz Forster. Thanks!
+    
+    More information:
+    
+    http://sourceforge.net/tracker/?func=detail&aid=3163039&group_id=30550&atid=399603
+
+diff --git a/lib/component.c b/lib/component.c
+index a20ed6a..d3e6418 100644
+--- a/lib/component.c
++++ b/lib/component.c
+@@ -40,11 +40,13 @@ UnshieldComponent* unshield_component_new(Header* header, uint32_t offset)
+     case 7:
+     case 8:
+     case 9:
++    case 10:
++    case 11:
++    case 12:
++    case 13:
++    default:
+       p += 0x6b;
+       break;
+-
+-    default:
+-      abort();
+   }
+ 
+   self->file_group_count = READ_UINT16(p); p += 2;
+diff --git a/lib/file.c b/lib/file.c
+index 87b4878..5c4a117 100644
+--- a/lib/file.c
++++ b/lib/file.c
+@@ -77,6 +77,11 @@ static FileDescriptor* unshield_read_file_descriptor(Unshield* unshield, int ind
+     case 7:
+     case 8:
+     case 9:
++    case 10:
++    case 11:
++    case 12:
++    case 13:
++    default:
+       saved_p = p = header->data +
+           header->common.cab_descriptor_offset +
+           header->cab.file_table_offset +
+@@ -117,10 +122,6 @@ static FileDescriptor* unshield_read_file_descriptor(Unshield* unshield, int ind
+ 
+       assert((p - saved_p) == 0x57);
+       break;
+-
+-    default:
+-      unshield_error("Unknown major version: %i", header->major_version);
+-      abort();
+   }
+ 
+   if (!(fd->flags & FILE_COMPRESSED) &&
+@@ -363,6 +364,11 @@ static bool unshield_reader_open_volume(UnshieldReader* reader, int volume)/*{{{
+     case 7:
+     case 8:
+     case 9:
++    case 10:
++    case 11:
++    case 12:
++    case 13:
++    default:
+       {
+         uint8_t six_header[VOLUME_HEADER_SIZE_V6];
+         uint8_t* p = six_header;
+@@ -389,10 +395,6 @@ static bool unshield_reader_open_volume(UnshieldReader* reader, int volume)/*{{{
+         reader->volume_header.last_file_size_compressed_high    = READ_UINT32(p); p += 4;
+       }
+       break;
+-
+-    default:
+-      abort();
+-      goto exit;
+   }
+   
+ #if VERBOSE >= 2
+diff --git a/lib/libunshield.c b/lib/libunshield.c
+index 8819dae..d086533 100644
+--- a/lib/libunshield.c
++++ b/lib/libunshield.c
+@@ -205,7 +205,7 @@ static bool unshield_header_get_file_groups(Header* header)/*{{{*/
+ /**
+   Read all header files
+  */
+-static bool unshield_read_headers(Unshield* unshield)/*{{{*/
++static bool unshield_read_headers(Unshield* unshield, int version)/*{{{*/
+ {
+   int i;
+   bool iterate = true;
+@@ -268,8 +268,20 @@ static bool unshield_read_headers(Unshield* unshield)/*{{{*/
+         unshield_error("Failed to read common header from header file %i", i);
+         goto error;
+       }
+-      
+-      header->major_version = (header->common.version >> 12) & 0xf;
++      if (version != -1)
++      {
++        header->major_version = version;
++      }
++      else if (header->common.version >> 24 == 1)
++      {
++        header->major_version = (header->common.version >> 12) & 0xf;
++      }
++      else if (header->common.version >> 24 == 2)
++      {
++        header->major_version = (header->common.version & 0xffff);
++        if (header->major_version != 0)
++          header->major_version = header->major_version / 100;
++      }
+ 
+ #if 0
+       if (header->major_version < 5)
+@@ -326,6 +338,11 @@ error:
+ 
+ Unshield* unshield_open(const char* filename)/*{{{*/
+ {
++  return unshield_open_force_version(filename, -1);
++}/*}}}*/
++
++Unshield* unshield_open_force_version(const char* filename, int version)/*{{{*/
++{
+   Unshield* unshield = NEW1(Unshield);
+   if (!unshield)
+   {
+@@ -339,7 +356,7 @@ Unshield* unshield_open(const char* filename)/*{{{*/
+     goto error;
+   }
+ 
+-  if (!unshield_read_headers(unshield))
++  if (!unshield_read_headers(unshield, version))
+   {
+     unshield_error("Failed to read header files");
+     goto error;
+diff --git a/lib/libunshield.h b/lib/libunshield.h
+index 06aa040..37a1cc3 100644
+--- a/lib/libunshield.h
++++ b/lib/libunshield.h
+@@ -33,6 +33,7 @@ void unshield_set_log_level(int level);
+  */
+ 
+ Unshield* unshield_open(const char* filename);
++Unshield* unshield_open_force_version(const char* filename, int version);
+ void unshield_close(Unshield* unshield);
+ 
+ /*
+diff --git a/src/unshield.c b/src/unshield.c
+index 74cb605..2dc69f3 100644
+--- a/src/unshield.c
++++ b/src/unshield.c
+@@ -58,6 +58,7 @@ static OVERWRITE overwrite            = OVERWRITE_ASK;
+ static int log_level                  = UNSHIELD_LOG_LEVEL_LOWEST;
+ static int exit_status                = 0;
+ static FORMAT format                  = FORMAT_NEW;
++static int is_version                 = -1;
+ 
+ static bool make_sure_directory_exists(const char* directory)/*{{{*/
+ {
+@@ -108,7 +109,7 @@ static void show_usage(const char* name)
+   fprintf(stderr,
+       "Syntax:\n"
+       "\n"
+-      "\t%s [-c COMPONENT] [-d DIRECTORY] [-D LEVEL] [-g GROUP] [-GhlOrV] c|g|l|t|x CABFILE\n"
++      "\t%s [-c COMPONENT] [-d DIRECTORY] [-D LEVEL] [-g GROUP] [-i VERSION] [-GhlOrV] c|g|l|t|x CABFILE\n"
+       "\n"
+       "Options:\n"
+       "\t-c COMPONENT  Only list/extract this component\n"
+@@ -120,6 +121,7 @@ static void show_usage(const char* name)
+       "\t                3 - Errors, warnings and debug messages\n"
+       "\t-g GROUP      Only list/extract this file group\n"
+       "\t-h            Show this help message\n"
++      "\t-i VERSION    Force InstallShield version number (don't autodetect)\n"
+       "\t-j            Junk paths (do not make directories)\n"
+       "\t-L            Make file and directory names lowercase\n"
+       "\t-O            Use old compression\n"
+@@ -152,7 +154,7 @@ static bool handle_parameters(
+ {
+ 	int c;
+ 
+-	while ((c = getopt(argc, argv, "c:d:D:g:hjLnoOrV")) != -1)
++	while ((c = getopt(argc, argv, "c:d:D:g:hi:jLnoOrV")) != -1)
+ 	{
+ 		switch (c)
+     {
+@@ -172,6 +174,10 @@ static bool handle_parameters(
+         file_group_name = optarg;
+         break;
+ 
++      case 'i':
++        is_version = atoi(optarg);
++        break;
++
+       case 'j':
+         junk_paths = true;
+         break;
+@@ -532,7 +538,7 @@ int main(int argc, char** argv)
+ 
+   cabfile = argv[last_optind];
+ 
+-  unshield = unshield_open(cabfile);
++  unshield = unshield_open_force_version(cabfile, is_version);
+   if (!unshield)
+   {
+     fprintf(stderr, "Failed to open %s as an InstallShield Cabinet File\n", cabfile);
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..feb7ce8
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1 @@
+new_installshield_format.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/unshield.git



More information about the Pkg-games-commits mailing list