VirtualBox

Ignore:
Timestamp:
Mar 14, 2014 9:13:23 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
92818
Message:

iprt: Added RTSTR_VALIDATE_ENCODING_EXACT_LENGTH for RTStrValidateEncodingEx and RTUtf16ValidateEncodingEx.

Location:
trunk/src/VBox/Runtime/common/string
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/string/utf-16.cpp

    r50792 r50793  
    319319RTDECL(int) RTUtf16ValidateEncodingEx(PCRTUTF16 pwsz, size_t cwc, uint32_t fFlags)
    320320{
    321     AssertReturn(!(fFlags & ~(RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED)), VERR_INVALID_PARAMETER);
     321    AssertReturn(!(fFlags & ~(RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED | RTSTR_VALIDATE_ENCODING_EXACT_LENGTH)),
     322                 VERR_INVALID_PARAMETER);
    322323    AssertPtr(pwsz);
    323324
     
    330331    if (RT_SUCCESS(rc))
    331332    {
    332         if (    (fFlags & RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED)
    333             &&  cwcActual >= cwc)
     333        if (fFlags & RTSTR_VALIDATE_ENCODING_EXACT_LENGTH)
     334        {
     335            if (fFlags & RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED)
     336                cwcActual++;
     337            if (cwcActual == cwc)
     338                rc = VINF_SUCCESS;
     339            else if (cwcActual < cwc)
     340                rc = VERR_BUFFER_UNDERFLOW;
     341            else
     342                rc = VERR_BUFFER_OVERFLOW;
     343        }
     344        else if (    (fFlags & RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED)
     345                 &&  cwcActual >= cwc)
    334346            rc = VERR_BUFFER_OVERFLOW;
    335347    }
  • trunk/src/VBox/Runtime/common/string/utf-8.cpp

    r48935 r50793  
    301301RTDECL(int) RTStrValidateEncodingEx(const char *psz, size_t cch, uint32_t fFlags)
    302302{
    303     AssertReturn(!(fFlags & ~(RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED)), VERR_INVALID_PARAMETER);
     303    AssertReturn(!(fFlags & ~(RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED | RTSTR_VALIDATE_ENCODING_EXACT_LENGTH)),
     304                 VERR_INVALID_PARAMETER);
    304305    AssertPtr(psz);
    305306
     
    312313    if (RT_SUCCESS(rc))
    313314    {
    314         if (    (fFlags & RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED)
    315             &&  cchActual >= cch)
     315        if (fFlags & RTSTR_VALIDATE_ENCODING_EXACT_LENGTH)
     316        {
     317            if (fFlags & RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED)
     318                cchActual++;
     319            if (cchActual == cch)
     320                rc = VINF_SUCCESS;
     321            else if (cchActual < cch)
     322                rc = VERR_BUFFER_UNDERFLOW;
     323            else
     324                rc = VERR_BUFFER_OVERFLOW;
     325        }
     326        else if (    (fFlags & RTSTR_VALIDATE_ENCODING_ZERO_TERMINATED)
     327                 &&  cchActual >= cch)
    316328            rc = VERR_BUFFER_OVERFLOW;
    317329    }
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