Metalink: message updates
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
Wed, 27 Jun 2012 15:20:20 +0000 (00:20 +0900)
committerYang Tse <yangsita@gmail.com>
Wed, 27 Jun 2012 22:26:16 +0000 (00:26 +0200)
Print "parsing (...) OK" only when no warnings are generated.  If
no file is found in Metalink, treat it FAILED.

If no digest is provided, print WARNING in parse_metalink().
Also print validating FAILED after download.

These changes make tests 2012 to 2016 pass.

src/tool_metalink.c
src/tool_metalink.h
src/tool_operate.c
tests/data/DISABLED

index 8065741332a4e91de308337e9805953b56496619..5491815a3284ab8f0de9a82a24aa8eb623c57e9f 100644 (file)
@@ -330,7 +330,6 @@ static int check_hash(const char *filename,
   digest_context *dctx;
   int check_ok;
   int fd;
-  fprintf(error, "Metalink: validating (%s)...\n", filename);
   fd = open(filename, O_RDONLY);
   if(fd == -1) {
     fprintf(error, "Metalink: validating (%s) FAILED (%s)\n", filename,
@@ -374,7 +373,11 @@ int metalink_check_hash(struct Configurable *config,
                         const char *filename)
 {
   int rv;
+  fprintf(config->errors, "Metalink: validating (%s)...\n", filename);
   if(mlfile->checksum == NULL) {
+    fprintf(config->errors,
+            "Metalink: validating (%s) FAILED (digest missing)\n",
+            filename);
     return -2;
   }
   rv = check_hash(filename, mlfile->checksum->digest_def,
@@ -474,6 +477,7 @@ int parse_metalink(struct Configurable *config, struct OutStruct *outs,
   metalink_error_t r;
   metalink_t* metalink;
   metalink_file_t **files;
+  bool warnings = FALSE;
 
   /* metlaink_parse_final deletes outs->metalink_parser */
   r = metalink_parse_final(outs->metalink_parser, NULL, 0, &metalink);
@@ -482,17 +486,17 @@ int parse_metalink(struct Configurable *config, struct OutStruct *outs,
     return -1;
   }
   if(metalink->files == NULL) {
-    fprintf(config->errors, "\nMetalink: parsing (%s) WARNING "
+    fprintf(config->errors, "Metalink: parsing (%s) WARNING "
             "(missing or invalid file name)\n",
             metalink_url);
     metalink_delete(metalink);
-    return 0;
+    return -1;
   }
   for(files = metalink->files; *files; ++files) {
     struct getout *url;
     /* Skip an entry which has no resource. */
     if(!(*files)->resources) {
-      fprintf(config->errors, "\nMetalink: parsing (%s) WARNING "
+      fprintf(config->errors, "Metalink: parsing (%s) WARNING "
               "(missing or invalid resource)\n",
               metalink_url, (*files)->name);
       continue;
@@ -517,7 +521,12 @@ int parse_metalink(struct Configurable *config, struct OutStruct *outs,
     if(url) {
       metalinkfile *mlfile;
       mlfile = new_metalinkfile(*files);
-
+      if(!mlfile->checksum) {
+        warnings = TRUE;
+        fprintf(config->errors, "Metalink: parsing (%s) WARNING "
+                "(digest missing)\n",
+                metalink_url);
+      }
       /* Set name as url */
       GetStr(&url->url, mlfile->filename);
 
@@ -534,7 +543,7 @@ int parse_metalink(struct Configurable *config, struct OutStruct *outs,
     }
   }
   metalink_delete(metalink);
-  return 0;
+  return (warnings) ? -2 : 0;
 }
 
 size_t metalink_write_cb(void *buffer, size_t sz, size_t nmemb,
index a3d10a22cab28b69107c3b8e09de1e3227e4c721..52a430ece8117ce0ed277fef619b3f78012d6d21 100644 (file)
@@ -90,6 +90,16 @@ extern const digest_params SHA256_DIGEST_PARAMS[1];
 int count_next_metalink_resource(metalinkfile *mlfile);
 void clean_metalink(struct Configurable *config);
 
+/*
+ * Performs final parse operation and extracts information from
+ * Metalink and creates metalinkfile structs.
+ *
+ * This function returns 0 if it succeeds without warnings, or one of
+ * the following negative error codes:
+ *
+ * -1: Parsing failed; or no file is found
+ * -2: Parsing succeeded with some warnings.
+ */
 int parse_metalink(struct Configurable *config, struct OutStruct *outs,
                    const char *metalink_url);
 
index 0b828de4b35aa0386cad22c7aa79c2de5f7f456d..7c0b8b5fec0357f64b092ae35c6b4aac580a28ca 100644 (file)
@@ -1621,10 +1621,10 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[])
 
 #ifdef USE_METALINK
         if(!metalink && config->use_metalink && res == CURLE_OK) {
-          if(parse_metalink(config, &outs, this_url) == 0)
-            fprintf(config->errors, "Metalink: parsing (%s) OK\n",
-                    this_url);
-          else
+          int rv = parse_metalink(config, &outs, this_url);
+          if(rv == 0)
+            fprintf(config->errors, "Metalink: parsing (%s) OK\n", this_url);
+          else if(rv == -1)
             fprintf(config->errors, "Metalink: parsing (%s) FAILED\n",
                     this_url);
         }
index c15fe769b733fae19742ba74a291e98bcf3117fc..f7402e60b02fcdcb4a828893aeabd429192aa2c0 100644 (file)
@@ -5,9 +5,4 @@
 594
 1209
 1211
-2012
-2013
-2014
-2015
-2016
 2017