--- a/libopkg/opkg.c +++ b/libopkg/opkg.c @@ -592,49 +592,8 @@ opkg_update_package_lists(opkg_progress_ src->gzip ? "Packages.gz" : "Packages"); sprintf_alloc(&list_file_name, "%s/%s", lists_dir, src->name); - if (src->gzip) { - FILE *in, *out; - struct _curl_cb_data cb_data; - char *tmp_file_name = NULL; - sprintf_alloc(&tmp_file_name, "%s/%s.gz", tmp, - src->name); - - opkg_msg(INFO, "Downloading %s to %s...\n", url, - tmp_file_name); - - cb_data.cb = progress_callback; - cb_data.progress_data = &pdata; - cb_data.user_data = user_data; - cb_data.start_range = - 100 * sources_done / sources_list_count; - cb_data.finish_range = - 100 * (sources_done + 1) / sources_list_count; - - err = opkg_download(url, tmp_file_name, - (curl_progress_func) curl_progress_cb, - &cb_data, 0); - - if (err == 0) { - opkg_msg(INFO, "Inflating %s...\n", - tmp_file_name); - in = fopen(tmp_file_name, "r"); - out = fopen(list_file_name, "w"); - if (in && out) - unzip(in, out); - else - err = 1; - if (in) - fclose(in); - if (out) - fclose(out); - unlink(tmp_file_name); - } - free(tmp_file_name); - } else - err = opkg_download(url, list_file_name, NULL, NULL, 0); - - if (err) { + if (opkg_download(url, list_file_name, NULL, NULL, 0)) { opkg_msg(ERROR, "Couldn't retrieve %s\n", url); result = -1; } --- a/libopkg/opkg_cmd.c +++ b/libopkg/opkg_cmd.c @@ -162,30 +162,7 @@ opkg_update_cmd(int argc, char **argv) sprintf_alloc(&url, "%s/%s", src->value, src->gzip ? "Packages.gz" : "Packages"); sprintf_alloc(&list_file_name, "%s/%s", lists_dir, src->name); - if (src->gzip) { - char *tmp_file_name; - FILE *in, *out; - - sprintf_alloc (&tmp_file_name, "%s/%s.gz", tmp, src->name); - err = opkg_download(url, tmp_file_name, NULL, NULL, 0); - if (err == 0) { - opkg_msg(NOTICE, "Inflating %s.\n", url); - in = fopen (tmp_file_name, "r"); - out = fopen (list_file_name, "w"); - if (in && out) - unzip (in, out); - else - err = 1; - if (in) - fclose (in); - if (out) - fclose (out); - unlink (tmp_file_name); - } - free(tmp_file_name); - } else - err = opkg_download(url, list_file_name, NULL, NULL, 0); - if (err) { + if (opkg_download(url, list_file_name, NULL, NULL, 0)) { failures++; } else { opkg_msg(NOTICE, "Updated list of available packages in %s.\n", --- a/libopkg/pkg_hash.c +++ b/libopkg/pkg_hash.c @@ -102,12 +102,18 @@ pkg_hash_add_from_file(const char *file_ pkg_src_t *src, pkg_dest_t *dest, int is_status_file) { pkg_t *pkg; - FILE *fp; + FILE *fp, *fp_c = NULL; char *buf; const size_t len = 4096; int ret = 0; + int pid; fp = fopen(file_name, "r"); + if (fp && src && src->gzip) { + fp_c = fp; + fp = gz_open(fp_c, &pid); + } + if (fp == NULL) { opkg_perror(ERROR, "Failed to open %s", file_name); return -1; @@ -154,6 +160,10 @@ pkg_hash_add_from_file(const char *file_ free(buf); fclose(fp); + if (fp_c) { + fclose(fp_c); + gz_close(pid); + } return ret; }