VirtualBox

Ignore:
Timestamp:
Jun 4, 2012 9:13:23 PM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
78351
Message:

DBGC: Working on making STRING the inflexible type and SYMBOL the flexible one.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Debugger/DBGCCmdHlp.cpp

    r41571 r41573  
    5050
    5151    return rc;
     52}
     53
     54
     55/**
     56 * Outputs a string in quotes.
     57 *
     58 * @returns The number of bytes formatted.
     59 * @param   pfnOutput       Pointer to output function.
     60 * @param   pvArgOutput     Argument for the output function.
     61 * @param   chQuote         The quote character.
     62 * @param   psz             The string to quote.
     63 * @param   cch             The string length.
     64 */
     65static size_t dbgcStringOutputInQuotes(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, char chQuote, const char *psz, size_t cch)
     66{
     67    size_t cchOutput = pfnOutput(pvArgOutput, &chQuote, 1);
     68
     69    while (cch > 0)
     70    {
     71        char *pchQuote = (char *)memchr(psz, chQuote, cch);
     72        if (!pchQuote)
     73        {
     74            cchOutput += pfnOutput(pvArgOutput, psz, cch);
     75            break;
     76        }
     77        size_t cchSub = pchQuote - psz + 1;
     78        cchOutput += pfnOutput(pvArgOutput, psz, cchSub);
     79        cchOutput += pfnOutput(pvArgOutput, &chQuote, 1);
     80        cchSub -= cchSub;
     81        psz    += cchSub;
     82    }
     83
     84    cchOutput += pfnOutput(pvArgOutput, &chQuote, 1);
     85    return cchOutput;
    5286}
    5387
     
    103137                case DBGCVAR_TYPE_HC_PHYS:
    104138                    return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "#%%%%%RHp", pVar->u.HCPhys);
    105                 case DBGCVAR_TYPE_STRING:
    106                     return pfnOutput(pvArgOutput, pVar->u.pszString, (size_t)pVar->u64Range);
    107139                case DBGCVAR_TYPE_NUMBER:
    108140                    return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "%llx", pVar->u.u64Number);
     141                case DBGCVAR_TYPE_STRING:
     142                    return dbgcStringOutputInQuotes(pfnOutput, pvArgOutput, '"', pVar->u.pszString, (size_t)pVar->u64Range);
     143                case DBGCVAR_TYPE_SYMBOL:
     144                    return dbgcStringOutputInQuotes(pfnOutput, pvArgOutput, '\'', pVar->u.pszString, (size_t)pVar->u64Range);
    109145
    110146                case DBGCVAR_TYPE_UNKNOWN:
     
    149185                case DBGCVAR_TYPE_HC_PHYS:
    150186                    return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "#%%%%%RHp%s", pVar->u.HCPhys, szRange);
    151                 case DBGCVAR_TYPE_STRING:
    152                     return pfnOutput(pvArgOutput, pVar->u.pszString, (size_t)pVar->u64Range);
    153187                case DBGCVAR_TYPE_NUMBER:
    154188                    return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "%llx%s", pVar->u.u64Number, szRange);
     189                case DBGCVAR_TYPE_STRING:
     190                    return dbgcStringOutputInQuotes(pfnOutput, pvArgOutput, '"', pVar->u.pszString, (size_t)pVar->u64Range);
     191                case DBGCVAR_TYPE_SYMBOL:
     192                    return dbgcStringOutputInQuotes(pfnOutput, pvArgOutput, '\'', pVar->u.pszString, (size_t)pVar->u64Range);
    155193
    156194                case DBGCVAR_TYPE_UNKNOWN:
     
    710748            return VINF_SUCCESS;
    711749
    712         case DBGCVAR_TYPE_STRING:
    713750        case DBGCVAR_TYPE_SYMBOL:
    714751        {
     
    720757        }
    721758
     759        case DBGCVAR_TYPE_STRING:
    722760        case DBGCVAR_TYPE_HC_FLAT:
    723761        case DBGCVAR_TYPE_HC_PHYS:
     
    793831            break;
    794832        case DBGCVAR_TYPE_SYMBOL:
     833            /** @todo try convert as symbol? */
    795834        case DBGCVAR_TYPE_STRING:
    796835            return VERR_DBGC_PARSE_INCORRECT_ARG_TYPE; /** @todo better error code! */
     
    813852    switch (pVar->enmType)
    814853    {
     854        case DBGCVAR_TYPE_SYMBOL:
    815855        case DBGCVAR_TYPE_STRING:
    816             /** @todo add strcasecmp / stricmp wrappers to iprt/string.h. */
    817             if (    !strcmp(pVar->u.pszString, "true")
    818                 ||  !strcmp(pVar->u.pszString, "True")
    819                 ||  !strcmp(pVar->u.pszString, "TRUE")
    820                 ||  !strcmp(pVar->u.pszString, "on")
    821                 ||  !strcmp(pVar->u.pszString, "On")
    822                 ||  !strcmp(pVar->u.pszString, "oN")
    823                 ||  !strcmp(pVar->u.pszString, "ON")
    824                 ||  !strcmp(pVar->u.pszString, "enabled")
    825                 ||  !strcmp(pVar->u.pszString, "Enabled")
    826                 ||  !strcmp(pVar->u.pszString, "DISABLED"))
     856            if (    !RTStrICmp(pVar->u.pszString, "true")
     857                ||  !RTStrICmp(pVar->u.pszString, "on")
     858                ||  !RTStrICmp(pVar->u.pszString, "no")
     859                ||  !RTStrICmp(pVar->u.pszString, "enabled"))
    827860            {
    828861                *pf = true;
    829862                return VINF_SUCCESS;
    830863            }
    831             if (    !strcmp(pVar->u.pszString, "false")
    832                 ||  !strcmp(pVar->u.pszString, "False")
    833                 ||  !strcmp(pVar->u.pszString, "FALSE")
    834                 ||  !strcmp(pVar->u.pszString, "off")
    835                 ||  !strcmp(pVar->u.pszString, "Off")
    836                 ||  !strcmp(pVar->u.pszString, "OFF")
    837                 ||  !strcmp(pVar->u.pszString, "disabled")
    838                 ||  !strcmp(pVar->u.pszString, "Disabled")
    839                 ||  !strcmp(pVar->u.pszString, "DISABLED"))
     864            if (    !RTStrICmp(pVar->u.pszString, "false")
     865                ||  !RTStrICmp(pVar->u.pszString, "off")
     866                ||  !RTStrICmp(pVar->u.pszString, "yes")
     867                ||  !RTStrICmp(pVar->u.pszString, "disabled"))
    840868            {
    841869                *pf = false;
     
    853881
    854882        case DBGCVAR_TYPE_GC_FAR:
    855         case DBGCVAR_TYPE_SYMBOL:
    856883        default:
    857884            return VERR_DBGC_PARSE_INCORRECT_ARG_TYPE;
Note: See TracChangeset for help on using the changeset viewer.

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