r3873 - trunk/src/target/ipkg

thomas at sita.openmoko.org thomas at sita.openmoko.org
Thu Jan 17 19:07:10 CET 2008


Author: thomas
Date: 2008-01-17 19:07:09 +0100 (Thu, 17 Jan 2008)
New Revision: 3873

Modified:
   trunk/src/target/ipkg/ipkg_download.c
Log:
ipkg: add a simple progress bar while downloading


Modified: trunk/src/target/ipkg/ipkg_download.c
===================================================================
--- trunk/src/target/ipkg/ipkg_download.c	2008-01-17 17:16:13 UTC (rev 3872)
+++ trunk/src/target/ipkg/ipkg_download.c	2008-01-17 18:07:09 UTC (rev 3873)
@@ -4,6 +4,7 @@
    Carl D. Worth
 
    Copyright (C) 2001 University of Southern California
+   Copyright (C) 2008 OpenMoko Inc
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -27,6 +28,29 @@
 #include "file_util.h"
 #include "str_util.h"
 
+
+int
+curl_progress_func (void* data,
+                         double t, /* dltotal */
+                         double d, /* dlnow */
+                         double ultotal,
+                         double ulnow)
+{
+    int i;
+    int p = d*100/t;
+    printf ("\r%3d%% |", p);
+    for (i = 1; i < 73; i++)
+    {
+	if (i <= p)
+	    printf ("=");
+	else
+	    printf ("-");
+    }
+    printf ("|");
+    fflush(stdout);
+    return 0;
+}
+
 int ipkg_download(ipkg_conf_t *conf, const char *src, const char *dest_file_name)
 {
     int err = 0;
@@ -99,12 +123,14 @@
     CURL *curl;
     CURLcode res;
     FILE * file = fopen (tmp_file_location, "w");
-    
+
     curl = curl_easy_init ();
     if (curl)
     {
 	curl_easy_setopt (curl, CURLOPT_URL, src);
 	curl_easy_setopt (curl, CURLOPT_WRITEDATA, file);
+	curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0);
+	curl_easy_setopt (curl, CURLOPT_PROGRESSFUNCTION, curl_progress_func);
 	res = curl_easy_perform (curl);
 	curl_easy_cleanup (curl);
 	fclose (file);
@@ -113,6 +139,8 @@
     else
 	return -1;
 
+    printf ("\n");
+
     err = file_move(tmp_file_location, dest_file_name);
 
     free(tmp_file_location);





More information about the commitlog mailing list