Hi,

this patch fixes some of compiler warnings. I was uncertain for the
remaining ones (5) - I believe some of them might be stubs for upcoming
features.

 Best Regards,


Jure Grabnar (toomanysecrets)
From f81e0c25456d1c60d998b62cb1ea2740ddd1a353 Mon Sep 17 00:00:00 2001
From: Jure Grabnar <grabna...@gmail.com>
Date: Fri, 14 Mar 2014 08:38:25 +0100
Subject: [PATCH 1/2] Fixed some metalink issues with openSUSE.iso

Still returns memory corruption bug.
---
 src/metalink.c | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/src/metalink.c b/src/metalink.c
index 76db2fa..9bb2274 100644
--- a/src/metalink.c
+++ b/src/metalink.c
@@ -42,6 +42,7 @@ as that of the covered work.  */
 #include "sha256.h"
 #include "metalink.h"
 #include "utils.h"
+#include "url.h"
 
 
 #define HASH_TYPES 3
@@ -134,7 +135,28 @@ parse_metalink(char *input_file)
           ++(file->num_of_res);
 
           resource->url = xstrdup ((*resources)->url);
-          resource->type = ((*resources)->type ? xstrdup ((*resources)->type) : NULL);
+          
+          if ((*resources)->type)
+            resource->type = xstrdup((*resources)->type);
+          else
+            {
+            enum url_scheme res_scheme = url_scheme(resource->url);
+            switch (res_scheme) 
+              {
+              case SCHEME_HTTP:
+                resource->type = "http";
+                break;
+              case SCHEME_HTTPS:
+                resource->type = "https";
+                break;
+              case SCHEME_FTP:
+                resource->type = "ftp";
+                break;
+              default:
+                resource->type = NULL;
+              }
+            }
+          
           resource->location = ((*resources)->location ? xstrdup ((*resources)->location) : NULL);
           resource->preference = (*resources)->preference;
           resource->maxconnections = (*resources)->maxconnections;
@@ -143,7 +165,7 @@ parse_metalink(char *input_file)
           (file->resources) = resource;
         }
 
