VirtualBox

Changeset 68070 in vbox for trunk/include/iprt/cpp


Ignore:
Timestamp:
Jul 20, 2017 4:21:14 PM (8 years ago)
Author:
vboxsync
Message:

iprt/cpp/path.h: Added RTPathAppendCxx and RTPathAppPrivateNoArchCxx.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/cpp/path.h

    r68054 r68070  
    3939
    4040/**
    41  * Wrapper around RTPathAbs() that returns the result in the given buffer.
     41 * RTPathAbs() wrapper for working directly on a RTCString instance.
    4242 *
    4343 * @returns IPRT status code.
     
    5252    {
    5353        char *pszDst = rStrAbs.mutableRaw();
    54         rc = RTPathAbs(pszRelative, pszDst, rStrAbs.capacity() - 1);
     54        rc = RTPathAbs(pszRelative, pszDst, rStrAbs.capacity());
    5555        if (RT_FAILURE(rc))
    5656            *pszDst = '\0';
     
    6262
    6363/**
    64  * Wrapper around RTPathAbs() that returns the result in the given buffer.
     64 * RTPathAbs() wrapper for working directly on a RTCString instance.
    6565 *
    6666 * @returns IPRT status code.
     
    7474
    7575
     76/**
     77 * RTPathAppPrivateNoArch() wrapper for working directly on a RTCString instance.
     78 *
     79 * @returns IPRT status code.
     80 * @param   rStrDst         Reference to the destiation string.
     81 */
     82DECLINLINE(int) RTPathAppPrivateNoArchCxx(RTCString &rStrDst)
     83{
     84    int rc = rStrDst.reserveNoThrow(RTPATH_MAX);
     85    if (RT_SUCCESS(rc))
     86    {
     87        char *pszDst = rStrDst.mutableRaw();
     88        rc = RTPathAppPrivateNoArch(pszDst, rStrDst.capacity());
     89        if (RT_FAILURE(rc))
     90            *pszDst = '\0';
     91        rStrDst.jolt();
     92    }
     93    return rc;
     94
     95}
     96
     97
     98/**
     99 * RTPathAppend() wrapper for working directly on a RTCString instance.
     100 *
     101 * @returns IPRT status code.
     102 * @param   rStrDst         Reference to the destiation string.
     103 * @param   pszAppend       One or more components to append to the path already
     104 *                          present in @a rStrDst.
     105 */
     106DECLINLINE(int) RTPathAppendCxx(RTCString &rStrDst, const char *pszAppend)
     107{
     108    Assert(rStrDst.c_str() != pszAppend);
     109    size_t cbEstimate = rStrDst.length() + 1 + strlen(pszAppend) + 1;
     110    int rc;
     111    if (rStrDst.capacity() >= cbEstimate)
     112        rc = VINF_SUCCESS;
     113    else
     114        rc = rStrDst.reserveNoThrow(RT_ALIGN_Z(cbEstimate, 8));
     115    if (RT_SUCCESS(rc))
     116    {
     117        rc = RTPathAppend(rStrDst.mutableRaw(), rStrDst.capacity(), pszAppend);
     118        if (rc == VERR_BUFFER_OVERFLOW)
     119        {
     120            rc = rStrDst.reserveNoThrow(RTPATH_MAX);
     121            if (RT_SUCCESS(rc))
     122                rc = RTPathAppend(rStrDst.mutableRaw(), rStrDst.capacity(), pszAppend);
     123        }
     124        rStrDst.jolt();
     125    }
     126    return rc;
     127}
     128
     129
     130/**
     131 * RTPathAppend() wrapper for working directly on a RTCString instance.
     132 *
     133 * @returns IPRT status code.
     134 * @param   rStrDst         Reference to the destiation string.
     135 * @param   rStrAppend      One or more components to append to the path already
     136 *                          present in @a rStrDst.
     137 */
     138DECLINLINE(int) RTPathAppendCxx(RTCString &rStrDst, RTCString const &rStrAppend)
     139{
     140    Assert(&rStrDst != &rStrAppend);
     141    size_t cbEstimate = rStrDst.length() + 1 + rStrAppend.length() + 1;
     142    int rc;
     143    if (rStrDst.capacity() >= cbEstimate)
     144        rc = VINF_SUCCESS;
     145    else
     146        rc = rStrDst.reserveNoThrow(RT_ALIGN_Z(cbEstimate, 8));
     147    if (RT_SUCCESS(rc))
     148    {
     149        rc = RTPathAppend(rStrDst.mutableRaw(), rStrDst.capacity(), rStrAppend.c_str());
     150        if (rc == VERR_BUFFER_OVERFLOW)
     151        {
     152            rc = rStrDst.reserveNoThrow(RTPATH_MAX);
     153            if (RT_SUCCESS(rc))
     154                rc = RTPathAppend(rStrDst.mutableRaw(), rStrDst.capacity(), rStrAppend.c_str());
     155        }
     156        rStrDst.jolt();
     157    }
     158    return rc;
     159}
     160
     161
    76162/** @} */
    77163
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