210 #ifdef va_copy |
210 #ifdef va_copy |
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*)a->malloc(a->pool, ret + 1); |
215 s.ptr = (char*)almalloc(a, ret + 1); |
216 s.length = (size_t)ret; |
216 s.length = (size_t)ret; |
217 memcpy(s.ptr, buf, ret); |
217 memcpy(s.ptr, buf, ret); |
218 s.ptr[s.length] = '\0'; |
218 s.ptr[s.length] = '\0'; |
219 } else if (ret == INT_MAX) { |
219 } else if (ret == INT_MAX) { |
220 errno = ENOMEM; |
220 errno = ENOMEM; |
221 } else { |
221 } else { |
222 int len = ret + 1; |
222 int len = ret + 1; |
223 s.ptr = (char*)a->malloc(a->pool, len); |
223 s.ptr = (char*)almalloc(a, len); |
224 ret = vsnprintf(s.ptr, len, fmt, ap2); |
224 ret = vsnprintf(s.ptr, len, fmt, ap2); |
225 if (ret < 0) { |
225 if (ret < 0) { |
226 free(s.ptr); |
226 free(s.ptr); |
227 s.ptr = NULL; |
227 s.ptr = NULL; |
228 } else { |
228 } else { |
230 } |
230 } |
231 } |
231 } |
232 #else |
232 #else |
233 int ret = vsnprintf(buf, UCX_PRINTF_BUFSIZE, fmt, ap); |
233 int ret = vsnprintf(buf, UCX_PRINTF_BUFSIZE, fmt, ap); |
234 if (ret > 0 && ret < UCX_PRINTF_BUFSIZE) { |
234 if (ret > 0 && ret < UCX_PRINTF_BUFSIZE) { |
235 s.ptr = (char*)a->malloc(a->pool, ret + 1); |
235 s.ptr = (char*)almalloc(a, ret + 1); |
236 s.length = (size_t)ret; |
236 s.length = (size_t)ret; |
237 memcpy(s.ptr, buf, ret); |
237 memcpy(s.ptr, buf, ret); |
238 s.ptr[s.length] = '\0'; |
238 s.ptr[s.length] = '\0'; |
239 } else { |
239 } else { |
240 errno = ENOMEM; |
240 errno = ENOMEM; |