in src/dxapi/native/util/logger.cpp [106:146]
static void sizecheck(struct Logger * const self)
{
if (NULL == self) return;
char tempbuffer[DEBUG_COPY_BUFFER_SIZE];
unsigned long fsz, rd_pos, wr_pos; // file size
long left; // number of bytes to copy
int t; // temporary char
int n; // number of bytes currently being copied
int file;
if ((fsz = ftell(self->file)) > self->max_log_size) {
fseek(self->file, fsz - self->max_log_size / 2, SEEK_SET);
do {
t = fgetc(self->file);
} while (t != EOF && t != '\n' && t != '\r');
// code for CR or LF
while (t == '\n' || t == '\r') {
t = fgetc(self->file);
}
left = fsz - (rd_pos = ftell(self->file) - 1);
wr_pos = 0;
fclose(self->file);
if (t != EOF && left) {
file = _open(self->filename, _O_BINARY | _O_RDWR, _S_IREAD | _S_IWRITE);
if (file)
do {
n = min(left, DEBUG_COPY_BUFFER_SIZE);
_lseek(file, rd_pos, SEEK_SET);
rd_pos += _read(file, tempbuffer, n);
_lseek(file, wr_pos, SEEK_SET);
wr_pos += _write(file, tempbuffer, n);
left -= n;
} while (left);
_chsize(file, wr_pos);
_close(file);
}
self->file = fopen(self->filename, "a+t");
fseek(self->file, wr_pos, SEEK_SET);
}
}