-      for (checksums = (*files)->checksums; *checksums; ++checksums)
+      for (checksums = (*files)->checksums; checksums && *checksums; ++checksums)
         {
           mlink_checksum *checksum = malloc (sizeof(mlink_checksum));
 
@@ -215,7 +237,7 @@ elect_resources (mlink *mlink)
 
       while (res_next = res->next)
         {
-          if (strcmp(res_next->type, "ftp") && strcmp(res_next->type, "http"))
+          if (res_next->type == NULL || (strcmp(res_next->type, "ftp") && strcmp(res_next->type, "http")))
             {
               res->next = res_next->next;
               free(res_next);
@@ -224,7 +246,7 @@ elect_resources (mlink *mlink)
             res = res_next;
         }
       res = file->resources;
-      if (strcmp(res->type, "ftp") && strcmp(res->type, "http"))
+      if (res->type == NULL || (strcmp(res->type, "ftp") && strcmp(res->type, "http")))
         {
           file->resources = res->next;
           free(res);
-- 
1.9.0

From 59623d0171b3d1aecc9c41f646807416d392cdc7 Mon Sep 17 00:00:00 2001
From: Jure Grabnar <grabna...@gmail.com>
Date: Mon, 17 Mar 2014 16:41:16 +0100
Subject: [PATCH 2/2] Fix some compiler warnings.

---
 src/ChangeLog  | 19 +++++++++++++++++++
 src/http.c     |  5 +----
 src/iri.h      |  2 +-
 src/metalink.c | 55 +++++++++++++++++++++++++++++++------------------------
 src/multi.c    |  8 ++++++++
 src/multi.h    |  2 --
 src/progress.c |  1 -
 src/recur.c    |  2 ++
 src/retr.c     |  4 ++--
 9 files changed, 64 insertions(+), 34 deletions(-)

diff --git a/src/ChangeLog b/src/ChangeLog
index f222037..693e75d 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,22 @@
+2014-03-17	Jure Grabnar  <grabna...@gmail.com>
+	
+	* http.c (gethttp): Remove unused variable 'tmp2'.
+	* iri.h: Fix macro parse_charset(str) to not cause 'left-hand operand of
+	comma expression has no effect'.
+	* metalink.c (parse_metalink): Remove unused variable 'piece_hash'.
+	(elect_resources): Add parentheses to assigment.
+	(elect_checksums): Same. Add cast to (unsigned char *).
+	(veriy_file_hash): Add casts to (char *).
+	* multi.h: Remove prototype of static function segmented_retrieve_url().
+	* multi.c: Include "retr.h". Add prototype of static function 
+	segmented_retrieve_url();
+ 	(collect_thread): Add return value to suppress compiler warning.
+	(segmented_retrieve_url): Same.
+	* recur.c (start_retrieve_url): Same.
+	* progress.c: Removed unused variable 'header'.
+	* retr.c (retrieve_from_file): Remove unused variables 'i', 'url_err', 
+	'retries'.
+
 2014-03-04  Giuseppe Scrivano  <gscri...@redhat.com>
 
 	* http.c (modify_param_value, extract_param): Aesthetic change.
diff --git a/src/http.c b/src/http.c
index c5c4d8a..fa627a7 100644
--- a/src/http.c
+++ b/src/http.c
@@ -2872,9 +2872,6 @@ read_header:
       char *tmp = strchr (type, ';');
       if (tmp)
         {
-          /* sXXXav: only needed if IRI support is enabled */
-          char *tmp2 = tmp + 1;
-
           while (tmp > type && c_isspace (tmp[-1]))
             --tmp;
           *tmp = '\0';
@@ -2882,7 +2879,7 @@ read_header:
           /* Try to get remote encoding if needed */
           if (opt.enable_iri && !opt.encoding_remote)
             {
-              tmp = parse_charset (tmp2);
+              tmp = parse_charset (tmp + 1);
               if (tmp)
                 set_content_encoding (iri, tmp);
             }
diff --git a/src/iri.h b/src/iri.h
index e759e45..c88d94f 100644
--- a/src/iri.h
+++ b/src/iri.h
@@ -56,7 +56,7 @@ void set_content_encoding (struct iri *i, char *charset);
 
 extern struct iri dummy_iri;
 
-#define parse_charset(str)          (str, NULL)
+#define parse_charset(str)          (NULL)
 #define find_locale()               NULL
 #define check_encoding_name(str)    false
 #define locale_to_utf8(str)         (str)
diff --git a/src/metalink.c b/src/metalink.c
index 9bb2274..e19b31d 100644
--- a/src/metalink.c
+++ b/src/metalink.c
@@ -137,26 +137,34 @@ parse_metalink(char *input_file)
           resource->url = xstrdup ((*resources)->url);
           
           if ((*resources)->type)
-            resource->type = xstrdup((*resources)->type);
+            resource->type = xstrdup ((*resources)->type);
           else
             {
-            enum url_scheme res_scheme = url_scheme(resource->url);
-            switch (res_scheme) 
-              {
-              case SCHEME_HTTP:
-                resource->type = "http";
-                break;
-              case SCHEME_HTTPS:
-                resource->type = "https";
-                break;
-              case SCHEME_FTP:
-                resource->type = "ftp";
-                break;
-              default:
-                resource->type = NULL;
-              }
-            }
-          
+              enum url_scheme res_scheme = url_scheme (resource->url);
+              switch (res_scheme) 
+                {
+                case SCHEME_HTTP:
+                  resource->type = "http";
+                  break;
+                case SCHEME_HTTPS:
+                  resource->type = "https";
+                  break;
+                case SCHEME_FTP:
+                  resource->type = "ftp";
+                  break;
+                default:
+                  resource->type = NULL;
+                }
+
+              int len_url = strlen (resource->url);
+              if (len_url >= 8) 
+                {
+                  const char *url_ending = &(resource->url[len_url-8]);
+                  if (0 == strncasecmp (url_ending, ".torrent", 8))
+                    resource->type = "bittorrent";
+                }
+            }            
+
           resource->location = ((*resources)->location ? xstrdup ((*resources)->location) : NULL);
           resource->preference = (*resources)->preference;
           resource->maxconnections = (*resources)->maxconnections;
@@ -203,7 +211,6 @@ parse_metalink(char *input_file)
               chunk_sum->type = (chunk_checksum->type ? xstrdup (chunk_checksum->type) : NULL);
               for (piece_hashes = chunk_checksum->piece_hashes; *piece_hashes; ++piece_hashes)
                 {
-                  mlink_piece_hash piece_hash;
                   if(!chunk_checksum->type)
                     {
                       logprintf (LOG_VERBOSE, "PARSE METALINK: Skipping chunk checksum"
@@ -235,7 +242,7 @@ elect_resources (mlink *mlink)
       if (!res)
         continue;
 
-      while (res_next = res->next)
+      while ((res_next = res->next))
         {
           if (res_next->type == NULL || (strcmp(res_next->type, "ftp") && strcmp(res_next->type, "http")))
             {
@@ -269,7 +276,7 @@ elect_checksums (mlink *mlink)
       if (!csum)
         continue;
 
-      while (csum_next = csum->next)
+      while ((csum_next = csum->next))
         {
           /* Traverse supported hash types & break if csum->type is the same. */
           for (i = 0; i < HASH_TYPES; ++i)
@@ -441,7 +448,7 @@ verify_file_hash (const char *filename, mlink_checksum *checksums)
               return 1;
             }
           else
-            metalink_hashes[j] = checksum->hash;
+            metalink_hashes[j] = (unsigned char *) checksum->hash;
         }
 
   for (i = 0; !metalink_hashes[i]; ++i);
@@ -476,10 +483,10 @@ verify_file_hash (const char *filename, mlink_checksum *checksums)
 
   /* Turn byte-form hash to hex form. */
   for(j = 0 ; j < digest_sizes[req_type]; ++j)
-    sprintf(file_hash + 2 * j, "%02x", hash_raw[j]);
+    sprintf((char *) file_hash + 2 * j, "%02x", hash_raw[j]);
 
   lower_hex_case(metalink_hashes[req_type], 2 * digest_sizes[req_type]);
-  if (strcmp(metalink_hashes[req_type], file_hash))
+  if (strcmp((char *) metalink_hashes[req_type], (char *) file_hash))
     {
       logprintf (LOG_VERBOSE, "Verifying(%s) failed: %s hashes are different.\n",
                  filename, supported_hashes[i]);
diff --git a/src/multi.c b/src/multi.c
index 4b22b2e..211c449 100644
--- a/src/multi.c
+++ b/src/multi.c
@@ -38,11 +38,14 @@ as that of the covered work.  */
 #include <unistd.h>
 
 #include "multi.h"
+#include "retr.h"
 #include "url.h"
 
 static struct range *ranges;
 char **files;
 
+static void *segmented_retrieve_url (void *);
+
 /*  Allocate space for temporary file names. */
 void
 init_temp_files()
@@ -220,6 +223,9 @@ collect_thread (sem_t *retr_sem, struct s_thread_ctx *thread_ctx)
         (thread_ctx[k].range)->is_assigned = 0;
         return k;
       }
+
+  /* Should not happen. */
+  return -1;
 }
 
 /* The function which is being called by pthread_create in spawn_thread(). It
@@ -235,4 +241,6 @@ segmented_retrieve_url (void *arg)
                               false, ctx->i, true, ctx->range);
   ctx->terminated = 1;
   sem_post (ctx->retr_sem);
+
+  return NULL;
 }
diff --git a/src/multi.h b/src/multi.h
index ad9bd21..ec53e85 100644
--- a/src/multi.h
+++ b/src/multi.h
@@ -84,6 +84,4 @@ int spawn_thread (struct s_thread_ctx*, int, int);
 
 int collect_thread (sem_t *, struct s_thread_ctx *);
 
-static void * segmented_retrieve_url (void *);
-
 #endif /* MULTI_H */
diff --git a/src/progress.c b/src/progress.c
index 44582d8..5ec6b91 100644
--- a/src/progress.c
+++ b/src/progress.c
@@ -302,7 +302,6 @@ progress_update (void *progress, wgint howmuch, double dltime)
 void
 progress_finish (void *progress, double dltime)
 {
-  struct progress_header *header = progress;
     {
       struct progress_header *it, *prev = NULL;
 
diff --git a/src/recur.c b/src/recur.c
index 38f4d00..c0c9628 100644
--- a/src/recur.c
+++ b/src/recur.c
@@ -190,6 +190,8 @@ start_retrieve_url (void *arg)
                               false, ctx->i, true, NULL);
   ctx->terminated = 1;
   sem_post (ctx->retr_sem);
+
+  return NULL;
 }
 #endif
 
diff --git a/src/retr.c b/src/retr.c
index 8c361de..9ff46a7 100644
--- a/src/retr.c
+++ b/src/retr.c
@@ -1075,8 +1075,7 @@ retrieve_from_file (const char *file, bool html, int *count)
 
   if(opt.metalink_file && mlink)
     {
-      int i, j, r, ranges_covered, chunk_size, url_err, retries, ret, dt=0;
-      pthread_t thread;
+      int j, r, ranges_covered, chunk_size, retries, ret, dt=0;
       sem_t retr_sem;
       uerr_t status;
       mlink_file* file;
@@ -1487,6 +1486,7 @@ rotate_backups(const char *fname)
 }
 
 static bool no_proxy_match (const char *, const char **);
+static bool no_proxy_match (const char *, const char **);
 
 /* Return the URL of the proxy appropriate for url U.  */
 
-- 
1.9.0

Reply via email to