Fix exit() in library code, add --include/--max-size/--min-size

This commit is contained in:
2026-07-16 14:15:38 +02:00
parent 07207cd71d
commit bbdf027be8
27 changed files with 568 additions and 264 deletions
+49 -31
View File
@@ -17,7 +17,7 @@ static int io_fd(int dir_fd, int file_descriptor) {
return (dir_fd != -1) ? dir_fd : file_descriptor;
}
void send_n_data(int file_descriptor, void *data, size_t data_size) {
bool send_n_data(int file_descriptor, void *data, size_t data_size) {
log_message(LOG_LEVEL_DEBUG, " Sending n Data: %zu", data_size);
int fd = io_fd(io_write_fd, file_descriptor);
ssize_t total_bytes_send = 0;
@@ -25,28 +25,33 @@ void send_n_data(int file_descriptor, void *data, size_t data_size) {
ssize_t bytes_send =
write(fd, (char *)data + total_bytes_send, data_size - total_bytes_send);
if (bytes_send <= 0) {
perror("Could not send data!");
exit(EXIT_FAILURE);
log_message(LOG_LEVEL_ERROR, "Could not send data");
return false;
}
total_bytes_send += bytes_send;
}
log_message(LOG_LEVEL_DEBUG, " Send n Data: %zu", total_bytes_send);
return true;
}
void receive_n_data(int file_descriptor, void *data, size_t data_size) {
bool receive_n_data(int file_descriptor, void *data, size_t data_size) {
log_message(LOG_LEVEL_DEBUG, " Receiving n Data: %zu", data_size);
int fd = io_fd(io_read_fd, file_descriptor);
size_t total_bytes_received = 0;
while (total_bytes_received < data_size) {
ssize_t bytes_received =
read(fd, (char *)data + total_bytes_received, data_size - total_bytes_received);
if (bytes_received == -1 || bytes_received == 0) {
perror("Could not receive bytes!");
exit(EXIT_FAILURE);
if (bytes_received <= 0) {
if (bytes_received == 0)
log_message(LOG_LEVEL_ERROR, "Connection closed while receiving data");
else
log_message(LOG_LEVEL_ERROR, "Could not receive bytes");
return false;
}
total_bytes_received += bytes_received;
}
log_message(LOG_LEVEL_DEBUG, " Received n Data: %zu", total_bytes_received);
return true;
}
static const char *status_to_string(Status status) {
@@ -66,59 +71,72 @@ static const char *status_to_string(Status status) {
}
}
void send_str(int file_descriptor, char *data) {
bool send_str(int file_descriptor, char *data) {
size_t size = strlen(data);
send_n_data(file_descriptor, &size, sizeof(size_t));
send_n_data(file_descriptor, data, size);
if (!send_n_data(file_descriptor, &size, sizeof(size_t))) return false;
if (!send_n_data(file_descriptor, data, size)) return false;
log_message(LOG_LEVEL_DEBUG, "Send String: %s", data);
return true;
}
char *receive_str(int file_descriptor) {
size_t size;
receive_n_data(file_descriptor, &size, sizeof(size_t));
if (!receive_n_data(file_descriptor, &size, sizeof(size_t))) return NULL;
char *data = (char *)malloc(size + 1);
receive_n_data(file_descriptor, data, size);
if (data == NULL) return NULL;
if (!receive_n_data(file_descriptor, data, size)) {
free(data);
return NULL;
}
data[size] = '\0';
log_message(LOG_LEVEL_DEBUG, "Received String: %s", data);
return data;
}
void send_data(int file_descriptor, Data *data) {
bool send_data(int file_descriptor, Data *data) {
unsigned long long data_size = data->size;
send_n_data(file_descriptor, &data_size, sizeof(unsigned long long));
send_n_data(file_descriptor, data->data, data_size);
if (!send_n_data(file_descriptor, &data_size, sizeof(unsigned long long)))
return false;
if (!send_n_data(file_descriptor, data->data, data_size))
return false;
log_message(LOG_LEVEL_DEBUG, "Send %lld data", data_size);
return true;
}
Data *receive_data(int file_descriptor) {
unsigned long long size = 0;
receive_n_data(file_descriptor, &size, sizeof(unsigned long long));
if (!receive_n_data(file_descriptor, &size, sizeof(unsigned long long)))
return NULL;
void *data = malloc((size_t)size);
receive_n_data(file_descriptor, data, (size_t)size);
if (data == NULL) return NULL;
if (!receive_n_data(file_descriptor, data, (size_t)size)) {
free(data);
return NULL;
}
log_message(LOG_LEVEL_DEBUG, "Received %lld data", size);
return data_create(data, (size_t)size);
}
void send_int(int file_descriptor, int data) {
send_n_data(file_descriptor, &data, sizeof(int));
bool send_int(int file_descriptor, int data) {
if (!send_n_data(file_descriptor, &data, sizeof(int))) return false;
log_message(LOG_LEVEL_DEBUG, "Send Int: %d", data);
return true;
}
int receive_int(int file_descriptor) {
int data;
receive_n_data(file_descriptor, &data, sizeof(int));
log_message(LOG_LEVEL_DEBUG, "Received Int: %d", data);
return data;
bool receive_int(int file_descriptor, int *data) {
if (!receive_n_data(file_descriptor, data, sizeof(int))) return false;
log_message(LOG_LEVEL_DEBUG, "Received Int: %d", *data);
return true;
}
void send_status(int file_descriptor, Status status) {
send_n_data(file_descriptor, &status, sizeof(Status));
bool send_status(int file_descriptor, Status status) {
if (!send_n_data(file_descriptor, &status, sizeof(Status))) return false;
log_message(LOG_LEVEL_DEBUG, "Send Status: %s", status_to_string(status));
return true;
}
Status receive_status(int file_descriptor) {
Status data;
receive_n_data(file_descriptor, &data, sizeof(Status));
log_message(LOG_LEVEL_DEBUG, "Received Status: %s", status_to_string(data));
return data;
bool receive_status(int file_descriptor, Status *status) {
if (!receive_n_data(file_descriptor, status, sizeof(Status))) return false;
log_message(LOG_LEVEL_DEBUG, "Received Status: %s", status_to_string(*status));
return true;
}