Merge pull request 'refactor: merge sendfile and single_calls _no_path variants with send_path bool' (#19) from refactor/merge-path-variants into incremental-sync
Reviewed-on: #19
This commit was merged in pull request #19.
This commit is contained in:
@@ -57,11 +57,11 @@ int send_chunk(Client *client, Chunk *chunk, Config *config) {
|
|||||||
int rc = incremental_check(client, chunk->items[i]);
|
int rc = incremental_check(client, chunk->items[i]);
|
||||||
if (rc < 0) return -1;
|
if (rc < 0) return -1;
|
||||||
if (rc > 0) continue;
|
if (rc > 0) continue;
|
||||||
if (!file_send_sendfile_no_path(chunk->items[i], client->file_descriptor, config->use_metadata))
|
if (!file_send_sendfile(chunk->items[i], client->file_descriptor, config->use_metadata, false))
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
if (!send_status(client->file_descriptor, STATUS_NEXT)) return -1;
|
if (!send_status(client->file_descriptor, STATUS_NEXT)) return -1;
|
||||||
if (!file_send_sendfile(chunk->items[i], client->file_descriptor, config->use_metadata))
|
if (!file_send_sendfile(chunk->items[i], client->file_descriptor, config->use_metadata, true))
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -71,15 +71,15 @@ int send_chunk(Client *client, Chunk *chunk, Config *config) {
|
|||||||
int rc = incremental_check(client, chunk->items[i]);
|
int rc = incremental_check(client, chunk->items[i]);
|
||||||
if (rc < 0) return -1;
|
if (rc < 0) return -1;
|
||||||
if (rc > 0) continue;
|
if (rc > 0) continue;
|
||||||
if (!file_send_single_calls_no_path(chunk->items[i], client->file_descriptor,
|
if (!file_send_single_calls(chunk->items[i], client->file_descriptor,
|
||||||
config->use_metadata,
|
config->use_metadata,
|
||||||
config->use_compression ? config->compression_level : 0))
|
config->use_compression ? config->compression_level : 0, false))
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
if (!send_status(client->file_descriptor, STATUS_NEXT)) return -1;
|
if (!send_status(client->file_descriptor, STATUS_NEXT)) return -1;
|
||||||
if (!file_send_single_calls(chunk->items[i], client->file_descriptor,
|
if (!file_send_single_calls(chunk->items[i], client->file_descriptor,
|
||||||
config->use_metadata,
|
config->use_metadata,
|
||||||
config->use_compression ? config->compression_level : 0))
|
config->use_compression ? config->compression_level : 0, true))
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-56
@@ -96,7 +96,7 @@ bool file_load_data(File *file) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool file_send_single_calls_no_path(File *file, int file_descriptor, bool use_metadata, int compression_level) {
|
bool file_send_single_calls(File *file, int file_descriptor, bool use_metadata, int compression_level, bool send_path) {
|
||||||
Data *data_to_send = file->data;
|
Data *data_to_send = file->data;
|
||||||
Data *compressed_data = NULL;
|
Data *compressed_data = NULL;
|
||||||
if (compression_level > 0) {
|
if (compression_level > 0) {
|
||||||
@@ -107,59 +107,7 @@ bool file_send_single_calls_no_path(File *file, int file_descriptor, bool use_me
|
|||||||
}
|
}
|
||||||
data_to_send = compressed_data;
|
data_to_send = compressed_data;
|
||||||
}
|
}
|
||||||
if (use_metadata && !metadata_send(file_descriptor, file->metadata)) {
|
if (send_path && !send_str(file_descriptor, file->path)) {
|
||||||
data_destroy(compressed_data);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!send_data(file_descriptor, data_to_send)) {
|
|
||||||
data_destroy(compressed_data);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
data_destroy(compressed_data);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool file_send_sendfile_no_path(File *file, int file_descriptor, bool use_metadata) {
|
|
||||||
if (use_metadata && !metadata_send(file_descriptor, file->metadata)) return false;
|
|
||||||
|
|
||||||
int fd = open(file->path, O_RDONLY);
|
|
||||||
if (fd == -1) {
|
|
||||||
perror("Could not open file for sendfile");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long long file_size = file->data->size;
|
|
||||||
if (!send_n_data(file_descriptor, &file_size, sizeof(unsigned long long))) {
|
|
||||||
close(fd);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
off_t offset = 0;
|
|
||||||
while (offset < file_size) {
|
|
||||||
ssize_t sent = sendfile(file_descriptor, fd, &offset, file_size - offset);
|
|
||||||
if (sent == -1) {
|
|
||||||
perror("sendfile failed");
|
|
||||||
close(fd);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close(fd);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool file_send_single_calls(File *file, int file_descriptor, bool use_metadata, int compression_level) {
|
|
||||||
Data *data_to_send = file->data;
|
|
||||||
Data *compressed_data = NULL;
|
|
||||||
if (compression_level > 0) {
|
|
||||||
compressed_data = data_compress(file->data, compression_level);
|
|
||||||
if (compressed_data == NULL) {
|
|
||||||
log_message(LOG_LEVEL_ERROR, "Failed to compress file data");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
data_to_send = compressed_data;
|
|
||||||
}
|
|
||||||
if (!send_str(file_descriptor, file->path)) {
|
|
||||||
data_destroy(compressed_data);
|
data_destroy(compressed_data);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -200,8 +148,8 @@ bool to_disk(const char *path, const void *data, unsigned long long data_size) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool file_send_sendfile(File *file, int file_descriptor, bool use_metadata) {
|
bool file_send_sendfile(File *file, int file_descriptor, bool use_metadata, bool send_path) {
|
||||||
if (!send_str(file_descriptor, file->path)) return false;
|
if (send_path && !send_str(file_descriptor, file->path)) return false;
|
||||||
if (use_metadata && !metadata_send(file_descriptor, file->metadata)) return false;
|
if (use_metadata && !metadata_send(file_descriptor, file->metadata)) return false;
|
||||||
|
|
||||||
int fd = open(file->path, O_RDONLY);
|
int fd = open(file->path, O_RDONLY);
|
||||||
|
|||||||
+2
-4
@@ -24,10 +24,8 @@ File *file_create(const char *path);
|
|||||||
void file_destroy(void *item);
|
void file_destroy(void *item);
|
||||||
bool file_load_data(File *file);
|
bool file_load_data(File *file);
|
||||||
File *file_receive(Config *config, int file_descriptor);
|
File *file_receive(Config *config, int file_descriptor);
|
||||||
bool file_send_single_calls(File *file, int file_descriptor, bool use_metadata, int compression_level);
|
bool file_send_single_calls(File *file, int file_descriptor, bool use_metadata, int compression_level, bool send_path);
|
||||||
bool file_send_single_calls_no_path(File *file, int file_descriptor, bool use_metadata, int compression_level);
|
bool file_send_sendfile(File *file, int file_descriptor, bool use_metadata, bool send_path);
|
||||||
bool file_send_sendfile(File *file, int file_descriptor, bool use_metadata);
|
|
||||||
bool file_send_sendfile_no_path(File *file, int file_descriptor, bool use_metadata);
|
|
||||||
size_t file_content_to_buffer(File *file);
|
size_t file_content_to_buffer(File *file);
|
||||||
FileMetadata *file_metadata_create(struct stat *stats);
|
FileMetadata *file_metadata_create(struct stat *stats);
|
||||||
void file_metadata_destroy(void *metadata);
|
void file_metadata_destroy(void *metadata);
|
||||||
|
|||||||
Reference in New Issue
Block a user