Diff for /embedaddon/miniupnpd/upnpreplyparse.c between versions 1.1 and 1.1.1.3

version 1.1, 2012/02/21 23:16:02 version 1.1.1.3, 2013/07/22 00:32:35
Line 1 Line 1
 /* $Id$ */  /* $Id$ */
 /* MiniUPnP project  /* MiniUPnP project
  * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/   * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
 * (c) 2006 Thomas Bernard  * (c) 2006-2011 Thomas Bernard
  * This software is subject to the conditions detailed   * This software is subject to the conditions detailed
  * in the LICENCE file provided within the distribution */   * in the LICENCE file provided within the distribution */
   
Line 27  NameValueParserGetData(void * d, const char * datas, i Line 27  NameValueParserGetData(void * d, const char * datas, i
 {  {
     struct NameValueParserData * data = (struct NameValueParserData *)d;      struct NameValueParserData * data = (struct NameValueParserData *)d;
     struct NameValue * nv;      struct NameValue * nv;
    nv = malloc(sizeof(struct NameValue));        if(strcmp(data->curelt, "NewPortListing") == 0)
    if(l>63)        {
        l = 63;                /* specific case for NewPortListing which is a XML Document */
    strncpy(nv->name, data->curelt, 64);                data->portListing = malloc(l + 1);
        nv->name[63] = '\0';                if(!data->portListing)
    memcpy(nv->value, datas, l);                {
    nv->value[l] = '\0';                        /* malloc error */
    LIST_INSERT_HEAD( &(data->head), nv, entries);                        return;
                 }
                 memcpy(data->portListing, datas, l);
                 data->portListing[l] = '\0';
                 data->portListingLength = l;
         }
         else
         {
                 /* standard case. Limited to 63 chars strings */
             nv = malloc(sizeof(struct NameValue));
             if(l>63)
                 l = 63;
             strncpy(nv->name, data->curelt, 64);
                 nv->name[63] = '\0';
             memcpy(nv->value, datas, l);
             nv->value[l] = '\0';
             LIST_INSERT_HEAD( &(data->head), nv, entries);
         }
 }  }
   
 void  void
 ParseNameValue(const char * buffer, int bufsize,  ParseNameValue(const char * buffer, int bufsize,
                    struct NameValueParserData * data)               struct NameValueParserData * data)
 {  {
     struct xmlparser parser;      struct xmlparser parser;
     LIST_INIT(&(data->head));      LIST_INIT(&(data->head));
           data->portListing = NULL;
           data->portListingLength = 0;
     /* init xmlparser object */      /* init xmlparser object */
     parser.xmlstart = buffer;      parser.xmlstart = buffer;
     parser.xmlsize = bufsize;      parser.xmlsize = bufsize;
Line 58  void Line 77  void
 ClearNameValueList(struct NameValueParserData * pdata)  ClearNameValueList(struct NameValueParserData * pdata)
 {  {
     struct NameValue * nv;      struct NameValue * nv;
           if(pdata->portListing)
           {
                   free(pdata->portListing);
                   pdata->portListing = NULL;
                   pdata->portListingLength = 0;
           }
     while((nv = pdata->head.lh_first) != NULL)      while((nv = pdata->head.lh_first) != NULL)
     {      {
         LIST_REMOVE(nv, entries);          LIST_REMOVE(nv, entries);
Line 65  ClearNameValueList(struct NameValueParserData * pdata) Line 90  ClearNameValueList(struct NameValueParserData * pdata)
     }      }
 }  }
   
char * char *
 GetValueFromNameValueList(struct NameValueParserData * pdata,  GetValueFromNameValueList(struct NameValueParserData * pdata,
                           const char * Name)                            const char * Name)
 {  {
Line 106  GetValueFromNameValueListIgnoreNS(struct NameValuePars Line 131  GetValueFromNameValueListIgnoreNS(struct NameValuePars
 }  }
 #endif  #endif
   
/* debug all-in-one function /* debug all-in-one function
  * do parsing then display to stdout */   * do parsing then display to stdout */
 #ifdef DEBUG  #ifdef DEBUG
 void  void

Removed from v.1.1  
changed lines
  Added in v.1.1.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>