Refactored project structure, added multithreaded echo server and prime checking server, updated tests.
This commit is contained in:
58
data.c
58
data.c
@@ -6,6 +6,25 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#define PORT 40000
|
||||
SOCKET get_listen_socket() {
|
||||
WSADATA WSAData;
|
||||
|
||||
SOCKET client;
|
||||
|
||||
SOCKADDR_IN serverAddr, clientAddr;
|
||||
|
||||
WSAStartup(MAKEWORD(2,0), &WSAData);
|
||||
SOCKET server = socket(AF_INET, SOCK_STREAM, 0);
|
||||
|
||||
serverAddr.sin_addr.s_addr = INADDR_ANY;
|
||||
serverAddr.sin_family = AF_INET;
|
||||
serverAddr.sin_port = htons(PORT);
|
||||
|
||||
bind(server, (SOCKADDR *)&serverAddr, sizeof(serverAddr));
|
||||
listen(server, 0);
|
||||
return server;
|
||||
}
|
||||
|
||||
char_array_t *char_array_create(int capacity) {
|
||||
char_array_t *array = malloc(sizeof(char_array_t));
|
||||
@@ -22,10 +41,11 @@ void char_array_append(char_array_t *array, char *value, size_t length) {
|
||||
if (array->data == NULL) {
|
||||
exit(1);
|
||||
}
|
||||
printf("old size: %llu\n", array->size);
|
||||
printf("length: %llu\n", length);
|
||||
// char *temp = calloc(length+1, sizeof(char));
|
||||
// memcpy(temp, value, length);
|
||||
// printf("Appending '%s' bytes\n", temp);
|
||||
// free(temp);
|
||||
size_t new_size = array->size + length;
|
||||
printf("New size: %llu\n", new_size);
|
||||
if (new_size > array->capacity) {
|
||||
array->capacity = new_size;
|
||||
char *new_array = realloc(array->data, array->capacity);
|
||||
@@ -47,3 +67,35 @@ void char_array_wipe(char_array_t *array) {
|
||||
array->size = 0;
|
||||
memset(array->data, 0, array->capacity);
|
||||
};
|
||||
|
||||
bool char_array_has_char(char_array_t *array, char c) {
|
||||
const char *ret = memchr(array->data, c, array->size);
|
||||
if (ret == NULL) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
char *char_array_get_until_char(char_array_t *array, char c) {
|
||||
size_t idx = 0;
|
||||
for (size_t i = 0; i < array->size; i++) {
|
||||
if (array->data[i] == c) {
|
||||
idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (idx == 0) {
|
||||
return NULL;
|
||||
}
|
||||
char *ret = malloc(idx+1);
|
||||
memcpy(ret, array->data, idx);
|
||||
ret[idx] = '\0';
|
||||
char *temp = calloc(array->capacity, sizeof(char));
|
||||
size_t new_i = 0;
|
||||
for (size_t i = idx+1; i < array->size; i++) {
|
||||
temp[new_i++] = array->data[i];
|
||||
}
|
||||
free(array->data);
|
||||
array->data = temp;
|
||||
array->size = new_i;
|
||||
return ret;
|
||||
};
|
||||
Reference in New Issue
Block a user