The following commit has been merged in the master branch:
commit e919b52fa6702d6c32d11774723716f41054acc8
Author: Guillem Jover <[email protected]>
Date:   Tue Nov 22 06:50:43 2011 +0100

    libdpkg: Switch compressor to take a parameters struct

diff --git a/dpkg-deb/build.c b/dpkg-deb/build.c
index 4247d38..d2bec9d 100644
--- a/dpkg-deb/build.c
+++ b/dpkg-deb/build.c
@@ -475,7 +475,12 @@ do_build(const char *const *argv)
   /* And run gzip to compress our control archive. */
   c2 = subproc_fork();
   if (!c2) {
-    compress_filter(compressor_type_gzip, p1[0], gzfd, 9, _("control member"));
+    struct compress_params params;
+
+    params.type = compressor_type_gzip;
+    params.level = 9;
+
+    compress_filter(&params, p1[0], gzfd, _("control member"));
     exit(0);
   }
   close(p1[0]);
@@ -544,7 +549,7 @@ do_build(const char *const *argv)
   c2 = subproc_fork();
   if (!c2) {
     close(p1[1]);
-    compress_filter(compressor, p2[0], gzfd, compress_level, _("data member"));
+    compress_filter(&compress_params, p2[0], gzfd, _("data member"));
     exit(0);
   }
   close(p2[0]);
@@ -589,7 +594,7 @@ do_build(const char *const *argv)
     char datamember[16 + 1];
 
     sprintf(datamember, "%s%s", DATAMEMBER,
-            compressor_get_extension(compressor));
+            compressor_get_extension(compress_params.type));
 
     if (lseek(gzfd, 0, SEEK_SET))
       ohshite(_("failed to rewind temporary file (%s)"), _("data member"));
diff --git a/dpkg-deb/dpkg-deb.h b/dpkg-deb/dpkg-deb.h
index 080a529..4b2a40e 100644
--- a/dpkg-deb/dpkg-deb.h
+++ b/dpkg-deb/dpkg-deb.h
@@ -39,8 +39,7 @@ void extracthalf(const char *debar, const char *dir,
                  const char *taroption, int admininfo);
 
 extern const char* showformat;
-extern enum compressor_type compressor;
-extern int compress_level;
+extern struct compress_params compress_params;
 
 #define ARCHIVEVERSION         "2.0"
 
diff --git a/dpkg-deb/main.c b/dpkg-deb/main.c
index d487eb5..6d52bea 100644
--- a/dpkg-deb/main.c
+++ b/dpkg-deb/main.c
@@ -134,8 +134,10 @@ static const char printforhelp[] =
 
 int debugflag=0, nocheckflag=0, oldformatflag=BUILDOLDPKGFORMAT;
 int opt_verbose = 0;
-enum compressor_type compressor = compressor_type_gzip;
-int compress_level = -1;
+struct compress_params compress_params = {
+  .type = compressor_type_gzip,
+  .level = -1,
+};
 
 static void
 set_compress_level(const struct cmdinfo *cip, const char *value)
@@ -150,14 +152,14 @@ set_compress_level(const struct cmdinfo *cip, const char 
*value)
   if (level < 0 || level > 9)
     badusage(_("invalid compression level for -%c: %ld'"), cip->oshort, level);
 
-  compress_level = level;
+  compress_params.level = level;
 }
 
 static void
 setcompresstype(const struct cmdinfo *cip, const char *value)
 {
-  compressor = compressor_find_by_name(value);
-  if (compressor == compressor_type_unknown)
+  compress_params.type = compressor_find_by_name(value);
+  if (compress_params.type == compressor_type_unknown)
     ohshit(_("unknown compression type `%s'!"), value);
 }
 
diff --git a/lib/dpkg/compress.c b/lib/dpkg/compress.c
index 0b8d0dd..59ffa94 100644
--- a/lib/dpkg/compress.c
+++ b/lib/dpkg/compress.c
@@ -77,7 +77,8 @@ struct compressor {
        const char *name;
        const char *extension;
        int default_level;
-       void (*compress)(int fd_in, int fd_out, int level, const char *desc);
+       void (*compress)(int fd_in, int fd_out, struct compress_params *params,
+                        const char *desc);
        void (*decompress)(int fd_in, int fd_out, const char *desc);
 };
 
@@ -92,7 +93,7 @@ decompress_none(int fd_in, int fd_out, const char *desc)
 }
 
 static void
-compress_none(int fd_in, int fd_out, int compress_level, const char *desc)
+compress_none(int fd_in, int fd_out, struct compress_params *params, const 
char *desc)
 {
        fd_fd_copy(fd_in, fd_out, -1, _("%s: compression"), desc);
 }
@@ -145,14 +146,14 @@ decompress_gzip(int fd_in, int fd_out, const char *desc)
 }
 
 static void
-compress_gzip(int fd_in, int fd_out, int compress_level, const char *desc)
+compress_gzip(int fd_in, int fd_out, struct compress_params *params, const 
char *desc)
 {
        char buffer[DPKG_BUFFER_SIZE];
        char combuf[6];
        int z_errnum;
        gzFile gzfile;
 
-       snprintf(combuf, sizeof(combuf), "w%d", compress_level);
+       snprintf(combuf, sizeof(combuf), "w%d", params->level);
        gzfile = gzdopen(fd_out, combuf);
        if (gzfile == NULL)
                ohshit(_("%s: error binding output to gzip stream"), desc);
@@ -196,11 +197,11 @@ decompress_gzip(int fd_in, int fd_out, const char *desc)
 }
 
 static void
