pine: fix some warnings

This commit is contained in:
Megamouse 2023-01-07 13:19:11 +01:00 committed by Ivan
parent 99ed77da8c
commit 16bf215d8a

View file

@ -79,13 +79,13 @@ namespace pine
* A preallocated buffer used to store all IPC replies. * A preallocated buffer used to store all IPC replies.
* to the size of 50.000 MsgWrite64 IPC calls. * to the size of 50.000 MsgWrite64 IPC calls.
*/ */
char* m_ret_buffer; std::vector<char> m_ret_buffer;
/** /**
* IPC messages buffer. * IPC messages buffer.
* A preallocated buffer used to store all IPC messages. * A preallocated buffer used to store all IPC messages.
*/ */
char* m_ipc_buffer; std::vector<char> m_ipc_buffer;
/** /**
* IPC Command messages opcodes. * IPC Command messages opcodes.
@ -118,8 +118,8 @@ namespace pine
*/ */
struct IPCBuffer struct IPCBuffer
{ {
int size; /**< Size of the buffer. */ usz size{}; /**< Size of the buffer. */
char* buffer; /**< Buffer. */ char* buffer{}; /**< Buffer. */
}; };
/** /**
@ -144,8 +144,8 @@ namespace pine
*/ */
IPCBuffer ParseCommand(char* buf, char* ret_buffer, u32 buf_size) IPCBuffer ParseCommand(char* buf, char* ret_buffer, u32 buf_size)
{ {
u32 ret_cnt = 5; usz ret_cnt = 5;
u32 buf_cnt = 0; usz buf_cnt = 0;
const auto error = [&]() const auto error = [&]()
{ {
@ -325,7 +325,7 @@ namespace pine
} }
} }
} }
return IPCBuffer{ static_cast<int>(ret_cnt), MakeOkIPC(ret_buffer, ret_cnt) }; return IPCBuffer{ ret_cnt, MakeOkIPC(ret_buffer, ret_cnt) };
} }
/** /**
@ -334,25 +334,25 @@ namespace pine
* size: size of the IPC buffer. * size: size of the IPC buffer.
* return value: buffer containing the status code allocated of size * return value: buffer containing the status code allocated of size
*/ */
static inline char* MakeOkIPC(char* ret_buffer, uint32_t size = 5) static inline char* MakeOkIPC(char* ret_buffer, usz size = 5)
{ {
ToArray<uint32_t>(ret_buffer, size, 0); ToArray(ret_buffer, ::narrow<u32>(size), 0);
ret_buffer[4] = IPC_OK; ret_buffer[4] = IPC_OK;
return ret_buffer; return ret_buffer;
} }
static inline char* MakeFailIPC(char* ret_buffer, uint32_t size = 5) static inline char* MakeFailIPC(char* ret_buffer, usz size = 5)
{ {
ToArray<uint32_t>(ret_buffer, size, 0); ToArray(ret_buffer, ::narrow<u32>(size), 0);
ret_buffer[4] = IPC_FAIL; ret_buffer[4] = IPC_FAIL;
return ret_buffer; return ret_buffer;
} }
/** /**
* Initializes an open socket for IPC communication. * Initializes an open socket for IPC communication.
* return value: -1 if a fatal failure happened, 0 otherwise. * return value: false if a fatal failure happened, true otherwise.
*/ */
int StartSocket() bool StartSocket()
{ {
m_msgsock = accept(m_sock, 0, 0); m_msgsock = accept(m_sock, 0, 0);
@ -371,10 +371,10 @@ namespace pine
{ {
#endif #endif
Impl::error("IPC: An unrecoverable error happened! Shutting down..."); Impl::error("IPC: An unrecoverable error happened! Shutting down...");
return -1; return false;
} }
} }
return 0; return true;
} }
// Thread used to relay IPC commands. // Thread used to relay IPC commands.
@ -382,10 +382,10 @@ namespace pine
{ {
// we allocate once buffers to not have to do mallocs for each IPC // we allocate once buffers to not have to do mallocs for each IPC
// request, as malloc is expansive when we optimize for µs. // request, as malloc is expansive when we optimize for µs.
m_ret_buffer = new char[MAX_IPC_RETURN_SIZE]; m_ret_buffer.resize(MAX_IPC_RETURN_SIZE);
m_ipc_buffer = new char[MAX_IPC_SIZE]; m_ipc_buffer.resize(MAX_IPC_SIZE);
if (StartSocket() < 0) if (!StartSocket())
return; return;
while (thread_ctrl::state() != thread_state::aborting) while (thread_ctrl::state() != thread_state::aborting)
@ -405,7 +405,7 @@ namespace pine
if (tmp_length <= 0) if (tmp_length <= 0)
{ {
receive_length = 0; receive_length = 0;
if (StartSocket() < 0) if (!StartSocket())
return; return;
break; break;
} }
@ -415,7 +415,7 @@ namespace pine
// if we got at least the final size then update // if we got at least the final size then update
if (end_length == 4 && receive_length >= 4) if (end_length == 4 && receive_length >= 4)
{ {
end_length = FromArray<u32>(m_ipc_buffer, 0); end_length = FromArray<u32>(m_ipc_buffer.data(), 0);
// we'd like to avoid a client trying to do OOB // we'd like to avoid a client trying to do OOB
if (end_length > MAX_IPC_SIZE || end_length < 4) if (end_length > MAX_IPC_SIZE || end_length < 4)
{ {
@ -432,12 +432,12 @@ namespace pine
// disconnects // disconnects
if (receive_length != 0) if (receive_length != 0)
{ {
pine_server::IPCBuffer res = ParseCommand(&m_ipc_buffer[4], m_ret_buffer, static_cast<u32>(end_length) - 4); pine_server::IPCBuffer res = ParseCommand(&m_ipc_buffer[4], m_ret_buffer.data(), static_cast<u32>(end_length) - 4);
// if we cannot send back our answer restart the socket // if we cannot send back our answer restart the socket
if (write_portable(m_msgsock, res.buffer, res.size) < 0) if (write_portable(m_msgsock, res.buffer, res.size) < 0)
{ {
if (StartSocket() < 0) if (!StartSocket())
return; return;
} }
} }
@ -453,9 +453,9 @@ namespace pine
* NB: implicitely inlined * NB: implicitely inlined
*/ */
template <typename T> template <typename T>
static char* ToArray(char* res_array, T res, int i) static char* ToArray(char* res_array, T res, usz i)
{ {
memcpy((res_array + i), reinterpret_cast<char*>(&res), sizeof(T)); memcpy(res_array + i, reinterpret_cast<char*>(&res), sizeof(T));
return res_array; return res_array;
} }
@ -476,7 +476,7 @@ namespace pine
* Ensures an IPC message isn't too big. * Ensures an IPC message isn't too big.
* return value: false if checks failed, true otherwise. * return value: false if checks failed, true otherwise.
*/ */
static inline bool SafetyChecks(u32 command_len, int command_size, u32 reply_len, int reply_size = 0, u32 buf_size = MAX_IPC_SIZE - 1) static inline bool SafetyChecks(usz command_len, usz command_size, usz reply_len, usz reply_size = 0, usz buf_size = MAX_IPC_SIZE - 1)
{ {
bool res = ((command_len + command_size) > buf_size || bool res = ((command_len + command_size) > buf_size ||
(reply_len + reply_size) >= MAX_IPC_RETURN_SIZE); (reply_len + reply_size) >= MAX_IPC_RETURN_SIZE);
@ -582,8 +582,6 @@ namespace pine
~pine_server() ~pine_server()
{ {
Cleanup(); Cleanup();
delete[] m_ret_buffer;
delete[] m_ipc_buffer;
} }
}; // class pine_server }; // class pine_server