Bug #1066 » T1066.patch
src/tiffimage.cpp (working copy) | ||
---|---|---|
48 | 48 |
#include <iostream> |
49 | 49 |
#include <iomanip> |
50 | 50 |
#include <cassert> |
51 |
#include <memory> |
|
52 | 51 |
#include <cstdarg> |
53 | 52 | |
54 | 53 |
/* -------------------------------------------------------------------------- |
... | ... | |
345 | 344 |
// http://stackoverflow.com/questions/2342162/stdstring-formatting-like-sprintf |
346 | 345 |
static std::string stringFormat(const std::string fmt_str, ...) { |
347 | 346 |
int n = ((int)fmt_str.size()) * 2; /* Reserve two times as much as the length of the fmt_str */ |
348 |
std::unique_ptr<char[]> formatted;
|
|
347 |
char* formatted;
|
|
349 | 348 |
std::string str; |
350 | 349 |
va_list ap; |
351 | 350 |
bool ok = true; |
352 |
while(ok) {
|
|
353 |
formatted.reset(new char[n]); /* Wrap the plain char array into the unique_ptr */
|
|
351 |
do {
|
|
352 |
formatted = new char[n];
|
|
354 | 353 |
strcpy(&formatted[0], fmt_str.c_str()); |
355 | 354 |
va_start(ap, fmt_str); |
356 | 355 |
int final = vsnprintf(&formatted[0], n, fmt_str.c_str(), ap); |
357 | 356 |
va_end(ap); |
358 | 357 |
ok = final < 0 || final >= n; |
359 |
if ( ok ) n += abs(final - n + 1); |
|
360 |
} |
|
361 |
return std::string(formatted.get()); |
|
358 |
if (ok) { |
|
359 |
n += abs(final - n + 1); |
|
360 |
} |
|
361 |
else { |
|
362 |
str = std::string(formatted); |
|
363 |
} |
|
364 |
delete[] formatted; |
|
365 |
} while (ok); |
|
366 |
return str; |
|
362 | 367 |
} |
363 | 368 | |
364 | 369 |
std::string stringValue(byte* buff,size_t size) |
- « Previous
- 1
- 2
- 3
- Next »