Changeset 60028 in vbox for trunk/src/VBox/Runtime/common/string
- Timestamp:
- Mar 15, 2016 10:39:16 AM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 106008
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/common/string/RTStrPrintHexBytes.cpp
r57358 r60028 5 5 6 6 /* 7 * Copyright (C) 2009-201 5Oracle Corporation7 * Copyright (C) 2009-2016 Oracle Corporation 8 8 * 9 9 * This file is part of VirtualBox Open Source Edition (OSE), as … … 36 36 37 37 38 RTDECL(int) RTStrPrintHexBytes(char *pszBuf, size_t c chBuf, void const *pv, size_t cb, uint32_t fFlags)38 RTDECL(int) RTStrPrintHexBytes(char *pszBuf, size_t cbBuf, void const *pv, size_t cb, uint32_t fFlags) 39 39 { 40 AssertReturn(!(fFlags & ~RTSTRPRINTHEXBYTES_F_UPPER), VERR_INVALID_PARAMETER); 40 AssertReturn( !(fFlags & ~(RTSTRPRINTHEXBYTES_F_UPPER | RTSTRPRINTHEXBYTES_F_SEP_SPACE | RTSTRPRINTHEXBYTES_F_SEP_COLON)) 41 && (fFlags & (RTSTRPRINTHEXBYTES_F_SEP_SPACE | RTSTRPRINTHEXBYTES_F_SEP_COLON)) 42 != (RTSTRPRINTHEXBYTES_F_SEP_SPACE | RTSTRPRINTHEXBYTES_F_SEP_COLON), 43 VERR_INVALID_FLAGS); 41 44 AssertPtrReturn(pszBuf, VERR_INVALID_POINTER); 42 45 AssertReturn(cb * 2 >= cb, VERR_BUFFER_OVERFLOW); 43 AssertReturn(cchBuf >= cb * 2 + 1, VERR_BUFFER_OVERFLOW); 46 char const chSep = fFlags & RTSTRPRINTHEXBYTES_F_SEP_SPACE ? ' ' 47 : fFlags & RTSTRPRINTHEXBYTES_F_SEP_COLON ? ':' : '\0'; 48 AssertReturn(cbBuf >= cb * (2 + (chSep != '\0')) - (chSep != '\0') + 1, VERR_BUFFER_OVERFLOW); 44 49 if (cb) 45 50 AssertPtrReturn(pv, VERR_INVALID_POINTER); … … 50 55 51 56 uint8_t const *pb = (uint8_t const *)pv; 52 while (cb-- > 0) 57 58 if (!chSep) 59 { 60 while (cb-- > 0) 61 { 62 uint8_t b = *pb++; 63 *pszBuf++ = pszHexDigits[b >> 4]; 64 *pszBuf++ = pszHexDigits[b & 0xf]; 65 } 66 } 67 else if (cb-- > 0) 53 68 { 54 69 uint8_t b = *pb++; 55 70 *pszBuf++ = pszHexDigits[b >> 4]; 56 71 *pszBuf++ = pszHexDigits[b & 0xf]; 72 73 while (cb-- > 0) 74 { 75 b = *pb++; 76 *pszBuf++ = chSep; 77 *pszBuf++ = pszHexDigits[b >> 4]; 78 *pszBuf++ = pszHexDigits[b & 0xf]; 79 } 57 80 } 81 58 82 *pszBuf = '\0'; 59 83 return VINF_SUCCESS;
Note:
See TracChangeset
for help on using the changeset viewer.