- switch (c) {
- case trace::BACKTRACE_END:
- return true;
- case trace::BACKTRACE_MODULE:
- frame->module = read_string();
- break;
- case trace::BACKTRACE_FUNCTION:
- frame->function = read_string();
- break;
- case trace::BACKTRACE_FILENAME:
- frame->filename = read_string();
- break;
- case trace::BACKTRACE_LINENUMBER:
- frame->linenumber = read_uint();
- break;
- case trace::BACKTRACE_OFFSET:
- frame->offset = read_uint();
- break;
- default:
- std::cerr << "error: unknown backtrace detail "
- << c << "\n";
- exit(1);
- case -1:
- return false;
+ while (c != trace::BACKTRACE_END &&
+ c != -1) {
+ switch (c) {
+ case trace::BACKTRACE_MODULE:
+ frame->module = read_string();
+ break;
+ case trace::BACKTRACE_FUNCTION:
+ frame->function = read_string();
+ break;
+ case trace::BACKTRACE_FILENAME:
+ frame->filename = read_string();
+ break;
+ case trace::BACKTRACE_LINENUMBER:
+ frame->linenumber = read_uint();
+ break;
+ case trace::BACKTRACE_OFFSET:
+ frame->offset = read_uint();
+ break;
+ default:
+ std::cerr << "error: unknown backtrace detail "
+ << c << "\n";
+ exit(1);
+ }
+ c = read_byte();