-compress_gzip(int fd_in, int fd_out, int compress_level, const char *desc)
+compress_gzip(int fd_in, int fd_out, struct compress_params *params, const 
char *desc)
 {
        char combuf[6];
 
-       snprintf(combuf, sizeof(combuf), "-c%d", compress_level);
+       snprintf(combuf, sizeof(combuf), "-c%d", params->level);
        fd_fd_filter(fd_in, fd_out, desc, GZIP, combuf, NULL);
 }
 #endif
@@ -253,14 +254,14 @@ decompress_bzip2(int fd_in, int fd_out, const char *desc)
 }
 
 static void
-compress_bzip2(int fd_in, int fd_out, int compress_level, const char *desc)
+compress_bzip2(int fd_in, int fd_out, struct compress_params *params, const 
char *desc)
 {
        char buffer[DPKG_BUFFER_SIZE];
        char combuf[6];
        int bz_errnum;
        BZFILE *bzfile;
 
-       snprintf(combuf, sizeof(combuf), "w%d", compress_level);
+       snprintf(combuf, sizeof(combuf), "w%d", params->level);
        bzfile = BZ2_bzdopen(fd_out, combuf);
        if (bzfile == NULL)
                ohshit(_("%s: error binding output to bzip2 stream"), desc);
@@ -309,11 +310,11 @@ decompress_bzip2(int fd_in, int fd_out, const char *desc)
 }
 
 static void
-compress_bzip2(int fd_in, int fd_out, int compress_level, const char *desc)
+compress_bzip2(int fd_in, int fd_out, struct compress_params *params, const 
char *desc)
 {
        char combuf[6];
 
-       snprintf(combuf, sizeof(combuf), "-c%d", compress_level);
+       snprintf(combuf, sizeof(combuf), "-c%d", params->level);
        fd_fd_filter(fd_in, fd_out, desc, BZIP2, combuf, NULL);
 }
 #endif
@@ -337,11 +338,11 @@ decompress_xz(int fd_in, int fd_out, const char *desc)
 }
 
 static void
-compress_xz(int fd_in, int fd_out, int compress_level, const char *desc)
+compress_xz(int fd_in, int fd_out, struct compress_params *params, const char 
*desc)
 {
        char combuf[6];
 
-       snprintf(combuf, sizeof(combuf), "-c%d", compress_level);
+       snprintf(combuf, sizeof(combuf), "-c%d", params->level);
        fd_fd_filter(fd_in, fd_out, desc, XZ, combuf, NULL);
 }
 
@@ -364,11 +365,11 @@ decompress_lzma(int fd_in, int fd_out, const char *desc)
 }
 
 static void
-compress_lzma(int fd_in, int fd_out, int compress_level, const char *desc)
+compress_lzma(int fd_in, int fd_out, struct compress_params *params, const 
char *desc)
 {
        char combuf[6];
 
-       snprintf(combuf, sizeof(combuf), "-c%d", compress_level);
+       snprintf(combuf, sizeof(combuf), "-c%d", params->level);
        fd_fd_filter(fd_in, fd_out, desc, XZ, combuf, "--format=lzma", NULL);
 }
 
@@ -450,8 +451,8 @@ decompress_filter(enum compressor_type type, int fd_in, int 
fd_out,
 }
 
 void
-compress_filter(enum compressor_type type, int fd_in, int fd_out,
-                int compress_level, const char *desc_fmt, ...)
+compress_filter(struct compress_params *params, int fd_in, int fd_out,
+                const char *desc_fmt, ...)
 {
        const struct compressor *compressor;
        va_list args;
@@ -461,12 +462,12 @@ compress_filter(enum compressor_type type, int fd_in, int 
fd_out,
        varbuf_vprintf(&desc, desc_fmt, args);
        va_end(args);
 
-       compressor = compressor_get(type);
+       compressor = compressor_get(params->type);
 
-       if (compress_level < 0)
-               compress_level = compressor->default_level;
-       else if (compress_level == 0)
+       if (params->level < 0)
+               params->level = compressor->default_level;
+       else if (params->level == 0)
                compressor = &compressor_none;
 
-       compressor->compress(fd_in, fd_out, compress_level, desc.buf);
+       compressor->compress(fd_in, fd_out, params, desc.buf);
 }
diff --git a/lib/dpkg/compress.h b/lib/dpkg/compress.h
index 94c4df7..8ae4f7c 100644
--- a/lib/dpkg/compress.h
+++ b/lib/dpkg/compress.h
@@ -39,6 +39,11 @@ enum compressor_type {
        compressor_type_lzma,
 };
 
+struct compress_params {
+       enum compressor_type type;
+       int level;
+};
+
 enum compressor_type compressor_find_by_name(const char *name);
 enum compressor_type compressor_find_by_extension(const char *name);
 
@@ -47,9 +52,9 @@ const char *compressor_get_extension(enum compressor_type 
type);
 void decompress_filter(enum compressor_type type, int fd_in, int fd_out,
                        const char *desc, ...)
                        DPKG_ATTR_PRINTF(4);
-void compress_filter(enum compressor_type type, int fd_in, int fd_out,
-                     int compress_level, const char *desc, ...)
-                     DPKG_ATTR_PRINTF(5);
+void compress_filter(struct compress_params *params, int fd_in, int fd_out,
+                     const char *desc, ...)
+                     DPKG_ATTR_PRINTF(4);
 
 DPKG_END_DECLS
 

-- 
dpkg's main repository


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Reply via email to