VirtualBox

Ignore:
Timestamp:
May 21, 2015 12:19:28 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
100513
Message:

RTGetOptArgvFromString/MS_CRT: Implemented undocumented doubledouble quotes, current CRT style.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/misc/getoptargv.cpp

    r55673 r56002  
    334334                    break;
    335335                if (Cp == '"')
    336                     fInQuote = !fInQuote;
     336                {
     337                    /* Two double quotes insides a quoted string in an escape
     338                       sequence and we output one double quote char.
     339                       See http://www.daviddeley.com/autohotkey/parameters/parameters.htm */
     340                    if (!fInQuote)
     341                        fInQuote = true;
     342                    else if (*pszSrc != '"')
     343                        fInQuote = false;
     344                    else
     345                    {
     346                        pszDst = RTStrPutCp(pszDst, '"');
     347                        pszSrc++;
     348                    }
     349                }
    337350                else if (!fInQuote && rtGetOptIsCpInSet(Cp, pszSeparators, cchSeparators))
    338351                    break;
     
    343356                    /* A backslash sequence is only relevant if followed by
    344357                       a double quote, then it will work like an escape char. */
    345                     size_t cQuotes = 1;
     358                    size_t cSlashes = 1;
    346359                    while (*pszSrc == '\\')
    347360                    {
    348                         cQuotes++;
     361                        cSlashes++;
    349362                        pszSrc++;
    350363                    }
    351364                    if (*pszSrc != '"')
    352365                        /* Not an escape sequence.  */
    353                         while (cQuotes-- > 0)
     366                        while (cSlashes-- > 0)
    354367                            pszDst = RTStrPutCp(pszDst, '\\');
    355368                    else
     
    357370                        /* Escape sequence.  Output half of the slashes.  If odd
    358371                           number, output the escaped double quote . */
    359                         while (cQuotes >= 2)
     372                        while (cSlashes >= 2)
    360373                        {
    361374                            pszDst = RTStrPutCp(pszDst, '\\');
    362                             cQuotes -= 2;
     375                            cSlashes -= 2;
    363376                        }
    364                         if (!cQuotes)
    365                             fInQuote = !fInQuote;
    366                         else
     377                        if (cSlashes)
     378                        {
    367379                            pszDst = RTStrPutCp(pszDst, '"');
    368                         pszSrc++;
     380                            pszSrc++;
     381                        }
    369382                    }
    370383                }
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette