Initial push

This commit is contained in:
Ano-sys
2024-12-30 02:06:40 +01:00
commit 817ba850fb
63 changed files with 6775 additions and 0 deletions
+55
View File
@@ -0,0 +1,55 @@
#include "util.h"
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *memstr(char *haystack, size_t n, string needle) {
char *end = haystack + n;
// Iterate through the memory (haystack)
while ((haystack = memchr(haystack, needle[0], end - haystack)) != NULL) {
if (strncmp(haystack, needle, strlen(needle)) == 0) {
return haystack;
}
}
return NULL;
}
uint16_t safe_strtoul(const char *restrict nptr, char **restrict endptr,
int base, const string message) {
errno = 0;
uint16_t result =
strtoul(nptr, endptr, base); // Convert string to unsigned int
if (errno != 0) {
fprintf(stderr, "%s\n", message);
exit(EXIT_FAILURE);
}
return result;
}
uint16_t pseudo_hash(const unsigned char *buffer, size_t buf_len) {
// we use tcp crc16 check here
uint32_t hash = 0;
// add zero padding to the end if buf_len not even
size_t pad_length = buf_len % 2 ? buf_len + 1 : buf_len;
uint8_t *int_buffer = calloc(pad_length, sizeof *buffer);
memcpy(int_buffer, buffer, buf_len);
for (size_t i = 0; i < pad_length; i+=2) {
hash += int_buffer[i] << 8 | int_buffer[i+1];
}
hash = (hash & 0xFFFF) + (hash >> 16);
free(int_buffer);
return (uint16_t) ~hash;
}