121 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- 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;
 | |
|  }
 |