From 2908ab0a20d5a1153325af3a81949674a3efdc32 Mon Sep 17 00:00:00 2001
From: Guillem Jover <guillem@debian.org>
Date: Sun, 16 Feb 2014 02:35:44 +0100
Subject: [PATCH 3/4] Add support for control.tar and control.tar.xz

---
 udpkg.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/udpkg.c b/udpkg.c
index ef6bdf7..1715222 100644
--- a/udpkg.c
+++ b/udpkg.c
@@ -19,6 +19,7 @@ static int force_configure = 0;
 static int loadtemplate = 1;
 
 static const char *data_member_base = "data.tar";
+static const char *control_member_base = "control.tar";
 
 /* 
  * Main udpkg implementation routines
@@ -382,6 +383,7 @@ static int dpkg_unpackcontrol(struct package_t *pkg)
 	char *p;
 	char buf[1024], buf2[1024];
 	FILE *f;
+	compression_type compression_type;
 
 	p = strrchr(pkg->file, '/');
 	if (p) p++; else p = pkg->file;
@@ -390,6 +392,10 @@ static int dpkg_unpackcontrol(struct package_t *pkg)
 	*p = 0;
 	p = pkg->package;
 
+	compression_type = get_compression_type(pkg, control_member_base);
+	if (compression_type == unknown_compression)
+		return 1;
+
 	cwd = getcwd(0, 0);
 	snprintf(buf, sizeof(buf), "%s%s", DPKGCIDIR, pkg->package);
 	DPRINTF("dir = %s\n", buf);
@@ -403,8 +409,10 @@ static int dpkg_unpackcontrol(struct package_t *pkg)
 		FPRINTF(stderr, "chdir %s: %s\n", buf, strerror(errno));
 		return 1;
 	}
-	snprintf(buf, sizeof(buf), "ar -p %s control.tar.gz|tar -xzf -",
-		pkg->file);
+	snprintf(buf, sizeof(buf), "ar -p %s %s%s|%s|tar -xf -",
+		pkg->file, control_member_base,
+		compression_extension(compression_type),
+		decompression_tool(compression_type));
 	if ((r = di_exec_shell_log(buf)) != 0)
 	{
 		FPRINTF(stderr, "%s exited with status %d\n", buf, r);
@@ -548,10 +556,18 @@ static int dpkg_fields(struct package_t *pkg)
 {  
 	char *command;
 	int ret;
+	compression_type compression_type;
 
 	reqarg(pkg);
 
-	command = xasprintf("ar -p %s control.tar.gz|tar -xzOf - ./control", pkg->file);
+	compression_type = get_compression_type(pkg, control_member_base);
+	if (compression_type == unknown_compression)
+		return 1;
+
+	command = xasprintf("ar -p %s %s%s|%s|tar -xOf - ./control",
+		pkg->file, control_member_base,
+		compression_extension(compression_type),
+		decompression_tool(compression_type));
 	ret = system(command);
 	free(command);
 	return ret;
-- 
1.9.0.rc3.244.g3497008

