71 lines
2.1 KiB
C++
71 lines
2.1 KiB
C++
#include "IOUtils.h"
|
|
#include <cstdint>
|
|
#include <cstring>
|
|
|
|
#define THREAD_INFO_BUFFER_CAPACITY 0x10001
|
|
static char sThreadInfoBuffer[THREAD_INFO_BUFFER_CAPACITY] = {};
|
|
static uint32_t sThreadInfoBufferOffset = 0;
|
|
|
|
char *GetThreadInfoBuffer() {
|
|
sThreadInfoBuffer[sThreadInfoBufferOffset] = '\0';
|
|
return sThreadInfoBuffer;
|
|
}
|
|
void InitThreadInfoBuffer() {
|
|
memset(sThreadInfoBuffer, 0, sizeof(sThreadInfoBuffer));
|
|
sThreadInfoBufferOffset = 0;
|
|
}
|
|
|
|
bool PutStringIntoThreadInfoBuffer(const char *str) {
|
|
uint32_t offset = 0;
|
|
while (str[offset] != '\0') {
|
|
if (sThreadInfoBufferOffset < (THREAD_INFO_BUFFER_CAPACITY - 2)) {
|
|
sThreadInfoBuffer[sThreadInfoBufferOffset] = str[offset];
|
|
sThreadInfoBufferOffset++;
|
|
} else {
|
|
return false;
|
|
}
|
|
offset++;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool PutCharIntoThreadInfoBuffer(char c) {
|
|
// we want to keep a null byte at the end
|
|
if (sThreadInfoBufferOffset < (THREAD_INFO_BUFFER_CAPACITY - 2)) {
|
|
sThreadInfoBuffer[sThreadInfoBufferOffset] = c;
|
|
sThreadInfoBufferOffset++;
|
|
} else {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void PutXMLEscapedStringIntoThreadInfoBuffer(const char *str) {
|
|
if (str != nullptr) {
|
|
const char *curPtr = str;
|
|
while (curPtr[0] != '\0') {
|
|
switch (curPtr[0]) {
|
|
case '<':
|
|
PutStringIntoThreadInfoBuffer("<");
|
|
break;
|
|
case '>':
|
|
PutStringIntoThreadInfoBuffer(">");
|
|
break;
|
|
case '&':
|
|
PutStringIntoThreadInfoBuffer("&");
|
|
break;
|
|
case '"':
|
|
PutStringIntoThreadInfoBuffer(""");
|
|
break;
|
|
case '\'':
|
|
PutStringIntoThreadInfoBuffer("'");
|
|
break;
|
|
default:
|
|
PutCharIntoThreadInfoBuffer(curPtr[0]);
|
|
break;
|
|
}
|
|
curPtr++;
|
|
}
|
|
}
|
|
}
|