deployd/server/def.c
Arija A. 8fbb8e8c18
Implement command client
Signed-off-by: Arija A. <ari@ari.lt>
2025-07-24 19:48:39 +03:00

101 lines
1.8 KiB
C

#include "include/conf.h"
#include <ctype.h>
#include "include/def.h"
uint64_t dp_buf2u64_le(const uint8_t buf[8]) {
if (!buf) {
return 0;
}
uint64_t result = 0;
for (uint8_t idx = 0; idx < 8; ++idx) {
result |= ((uint64_t)buf[idx]) << (uint64_t)(8 * idx);
}
return result;
}
bool dp_u642buf_le(uint8_t buf[8], uint64_t num) {
if (!buf) {
return false;
}
for (uint8_t idx = 0; idx < 8; ++idx) {
buf[idx] = (uint8_t)((num >> (uint64_t)(8 * idx)) & (uint64_t)0xFF);
}
return true;
}
bool dp_isnumber(const char *num) {
if (!num) {
return false;
}
for (const char *chr = num; *chr; ++chr) {
if (!isdigit((unsigned char)*chr)) {
return false;
}
}
return true;
}
int dp_u642str(char buf[21], uint64_t value) {
if (!buf) {
return -1;
}
if (value == 0) {
buf[0] = '0';
buf[1] = '\0';
return 1;
}
uint8_t idx = 0;
while (value > 0 && idx < 20) {
buf[idx++] = (char)((value % 10) + '0');
value /= 10;
}
if (value > 0) {
return -1;
}
for (uint8_t jdx = 0; jdx < idx / 2; ++jdx) {
const char temp = buf[jdx];
buf[jdx] = buf[idx - jdx - 1];
buf[idx - jdx - 1] = temp;
}
buf[idx] = '\0';
return idx;
}
uint64_t dp_str2u64(const char *num) {
if (!num || !*num) {
return 0;
}
uint64_t result = 0;
while (*num) {
const char chr = *num++;
if (chr < '0' || chr > '9') {
return false;
}
const uint64_t digit = (uint64_t)(chr - '0');
if (result > (UINT64_MAX - digit) / 10) {
break; /* Overflow */
}
result = result * 10 + digit;
}
return result;
}