| 149 | } |
| 150 | |
| 151 | void StatusVector::ImplStatusVector::putStrArg(unsigned startWith) |
| 152 | { |
| 153 | for (ISC_STATUS* arg = m_status_vector.begin() + startWith; *arg != isc_arg_end; arg += fb_utils::nextArg(*arg)) |
| 154 | { |
| 155 | if (!fb_utils::isStr(*arg)) |
| 156 | continue; |
| 157 | |
| 158 | const char** ptr = reinterpret_cast<const char**>(&arg[fb_utils::nextArg(*arg) - 1]); |
| 159 | unsigned pos = m_strings.length(); |
| 160 | const char* oldBase = m_strings.c_str(); |
| 161 | |
| 162 | if (*arg == isc_arg_cstring) |
| 163 | { |
| 164 | m_strings.reserve(m_strings.length() + arg[1] + 1); |
| 165 | m_strings.append(*ptr, arg[1]); |
| 166 | m_strings.append(1, '\0'); |
| 167 | } |
| 168 | else |
| 169 | m_strings.append(*ptr, strlen(*ptr) + 1); |
| 170 | |
| 171 | *ptr = &m_strings[pos]; |
| 172 | setStrPointers(oldBase); |
| 173 | } |
| 174 | } |
| 175 | |
| 176 | void StatusVector::ImplStatusVector::setStrPointers(const char* oldBase) |
| 177 | { |