]> granicus.if.org Git - curl/commitdiff
Support media-type parameter in Content-Type
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
Tue, 8 May 2012 15:20:17 +0000 (00:20 +0900)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 26 May 2012 21:11:06 +0000 (23:11 +0200)
src/tool_metalink.c
src/tool_metalink.h
src/tool_operate.c

index 4b4c6bcd3ff1ccefbb4407e5b303e7329b2fa41a..b442fc0d7596cf682feded3601a549ced6f886e0 100644 (file)
@@ -20,6 +20,9 @@
  *
  ***************************************************************************/
 #include "tool_setup.h"
+
+#include "rawstr.h"
+
 #include "tool_metalink.h"
 #include "tool_getparam.h"
 #include "tool_paramhlp.h"
@@ -142,3 +145,24 @@ int parse_metalink(struct Configurable *config, const char *infile)
   }
   return 0;
 }
+
+/*
+ * Returns nonzero if content_type includes mediatype.
+ */
+static int check_content_type(const char *content_type, const char *media_type)
+{
+  const char *ptr = content_type;
+  size_t media_type_len = strlen(media_type);
+  for(; *ptr && (*ptr == ' ' || *ptr == '\t'); ++ptr);
+  if(!*ptr) {
+    return 0;
+  }
+  return Curl_raw_nequal(ptr, media_type, media_type_len) &&
+    (*(ptr+media_type_len) == '\0' || *(ptr+media_type_len) == ' ' ||
+     *(ptr+media_type_len) == '\t' || *(ptr+media_type_len) == ';');
+}
+
+int check_metalink_content_type(const char *content_type)
+{
+  return check_content_type(content_type, "application/metalink+xml");
+}
index 39e6674d14179990087631050eb34162e033a1c5..f7a0abe84311a6b2a2f76acc95639de6f5447555 100644 (file)
@@ -50,4 +50,10 @@ void clean_metalink(struct Configurable *config);
 
 int parse_metalink(struct Configurable *config, const char *infile);
 
+/*
+ * Returns nonzero if content_type includes "application/metalink+xml"
+ * media-type. The check is done in case-insensitive manner.
+ */
+int check_metalink_content_type(const char *content_type);
+
 #endif /* HEADER_CURL_TOOL_METALINK_H */
index 4bcc8b40d422074ad59c7574035dba53a09f49cb..be841e7e728c749e5c9766cdeebbdc1669ec2826 100644 (file)
@@ -1582,8 +1582,7 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[])
              Metalink file, parse it and add getout for them. */
           char *content_type;
           curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &content_type);
-          if(content_type &&
-             Curl_raw_equal("application/metalink+xml", content_type)) {
+          if(content_type && check_metalink_content_type(content_type)) {
             if(!(config->mute)) {
               fprintf(config->errors, "\nParsing Metalink file: %s\n",
                       outs.filename);