server02 passed

This commit is contained in:
2025-07-29 20:26:05 +01:00
parent 6677c0f4e1
commit da1525252a
4 changed files with 116 additions and 18 deletions

84
data.c
View File

@@ -61,6 +61,14 @@ void char_array_print(const char_array_t *array) {
printf("%s", array->data);
};
void char_array_print_hex(const char_array_t *array) {
printf("array: ");
for (int i = 0; i < array->size; i++) {
printf("%02x:", array->data[i]);
}
printf("\n");
};
void char_array_wipe(char_array_t *array) {
array->size = 0;
memset(array->data, 0, array->capacity);
@@ -96,8 +104,12 @@ char *char_array_get_bytes(char_array_t *array, size_t length) {
return NULL;
}
char *ret = malloc(length);
char *ret = calloc(length, sizeof(char));
printf("before: %c %02x:%02x:%02x:%02x %02x:%02x:%02x:%02x\n", ret[0], ret[1], ret[2], ret[3], ret[4], ret[5], ret[6], ret[7], ret[8]);
memcpy(ret, array->data, length);
printf("after: %c %02x:%02x:%02x:%02x %02x:%02x:%02x:%02x\n", ret[0], ret[1], ret[2], ret[3], ret[4], ret[5], ret[6], ret[7], ret[8]);
printf("weird: %x\n", ret[3]);
printf("weird: %x\n", array->data[3]);
char_array_shift_bytes(array, length);
return ret;
}
@@ -110,4 +122,74 @@ void char_array_shift_bytes(char_array_t *array, size_t length) {
memmove(array->data, array->data + length, array->size - length);
array->size -= length;
}
byte_array_t *byte_array_create(int size) {
byte_array_t *array = malloc(sizeof(byte_array_t));
array->capacity = size;
array->size = 0;
array->data = calloc(size, sizeof(uint8_t));
return array;
}
void byte_array_destroy(byte_array_t *array) {
free(array->data);
free(array);
};
void byte_array_append(byte_array_t *array, byte *value, size_t length) {
if (array->data == NULL) {
exit(1);
}
size_t new_size = array->size + length;
if (new_size > array->capacity) {
array->capacity = new_size;
uint8_t *new_array = realloc(array->data, array->capacity);
array->data = new_array;
if (array->data == NULL) {}
}
memcpy(array->data+array->size, value, length);
array->size = new_size;
}
void byte_array_print(const byte_array_t *array) {
printf("btye_array size %llu: ", array->size);
for (int i = 0; i < array->size; i++) {
printf("%02x:", array->data[i]);
}
printf("\n");
}
uint8_t *byte_array_get_until_byte(byte_array_t *array, uint8_t b) {
size_t idx = 0;
for (size_t i = 0; i < array->size; i++) {
if (array->data[i] == b) {
idx = i;
break;
}
}
if (idx == 0) {
return NULL;
}
uint8_t *ret = malloc(idx+1);
memcpy(ret, array->data, idx);
ret[idx] = '\0';
byte_array_shift_bytes(array, idx+1);
return ret;
}
void byte_array_shift_bytes(byte_array_t *array, size_t length) {
if (length >= array->size) {
array->size = 0;
return;
}
memmove(array->data, array->data + length, array->size - length);
array->size -= length;
}
uint8_t *byte_array_get_bytes(byte_array_t *array, size_t length) {
if (length > array->size) {
return NULL;
}
// printf("array size: %llu\n", array->size);
uint8_t *ret = calloc(length, sizeof(uint8_t));
// printf("calloc done\n");
memcpy(ret, array->data, length);
// printf("memcpy done\n");
byte_array_shift_bytes(array, length);
return ret;
}