瀏覽代碼

libdpkg: Switch compressor to take a parameters struct

Guillem Jover 14 年之前
父節點
當前提交
e919b52fa6
共有 5 個文件被更改,包括 46 次插入34 次删除
  1. 8 3
      dpkg-deb/build.c
  2. 1 2
      dpkg-deb/dpkg-deb.h
  3. 7 5
      dpkg-deb/main.c
  4. 22 21
      lib/dpkg/compress.c
  5. 8 3
      lib/dpkg/compress.h

+ 8 - 3
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"));

+ 1 - 2
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"
 

+ 7 - 5
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);
 }
 

+ 22 - 21
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);
 }

+ 8 - 3
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