Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/msn/msn_util.c

    r9b0ad7e rbae0617  
    226226                    bu->handle, bu->fullname );
    227227        imcb_ask( bu->ic, buf, bla, msn_buddy_ask_yes, msn_buddy_ask_no );
     228}
     229
     230char *msn_findheader( char *text, char *header, int len )
     231{
     232        int hlen = strlen( header ), i;
     233        char *ret;
     234       
     235        if( len == 0 )
     236                len = strlen( text );
     237       
     238        i = 0;
     239        while( ( i + hlen ) < len )
     240        {
     241                /* Maybe this is a bit over-commented, but I just hate this part... */
     242                if( g_strncasecmp( text + i, header, hlen ) == 0 )
     243                {
     244                        /* Skip to the (probable) end of the header */
     245                        i += hlen;
     246                       
     247                        /* Find the first non-[: \t] character */
     248                        while( i < len && ( text[i] == ':' || text[i] == ' ' || text[i] == '\t' ) ) i ++;
     249                       
     250                        /* Make sure we're still inside the string */
     251                        if( i >= len ) return( NULL );
     252                       
     253                        /* Save the position */
     254                        ret = text + i;
     255                       
     256                        /* Search for the end of this line */
     257                        while( i < len && text[i] != '\r' && text[i] != '\n' ) i ++;
     258                       
     259                        /* Make sure we're still inside the string */
     260                        if( i >= len ) return( NULL );
     261                       
     262                        /* Copy the found data */
     263                        return( g_strndup( ret, text + i - ret ) );
     264                }
     265               
     266                /* This wasn't the header we were looking for, skip to the next line. */
     267                while( i < len && ( text[i] != '\r' && text[i] != '\n' ) ) i ++;
     268                while( i < len && ( text[i] == '\r' || text[i] == '\n' ) ) i ++;
     269               
     270                /* End of headers? */
     271                if( ( i >= 4 && strncmp( text + i - 4, "\r\n\r\n", 4 ) == 0 ) ||
     272                    ( i >= 2 && ( strncmp( text + i - 2, "\n\n", 2 ) == 0 ||   
     273                                  strncmp( text + i - 2, "\r\r", 2 ) == 0 ) ) )
     274                {
     275                        break;
     276                }
     277        }
     278       
     279        return( NULL );
    228280}
    229281
Note: See TracChangeset for help on using the changeset viewer.