Changeset 320 for cpp/frams


Ignore:
Timestamp:
02/01/15 01:10:22 (7 years ago)
Author:
Maciej Komosinski
Message:

Tab \t ignored in param fields (considered whitespace)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/param/param.cpp

    r316 r320  
    982982        int fields_loaded = 0;
    983983        const char *t, *lin, *end;
    984         const char *equals_sign, *comma_sign;
     984        const char *equals_sign, *field_end, *next_field;
    985985        char remember;
    986986        const char *quote, *quote2;
     
    997997        {
    998998                // processing a single field
     999                // "p:name=field_value,  field_name=field_value  , name=value..."
     1000                //                     ^ ^-t (after)           ^ ^_next_field
     1001                //                     \_t (before)            \_field_end
    9991002                while (strchr(" \n\r\t", *t)) if (t < end) t++; else return fields_loaded;
    10001003
    1001                 comma_sign = strchrlimit(t, ',', end); if (!comma_sign) comma_sign = end;
    1002                 quote = strchrlimit(t, '\"', comma_sign);
     1004                field_end = strchrlimit(t, ',', end); if (!field_end) field_end = end;
     1005                next_field=field_end;
     1006                while ((field_end>t) && strchr(" \t",field_end[-1])) field_end--;
     1007                quote = strchrlimit(t, '\"', field_end);
    10031008                if (quote)
    10041009                {
    10051010                        quote2 = skipQuoteString(quote + 1, end);
    1006                         if (quote2 > comma_sign)
     1011                        if (quote2 > field_end)
    10071012                        {
    1008                                 comma_sign = strchrlimit(quote2 + 1, ',', end);
    1009                                 if (!comma_sign) comma_sign = end;
     1013                                field_end = strchrlimit(quote2 + 1, ',', end);
     1014                                if (!field_end) next_field = field_end = end;
    10101015                        }
    10111016                        equals_sign = strchrlimit(t, '=', quote);
     
    10131018                else
    10141019                {
    1015                         equals_sign = strchrlimit(t, '=', comma_sign);
     1020                        equals_sign = strchrlimit(t, '=', field_end);
    10161021                        quote2 = 0;
    10171022                }
    10181023                if (equals_sign == t) { t++; equals_sign = 0; }
    1019                 if (comma_sign == t)    // skip empty value
     1024                if (field_end == t)     // skip empty value
    10201025                {
    10211026                        t++; i++;
     
    10541059                        }
    10551060                        else
    1056                                 if (comma_sign < end) valstop = comma_sign; else valstop = end;
     1061                                if (field_end < end) valstop = field_end; else valstop = end;
    10571062
    10581063                        remember = *valstop;
     
    10681073                if (i >= 0) i++;
    10691074#ifdef __CODEGUARD__
    1070                 if (comma_sign<end-1) t=comma_sign+1; else return fields_loaded;
     1075                if (next_field<end-1) t=next_field+1; else return fields_loaded;
    10711076#else
    1072                 t = comma_sign + 1;
     1077                t = next_field + 1;
    10731078#endif
    10741079        }
Note: See TracChangeset for help on using the changeset viewer.