in Source/PLCrashAsync.c [454:489]
bool plcrash_async_file_write (plcrash_async_file_t *file, const void *data, size_t len) {
/* Check and update output limit */
if (file->limit_bytes != 0 && len + file->total_bytes > file->limit_bytes) {
return false;
} else if (file->limit_bytes != 0) {
file->total_bytes += len;
}
/* Check if the buffer will fill */
if (file->buflen + len > sizeof(file->buffer)) {
/* Flush the buffer */
if (plcrash_async_writen(file->fd, file->buffer, file->buflen) < 0) {
PLCF_DEBUG("Error occured writing to crash log: %s", strerror(errno));
return false;
}
file->buflen = 0;
}
/* Check if the new data fits within the buffer, if so, buffer it */
if (len + file->buflen <= sizeof(file->buffer)) {
plcrash_async_memcpy(file->buffer + file->buflen, data, len);
file->buflen += len;
return true;
} else {
/* Won't fit in the buffer, just write it */
if (plcrash_async_writen(file->fd, data, len) < 0) {
PLCF_DEBUG("Error occured writing to crash log: %s", strerror(errno));
return false;
}
return true;
}
}