Remove unimplemented CLI options
CI / lint (pull_request) Failing after 3s
CI / build-and-test (pull_request) Has been skipped
CI / sanitizers (address) (pull_request) Has been skipped
CI / sanitizers (undefined) (pull_request) Has been skipped
CI / fuzz-build (pull_request) Has been skipped
CI / coverage (pull_request) Has been skipped
CI / valgrind (pull_request) Has been skipped

This commit is contained in:
2026-08-11 20:59:06 +02:00
parent 09fca8d931
commit d146e1bb7c
11 changed files with 138 additions and 385 deletions
+35 -99
View File
@@ -45,59 +45,20 @@ static void config_set_defaults(Config* config) {
config->server_port = 8080;
config->timeout = 30;
config->contimeout = 10;
config->quiet = false;
config->backup = false;
config->backup_dir = NULL;
config->stats = false;
config->max_depth = 0;
config->log_file = NULL;
config->queue_size = 100;
config->follow_symlinks = false;
config->partial = false;
config->copy_links = false;
config->safe_links = false;
config->copy_unsafe_links = false;
config->preserve_hard_links = false;
config->preserve_acls = false;
config->preserve_xattrs = false;
config->preserve_devices = false;
config->preserve_sparse = false;
config->itemize_changes = false;
config->out_format = NULL;
config->info_level = 0;
config->debug_level = 0;
config->list_only = false;
config->human_readable = false;
config->update = false;
config->inplace = false;
config->append = false;
config->append_verify = false;
config->delete_excluded = false;
config->delete_after = false;
config->max_delete = 0;
config->filters = NULL;
config->files_from = NULL;
config->cvs_exclude = false;
config->prune_empty_dirs = false;
config->relative = false;
config->rsh_command = NULL;
config->rsync_path = NULL;
config->temp_dir = NULL;
config->compare_dest = NULL;
config->copy_dest = NULL;
config->link_dest = NULL;
config->partial_dir = NULL;
config->suffix = NULL;
config->delete_before = false;
config->address = NULL;
config->bind_address = NULL;
config->ipv6 = false;
config->ipv4 = false;
config->daemon = false;
config->daemon_config = NULL;
config->server_mode = false;
config->checksum = false;
config->compress_choice = NULL;
}
Config* config_create(void) {
@@ -153,23 +114,8 @@ void config_delete(Config* config) {
free(config->tls_ca);
free(config->backup_dir);
free(config->server_host);
free(config->out_format);
free(config->files_from);
free(config->rsh_command);
free(config->rsync_path);
free(config->temp_dir);
free(config->compare_dest);
free(config->copy_dest);
free(config->link_dest);
free(config->partial_dir);
free(config->suffix);
free(config->address);
free(config->bind_address);
free(config->daemon_config);
free(config->compress_choice);
if (config->filters) {
array_list_delete(config->filters);
}
free(config);
}
@@ -178,10 +124,11 @@ void config_delete(Config* config) {
* use_chunk_serialization, use_compression, use_metadata, compression_level, chunk_size,
* use_sendfile, use_delete, use_incremental, use_delta, delta_block_size, delta_max_file_size,
* backup, backup_dir, follow_symlinks, copy_links, safe_links, copy_unsafe_links,
* preserve_hard_links, preserve_acls, preserve_xattrs, preserve_devices, preserve_sparse,
* update, inplace, append, append_verify, delete_excluded, delete_after, max_delete, relative,
* prune_empty_dirs, temp_dir, partial, partial_dir, suffix, delete_before, checksum,
* compress_choice, status
* obsolete metadata flags, preserve_sparse, obsolete transfer flags, inplace, obsolete delete
* flags, obsolete path options, partial, partial_dir, suffix, obsolete checksum options, status
*
* Obsolete fields remain as zero/empty compatibility slots. They must be consumed in this order
* until the protocol version is intentionally changed.
*/
bool config_send(int file_descriptor, const Config* config) {
if (!send_str(file_descriptor, config->version))
@@ -228,35 +175,36 @@ bool config_send(int file_descriptor, const Config* config) {
return false;
if (!send_int(file_descriptor, config->copy_unsafe_links))
return false;
if (!send_int(file_descriptor, config->preserve_hard_links))
if (!send_int(file_descriptor, 0))
return false;
if (!send_int(file_descriptor, config->preserve_acls))
if (!send_int(file_descriptor, 0))
return false;
if (!send_int(file_descriptor, config->preserve_xattrs))
if (!send_int(file_descriptor, 0))
return false;
if (!send_int(file_descriptor, config->preserve_devices))
if (!send_int(file_descriptor, 0))
return false;
if (!send_int(file_descriptor, config->preserve_sparse))
return false;
if (!send_int(file_descriptor, config->update))
if (!send_int(file_descriptor, 0))
return false;
if (!send_int(file_descriptor, config->inplace))
return false;
if (!send_int(file_descriptor, config->append))
if (!send_int(file_descriptor, 0))
return false;
if (!send_int(file_descriptor, config->append_verify))
if (!send_int(file_descriptor, 0))
return false;
if (!send_int(file_descriptor, config->delete_excluded))
if (!send_int(file_descriptor, 0))
return false;
if (!send_int(file_descriptor, config->delete_after))
if (!send_int(file_descriptor, 0))
return false;
if (!send_n_data(file_descriptor, &config->max_delete, sizeof(config->max_delete)))
int obsolete_int = 0;
if (!send_n_data(file_descriptor, &obsolete_int, sizeof(obsolete_int)))
return false;
if (!send_int(file_descriptor, config->relative))
if (!send_int(file_descriptor, 0))
return false;
if (!send_int(file_descriptor, config->prune_empty_dirs))
if (!send_int(file_descriptor, 0))
return false;
if (!send_str(file_descriptor, config->temp_dir ? config->temp_dir : ""))
if (!send_str(file_descriptor, ""))
return false;
if (!send_int(file_descriptor, config->partial))
return false;
@@ -264,11 +212,11 @@ bool config_send(int file_descriptor, const Config* config) {
return false;
if (!send_str(file_descriptor, config->suffix ? config->suffix : ""))
return false;
if (!send_int(file_descriptor, config->delete_before))
if (!send_int(file_descriptor, 0))
return false;
if (!send_int(file_descriptor, config->checksum))
if (!send_int(file_descriptor, 0))
return false;
if (!send_str(file_descriptor, config->compress_choice ? config->compress_choice : ""))
if (!send_str(file_descriptor, ""))
return false;
Status status;
if (!receive_status(file_descriptor, &status))
@@ -374,48 +322,39 @@ Config* config_receive(int file_descriptor) {
config->copy_unsafe_links = tmp;
if (!receive_int(file_descriptor, &tmp))
goto error;
config->preserve_hard_links = tmp;
if (!receive_int(file_descriptor, &tmp))
goto error;
config->preserve_acls = tmp;
if (!receive_int(file_descriptor, &tmp))
goto error;
config->preserve_xattrs = tmp;
if (!receive_int(file_descriptor, &tmp))
goto error;
config->preserve_devices = tmp;
if (!receive_int(file_descriptor, &tmp))
goto error;
config->preserve_sparse = tmp;
if (!receive_int(file_descriptor, &tmp))
goto error;
config->update = tmp;
if (!receive_int(file_descriptor, &tmp))
goto error;
config->inplace = tmp;
if (!receive_int(file_descriptor, &tmp))
goto error;
config->append = tmp;
if (!receive_int(file_descriptor, &tmp))
goto error;
config->append_verify = tmp;
if (!receive_int(file_descriptor, &tmp))
goto error;
config->delete_excluded = tmp;
if (!receive_int(file_descriptor, &tmp))
goto error;
config->delete_after = tmp;
if (!receive_n_data(file_descriptor, &config->max_delete, sizeof(config->max_delete)))
goto error;
if (!receive_int(file_descriptor, &tmp))
goto error;
config->relative = tmp;
if (!receive_int(file_descriptor, &tmp))
goto error;
config->prune_empty_dirs = tmp;
config->temp_dir = receive_str(file_descriptor);
if (config->temp_dir == NULL)
int obsolete_int = 0;
if (!receive_n_data(file_descriptor, &obsolete_int, sizeof(obsolete_int)))
goto error;
if (!receive_int(file_descriptor, &tmp))
goto error;
if (!receive_int(file_descriptor, &tmp))
goto error;
char* obsolete_string = receive_str(file_descriptor);
if (obsolete_string == NULL)
goto error;
free(obsolete_string);
if (!receive_int(file_descriptor, &tmp))
goto error;
config->partial = tmp;
@@ -427,13 +366,12 @@ Config* config_receive(int file_descriptor) {
goto error;
if (!receive_int(file_descriptor, &tmp))
goto error;
config->delete_before = tmp;
if (!receive_int(file_descriptor, &tmp))
goto error;
config->checksum = tmp;
config->compress_choice = receive_str(file_descriptor);
if (config->compress_choice == NULL)
obsolete_string = receive_str(file_descriptor);
if (obsolete_string == NULL)
goto error;
free(obsolete_string);
if (!send_status(file_descriptor, STATUS_OK))
goto error;
return config;
@@ -444,10 +382,8 @@ error:
free(config->receive_root_directory);
free(config->server_host);
free(config->backup_dir);
free(config->temp_dir);
free(config->partial_dir);
free(config->suffix);
free(config->compress_choice);
free(config);
return NULL;
}
-59
View File
@@ -1,7 +1,6 @@
#ifndef CONFIG_H
#define CONFIG_H
#include "array_list.h"
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
@@ -45,13 +44,11 @@ typedef struct Config {
char* tls_ca;
int timeout;
int contimeout;
bool quiet;
bool backup;
char* backup_dir;
bool stats;
int max_depth;
FILE* log_file;
int queue_size;
bool follow_symlinks;
bool partial;
@@ -60,46 +57,9 @@ typedef struct Config {
bool safe_links;
bool copy_unsafe_links;
// Issue #121: Extended metadata preservation
bool preserve_hard_links;
bool preserve_acls;
bool preserve_xattrs;
bool preserve_devices;
bool preserve_sparse;
// Issue #122: Output/logging options
bool itemize_changes;
char* out_format;
int info_level;
int debug_level;
bool list_only;
bool human_readable;
// Issue #127: Transfer modes
bool update;
bool inplace;
bool append;
bool append_verify;
// Issue #128: Extended delete options
bool delete_excluded;
bool delete_after;
int max_delete;
// Issue #129: Advanced file selection
ArrayList* filters;
char* files_from;
bool cvs_exclude;
bool prune_empty_dirs;
bool relative;
// Issue #130: Remote shell/connection options
char* rsh_command;
char* rsync_path;
char* temp_dir;
char* compare_dest;
char* copy_dest;
char* link_dest;
// PR #174: Partial transfer resumption
char* partial_dir;
@@ -107,25 +67,6 @@ typedef struct Config {
// PR #178: Backup versioning
char* suffix;
// PR #179: Delete policies
bool delete_before;
// PR #181: IPv6 and bind address
char* address;
char* bind_address;
bool ipv6;
bool ipv4;
// PR #182: Daemon/server mode
bool daemon;
char* daemon_config;
bool server_mode;
// PR #183: Checksum comparison
bool checksum;
// PR #184: Compression algorithm negotiation
char* compress_choice;
} Config;
/* This version must be bumped whenever config_send / config_receive wire format changes. */