ucx/utils.c

changeset 174
bbfe511cfddb
parent 173
31a8682fffb7
child 177
11ad03783baf
equal deleted inserted replaced
173:31a8682fffb7 174:bbfe511cfddb
211 va_list ap2; 211 va_list ap2;
212 va_copy(ap2, ap); 212 va_copy(ap2, ap);
213 int ret = vsnprintf(buf, UCX_PRINTF_BUFSIZE, fmt, ap); 213 int ret = vsnprintf(buf, UCX_PRINTF_BUFSIZE, fmt, ap);
214 if (ret > 0 && ret < UCX_PRINTF_BUFSIZE) { 214 if (ret > 0 && ret < UCX_PRINTF_BUFSIZE) {
215 s.ptr = (char*)almalloc(a, ret + 1); 215 s.ptr = (char*)almalloc(a, ret + 1);
216 s.length = (size_t)ret; 216 if (s.ptr) {
217 memcpy(s.ptr, buf, ret); 217 s.length = (size_t)ret;
218 s.ptr[s.length] = '\0'; 218 memcpy(s.ptr, buf, ret);
219 s.ptr[s.length] = '\0';
220 }
219 } else if (ret == INT_MAX) { 221 } else if (ret == INT_MAX) {
220 errno = ENOMEM; 222 errno = ENOMEM;
221 } else { 223 } else {
222 int len = ret + 1; 224 int len = ret + 1;
223 s.ptr = (char*)almalloc(a, len); 225 s.ptr = (char*)almalloc(a, len);
224 ret = vsnprintf(s.ptr, len, fmt, ap2); 226 if (s.ptr) {
225 if (ret < 0) { 227 ret = vsnprintf(s.ptr, len, fmt, ap2);
226 free(s.ptr); 228 if (ret < 0) {
227 s.ptr = NULL; 229 free(s.ptr);
228 } else { 230 s.ptr = NULL;
229 s.length = (size_t)ret; 231 } else {
232 s.length = (size_t)ret;
233 }
230 } 234 }
231 } 235 }
232 #else 236 #else
233 int ret = vsnprintf(buf, UCX_PRINTF_BUFSIZE, fmt, ap); 237 int ret = vsnprintf(buf, UCX_PRINTF_BUFSIZE, fmt, ap);
234 if (ret > 0 && ret < UCX_PRINTF_BUFSIZE) { 238 if (ret > 0 && ret < UCX_PRINTF_BUFSIZE) {
235 s.ptr = (char*)almalloc(a, ret + 1); 239 s.ptr = (char*)almalloc(a, ret + 1);
236 s.length = (size_t)ret; 240 if (s.ptr) {
237 memcpy(s.ptr, buf, ret); 241 s.length = (size_t)ret;
238 s.ptr[s.length] = '\0'; 242 memcpy(s.ptr, buf, ret);
243 s.ptr[s.length] = '\0';
244 }
239 } else { 245 } else {
240 errno = ENOMEM; 246 errno = ENOMEM;
241 } 247 }
242 #endif 248 #endif
243 return s; 249 return s;

mercurial