void InputStreamPreloader::dbg_dump()

in src/dxapi/native/io/streams.cpp [189:264]


void InputStreamPreloader::dbg_dump(size_t startOffset, size_t nBytes, bool dumpHex, bool dumpUnchunked)
{
    char basename[200];
    char name[200];
    FILE *f;
    const byte *data    = &data_[startOffset];
    const byte *end     = data + nBytes;
    uint64 time_ms      = time_ns() / TIME_NANOS_PER_MILLISECOND;

    sprintf(basename, "preloaded@%llu", (ulonglong)time_ms);
    sprintf(name, "%s.bin", basename);

    f = fopen(name, "wb");
    fwrite(data, 1, nBytes, f);
    fclose(f);
    dbg_log("Saved dump of preload buffer");

    if (dumpUnchunked) {
        // Use external unchunking code for now
#if 0
        vector<byte> out;

        sprintf(name, "%s_unc.bin", basename);
        f = fopen(name, "wb");
        //puts(name);

        const byte * p = data;
        while (p < end - 1) {
            char * endptr;
            
            ulonglong length = strtoull((const char *)p, &endptr, 0x10);
            assert(NULL != endptr);
            assert(endptr[0] == '\xD');
            assert(endptr[1] == '\xA');
            if (0 == length) break;
            p = (byte *)endptr + 2;

            size_t inext = p - data_.data() + length;
            if (inext >= i) {
                inext = i;
                length = inext - (p - data_.data());
                out.resize(out.size() + length);
                memcpy(&out[out.size() - length], p, length);
                break;
            }
            else {
                out.resize(out.size() + length);
                memcpy(&out[out.size() - length], p, length);
            }

            p += length;
            assert(p[0] == '\xD');
            assert(p[1] == '\xA');
            p += 2;
            i = p - data_.data();
        }

        fwrite(out.data(), out.size(), 1, f);

        fclose(f);
        dbg_log("Saved dump of preload buffer without HTTP chunks");
#endif
    }

    if (dumpHex) {
        sprintf(name, "%s.txt", basename);
        f = fopen(name, "wt");
        forn(i, end - data) {
            // Printf a hex value with optional EOL character after every 16 values
            fprintf(f, "%02X%c", data[i], " \n"[0xF == (i & 0xF)]);
        }

        fclose(f);
        dbg_log("Saved dump of preload buffer in hex text format");
    }
}