Changeset 68070 in vbox for trunk/include/iprt/cpp
- Timestamp:
- Jul 20, 2017 4:21:14 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/cpp/path.h
r68054 r68070 39 39 40 40 /** 41 * Wrapper around RTPathAbs() that returns the result in the given buffer.41 * RTPathAbs() wrapper for working directly on a RTCString instance. 42 42 * 43 43 * @returns IPRT status code. … … 52 52 { 53 53 char *pszDst = rStrAbs.mutableRaw(); 54 rc = RTPathAbs(pszRelative, pszDst, rStrAbs.capacity() - 1);54 rc = RTPathAbs(pszRelative, pszDst, rStrAbs.capacity()); 55 55 if (RT_FAILURE(rc)) 56 56 *pszDst = '\0'; … … 62 62 63 63 /** 64 * Wrapper around RTPathAbs() that returns the result in the given buffer.64 * RTPathAbs() wrapper for working directly on a RTCString instance. 65 65 * 66 66 * @returns IPRT status code. … … 74 74 75 75 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 */ 82 DECLINLINE(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 */ 106 DECLINLINE(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 */ 138 DECLINLINE(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 76 162 /** @} */ 77 163
Note:
See TracChangeset
for help on using the changeset viewer.