rfc822parse: Avoid conflict with stpcpy.
authorWerner Koch <wk@gnupg.org>
Wed, 20 Mar 2019 08:40:09 +0000 (09:40 +0100)
committerWerner Koch <wk@gnupg.org>
Wed, 20 Mar 2019 08:40:09 +0000 (09:40 +0100)
rfc822parse.c

index dd0cc7c..54982de 100644 (file)
  * do not handle this correct especially in the field parsing code.  It
  * should be easy to fix and the API provides a interfcaes which returns
  * the length but in addition makes sure that returned strings are always
- * ended by a \0.  
+ * ended by a \0.
  *
  * Furthermore, the case of field names is changed and thus it is not
  * always a good idea to use these modified header
  * lines (e.g. signatures may break).
- * 
+ *
  */
 
 #ifdef HAVE_CONFIG_H
@@ -102,12 +102,26 @@ static HDR_LINE find_header (rfc822parse_t msg, const char *name,
                             int which, HDR_LINE * rprev);
 
 
+/* This function is non-static to avoid conflicts with a stpcpy in
+ * string.h on some platforms.  */
+char *
+stpcpy (char *a,const char *b)
+{
+  while (*b)
+    *a++ = *b++;
+  *a = 0;
+
+  return (char*)a;
+}
+
+
+
 static size_t
 length_sans_trailing_ws (const unsigned char *line, size_t len)
 {
   const unsigned char *p, *mark;
   size_t n;
-  
+
   for (mark=NULL, p=line, n=0; n < len; n++, p++)
     {
       if (strchr (" \t\r\n", *p ))
@@ -118,8 +132,8 @@ length_sans_trailing_ws (const unsigned char *line, size_t len)
       else
         mark = NULL;
     }
-  
-  if (mark) 
+
+  if (mark)
     return mark - line;
   return len;
 }
@@ -156,17 +170,6 @@ capitalize_header_name (unsigned char *name)
 }
 
 
-static char *
-stpcpy (char *a,const char *b)
-{
-  while (*b)
-    *a++ = *b++;
-  *a = 0;
-  
-  return (char*)a;
-}
-
-
 /* If a callback has been registerd, call it for the event of type
    EVENT. */
 static int
@@ -357,10 +360,10 @@ transition_to_body (rfc822parse_t msg)
                 {
                   assert (!msg->current_part->boundary);
                   msg->current_part->boundary = malloc (strlen (s) + 1);
-                  if (msg->current_part->boundary) 
+                  if (msg->current_part->boundary)
                     {
                       part_t part;
-                  
+
                       strcpy (msg->current_part->boundary, s);
                       msg->boundary = msg->current_part->boundary;
                       part = new_part ();
@@ -429,7 +432,7 @@ insert_header (rfc822parse_t msg, const unsigned char *line, size_t length)
   hdr->cont = (*line == ' ' || *line == '\t');
   memcpy (hdr->line, line, length);
   hdr->line[length] = 0; /* Make it a string. */
-  
+
   /* Transform a field name into canonical format. */
   if (!hdr->cont && strchr (line, ':'))
      capitalize_header_name (hdr->line);
@@ -491,7 +494,7 @@ insert_body (rfc822parse_t msg, const unsigned char *line, size_t length)
 int
 rfc822parse_insert (rfc822parse_t msg, const unsigned char *line, size_t length)
 {
-  return (msg->in_body 
+  return (msg->in_body
           ? insert_body (msg, line, length)
           : insert_header (msg, line, length));
 }
@@ -517,11 +520,11 @@ rfc822parse_finish (rfc822parse_t msg)
  * WHICH gives the mode:
  *  -1 := Take the last occurence
  *   n := Take the n-th  one.
- * 
+ *
  * Returns a newly allocated buffer or NULL on error.  errno is set in
  * case of a memory failure or set to 0 if the requested field is not
  * available.
- * 
+ *
  * If VALUEOFF is not NULL it will receive the offset of the first non
  * space character in th value of the line.
  */
@@ -589,7 +592,7 @@ rfc822parse_enum_header_lines (rfc822parse_t msg, void **context)
   HDR_LINE l;
 
   if (!msg) /* Close. */
-    return NULL;       
+    return NULL;
 
   if (*context == msg || !msg->current_part)
     return NULL;
@@ -759,7 +762,7 @@ parse_field (HDR_LINE hdr)
   static const char specials2[] = "<>@.,;:";
   static const char tspecials[] = "/?=<>@,;:\\[]\"()";
   static const char tspecials2[] = "/?=<>@.,;:";
-  static struct 
+  static struct
   {
     const unsigned char *name;
     size_t namelen;
@@ -870,13 +873,13 @@ parse_field (HDR_LINE hdr)
                  else if (*s2 == '\\' && s2[1]) /* what about continuation? */
                    s2++;
                }
-              
+
              t = (t
                    ? append_to_token (t, s, s2 - s)
                    : new_token (term == '\"'? tQUOTED : tDOMAINLIT, s, s2 - s));
               if (!t)
                 goto failure;
-                   
+
              if (*s2 || !hdr->next || !hdr->next->cont)
                break;
              hdr = hdr->next;
@@ -1006,10 +1009,10 @@ is_parameter (TOKEN t)
    Returns a pointer to the value which is valid as long as the
    parse context is valid; NULL is returned in case that attr is not
    defined in the header, a missing value is reppresented by an empty string.
+
    With LOWER_VALUE set to true, a matching field valuebe be
    lowercased.
+
    Note, that ATTR should be lowercase.
  */
 const char *
@@ -1114,7 +1117,7 @@ dump_structure (rfc822parse_t msg, part_t part, int indent)
       part_t save_part; /* ugly hack - we should have a function to
                            get part inforation. */
       const char *s;
-      
+
       save_part = msg->current_part;
       msg->current_part = part;
       ctx = rfc822parse_parse_field (msg, "Content-Type", -1);
@@ -1140,7 +1143,7 @@ dump_structure (rfc822parse_t msg, part_t part, int indent)
       if (part->down)
         dump_structure (msg, part->down, indent + 1);
     }
-  
+
 }
 
 
@@ -1210,7 +1213,7 @@ msg_cb (void *dummy_arg, rfc822parse_event_t event, rfc822parse_t msg)
         }
       else
         printf ("***   media: text/plain [assumed]\n");
-      
+
     }