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(¶ms, 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]