fix: address review #69 - STATUS_ERROR sends, metadata_receive error handling, extract incremental_check helper

This commit is contained in:
2026-07-17 10:06:27 +02:00
parent f1af88a25c
commit 03d6ba0da5
6 changed files with 49 additions and 31 deletions
+3 -1
View File
@@ -237,7 +237,9 @@ File *file_receive(Config *config, int file_descriptor) {
free(path);
if (file == NULL) return NULL;
if (config->use_metadata) {
file->metadata = metadata_receive(file_descriptor);
int meta_ok = 1;
file->metadata = metadata_receive(file_descriptor, &meta_ok);
if (!meta_ok) { file_destroy(file); return NULL; }
}
Data *file_data = receive_data(file_descriptor);
if (file_data == NULL) {
+10 -4
View File
@@ -50,22 +50,28 @@ bool metadata_send(int file_descriptor, FileMetadata *m) {
send_n_data(file_descriptor, &m->mtime_nsec, sizeof(long));
}
FileMetadata *metadata_receive(int file_descriptor) {
FileMetadata *metadata_receive(int file_descriptor, int *ok) {
int present;
if (!receive_n_data(file_descriptor, &present, sizeof(int)))
if (!receive_n_data(file_descriptor, &present, sizeof(int))) {
if (ok) *ok = 0;
return NULL;
if (!present)
}
if (!present) {
if (ok) *ok = 1;
return NULL;
}
FileMetadata *m = malloc(sizeof(FileMetadata));
if (m == NULL) return NULL;
if (m == NULL) { if (ok) *ok = 0; return NULL; }
if (!receive_n_data(file_descriptor, &m->mode, sizeof(mode_t)) ||
!receive_n_data(file_descriptor, &m->uid, sizeof(uid_t)) ||
!receive_n_data(file_descriptor, &m->gid, sizeof(gid_t)) ||
!receive_n_data(file_descriptor, &m->mtime_sec, sizeof(time_t)) ||
!receive_n_data(file_descriptor, &m->mtime_nsec, sizeof(long))) {
free(m);
if (ok) *ok = 0;
return NULL;
}
if (ok) *ok = 1;
return m;
}
+1 -1
View File
@@ -10,7 +10,7 @@
void metadata_to_buf(char **buf, FileMetadata *m);
FileMetadata *metadata_from_buf(char **buf);
bool metadata_send(int file_descriptor, FileMetadata *m);
FileMetadata *metadata_receive(int file_descriptor);
FileMetadata *metadata_receive(int file_descriptor, int *ok);
void file_restore_metadata(const char *path, FileMetadata *metadata);
#endif
+5 -2
View File
@@ -130,12 +130,13 @@ int receive_thread(void *pipeline_context) {
while (status == STATUS_NEXT || status == STATUS_CHUNK || status == STATUS_CHECK) {
if (status == STATUS_CHECK) {
char *check_path = receive_str(file_descriptor);
if (check_path == NULL) return thrd_error;
if (check_path == NULL) { send_status(file_descriptor, STATUS_ERROR); return thrd_error; }
unsigned long long check_size;
long long check_mtime;
if (!receive_n_data(file_descriptor, &check_size, sizeof(check_size)) ||
!receive_n_data(file_descriptor, &check_mtime, sizeof(check_mtime))) {
free(check_path);
send_status(file_descriptor, STATUS_ERROR);
return thrd_error;
}
char *full_path = path_cat(config->receive_root_directory, check_path);
@@ -156,7 +157,9 @@ int receive_thread(void *pipeline_context) {
free(check_path);
if (file == NULL) { send_status(file_descriptor, STATUS_ERROR); return thrd_error; }
if (config->use_metadata) {
file->metadata = metadata_receive(file_descriptor);
int meta_ok = 1;
file->metadata = metadata_receive(file_descriptor, &meta_ok);
if (!meta_ok) { file_destroy(file); send_status(file_descriptor, STATUS_ERROR); return thrd_error; }
}
Data *file_data = receive_data(file_descriptor);
if (file_data == NULL) {