VirtualBox

Ignore:
Timestamp:
Dec 22, 2021 2:21:25 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
149064
Message:

IPRT: Added RTStrDupNEx and RTStrDupNExTag.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/string/stringalloc.cpp

    r83979 r93057  
    116116
    117117
    118 RTDECL(int)  RTStrDupExTag(char **ppszString, const char *pszString, const char *pszTag)
     118RTDECL(int)  RTStrDupExTag(char **ppszCopy, const char *pszString, const char *pszTag)
    119119{
    120120#if defined(__cplusplus)
    121     AssertPtr(ppszString);
     121    AssertPtr(ppszCopy);
    122122    AssertPtr(pszString);
    123123#endif
    124124
    125     size_t cch = strlen(pszString) + 1;
    126     char *psz = (char *)RTMemAllocTag(cch, pszTag);
    127     if (psz)
    128     {
    129         memcpy(psz, pszString, cch);
    130         *ppszString = psz;
    131         return VINF_SUCCESS;
    132     }
    133     return VERR_NO_MEMORY;
     125    size_t cch = strlen(pszString);
     126    char *pszDst = (char *)RTMemAllocTag(cch + 1, pszTag);
     127    if (pszDst)
     128    {
     129        memcpy(pszDst, pszString, cch);
     130        pszDst[cch] = '\0';
     131        *ppszCopy = pszDst;
     132        return VINF_SUCCESS;
     133    }
     134    *ppszCopy = NULL;
     135    return VERR_NO_STR_MEMORY;
    134136}
    135137RT_EXPORT_SYMBOL(RTStrDupExTag);
     
    152154}
    153155RT_EXPORT_SYMBOL(RTStrDupNTag);
     156
     157
     158RTDECL(int) RTStrDupNExTag(char **ppszCopy, const char *pszString, size_t cchMax, const char *pszTag)
     159{
     160#if defined(__cplusplus)
     161    AssertPtr(pszString);
     162#endif
     163    char const *pszEnd = RTStrEnd(pszString, cchMax);
     164    size_t      cch    = pszEnd ? (uintptr_t)pszEnd - (uintptr_t)pszString : cchMax;
     165    char       *pszDst = (char *)RTMemAllocTag(cch + 1, pszTag);
     166    if (pszDst)
     167    {
     168        memcpy(pszDst, pszString, cch);
     169        pszDst[cch] = '\0';
     170        *ppszCopy = pszDst;
     171        return VINF_SUCCESS;
     172    }
     173    *ppszCopy = NULL;
     174    return VERR_NO_STR_MEMORY;
     175}
     176RT_EXPORT_SYMBOL(RTStrDupNExTag);
    154177
    155178
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