VirtualBox

Ignore:
Timestamp:
Mar 25, 2020 7:37:25 PM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
136644
Message:

RUntime/RTJson: Add parse from VFS file method

File:
1 edited

Legend:

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

    r82968 r83425  
    4040#include <iprt/string.h>
    4141#include <iprt/utf16.h>
     42#include <iprt/vfs.h>
    4243
    4344#include <stdlib.h> /* strtod() */
     
    260261        PRTSTREAM           hStream;
    261262        const uint8_t       *pbBuf;
     263        RTVFSFILE           hVfsFile;
    262264    } u;
    263265} RTJSONREADERARGS;
     
    14291431}
    14301432
     1433/**
     1434 * Read callback for RTJsonParseFromVfsFile().
     1435 */
     1436static DECLCALLBACK(int) rtJsonTokenizerParseFromVfsFile(void *pvUser, size_t offInput,
     1437                                                         void *pvBuf, size_t cbBuf,
     1438                                                         size_t *pcbRead)
     1439{
     1440    PRTJSONREADERARGS pArgs = (PRTJSONREADERARGS)pvUser;
     1441
     1442    RT_NOREF_PV(offInput);
     1443
     1444    size_t cbRead = 0;
     1445    int rc = RTVfsFileRead(pArgs->u.hVfsFile, pvBuf, cbBuf, &cbRead);
     1446    if (RT_SUCCESS(rc))
     1447        *pcbRead = cbRead;
     1448
     1449    return rc;
     1450}
     1451
    14311452RTDECL(int) RTJsonParseFromBuf(PRTJSONVAL phJsonVal, const uint8_t *pbBuf, size_t cbBuf, PRTERRINFO pErrInfo)
    14321453{
     
    14911512        }
    14921513        RTStrmClose(Args.u.hStream);
     1514    }
     1515
     1516    return rc;
     1517}
     1518
     1519RTDECL(int) RTJsonParseFromVfsFile(PRTJSONVAL phJsonVal, RTVFSFILE hVfsFile, PRTERRINFO pErrInfo)
     1520{
     1521    AssertPtrReturn(phJsonVal, VERR_INVALID_POINTER);
     1522    AssertReturn(hVfsFile != NIL_RTVFSFILE, VERR_INVALID_POINTER);
     1523
     1524    int rc = VINF_SUCCESS;
     1525    RTJSONREADERARGS Args;
     1526    RTJSONTOKENIZER Tokenizer;
     1527
     1528    Args.cbData   = 0;
     1529    Args.u.hVfsFile = hVfsFile;
     1530    rc = rtJsonTokenizerInit(&Tokenizer, rtJsonTokenizerParseFromVfsFile, &Args, pErrInfo);
     1531    if (RT_SUCCESS(rc))
     1532    {
     1533        rc = rtJsonParse(&Tokenizer, phJsonVal);
     1534        rtJsonTokenizerDestroy(&Tokenizer);
    14931535    }
    14941536
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