=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/rsync/main.c,v retrieving revision 1.59 retrieving revision 1.59.2.1 diff -c -r1.59 -r1.59.2.1 *** src/usr.bin/rsync/main.c 2021/09/01 09:48:08 1.59 --- src/usr.bin/rsync/main.c 2021/11/09 13:40:41 1.59.2.1 *************** *** 1,4 **** ! /* $OpenBSD: main.c,v 1.59 2021/09/01 09:48:08 claudio Exp $ */ /* * Copyright (c) 2019 Kristaps Dzonsons * --- 1,4 ---- ! /* $OpenBSD: main.c,v 1.59.2.1 2021/11/09 13:40:41 benno Exp $ */ /* * Copyright (c) 2019 Kristaps Dzonsons * *************** *** 26,31 **** --- 26,32 ---- #include #include #include + #include #include "extern.h" *************** *** 280,303 **** #define OP_INCLUDE 1006 #define OP_EXCLUDE_FROM 1007 #define OP_INCLUDE_FROM 1008 const struct option lopts[] = { { "address", required_argument, NULL, OP_ADDRESS }, { "archive", no_argument, NULL, 'a' }, { "compress", no_argument, NULL, 'z' }, { "del", no_argument, &opts.del, 1 }, { "delete", no_argument, &opts.del, 1 }, { "devices", no_argument, &opts.devices, 1 }, { "no-devices", no_argument, &opts.devices, 0 }, { "dry-run", no_argument, &opts.dry_run, 1 }, ! { "exclude", required_argument, NULL, OP_EXCLUDE }, { "exclude-from", required_argument, NULL, OP_EXCLUDE_FROM }, { "group", no_argument, &opts.preserve_gids, 1 }, { "no-group", no_argument, &opts.preserve_gids, 0 }, { "help", no_argument, NULL, 'h' }, ! { "include", required_argument, NULL, OP_INCLUDE }, { "include-from", required_argument, NULL, OP_INCLUDE_FROM }, { "links", no_argument, &opts.preserve_links, 1 }, { "no-links", no_argument, &opts.preserve_links, 0 }, { "no-motd", no_argument, &opts.no_motd, 1 }, { "numeric-ids", no_argument, &opts.numeric_ids, 1 }, --- 281,316 ---- #define OP_INCLUDE 1006 #define OP_EXCLUDE_FROM 1007 #define OP_INCLUDE_FROM 1008 + #define OP_COMP_DEST 1009 + #define OP_COPY_DEST 1010 + #define OP_LINK_DEST 1011 + #define OP_MAX_SIZE 1012 + #define OP_MIN_SIZE 1013 const struct option lopts[] = { { "address", required_argument, NULL, OP_ADDRESS }, { "archive", no_argument, NULL, 'a' }, + { "compare-dest", required_argument, NULL, OP_COMP_DEST }, + #if 0 + { "copy-dest", required_argument, NULL, OP_COPY_DEST }, + { "link-dest", required_argument, NULL, OP_LINK_DEST }, + #endif { "compress", no_argument, NULL, 'z' }, { "del", no_argument, &opts.del, 1 }, { "delete", no_argument, &opts.del, 1 }, { "devices", no_argument, &opts.devices, 1 }, { "no-devices", no_argument, &opts.devices, 0 }, { "dry-run", no_argument, &opts.dry_run, 1 }, ! { "exclude", required_argument, NULL, OP_EXCLUDE }, { "exclude-from", required_argument, NULL, OP_EXCLUDE_FROM }, { "group", no_argument, &opts.preserve_gids, 1 }, { "no-group", no_argument, &opts.preserve_gids, 0 }, { "help", no_argument, NULL, 'h' }, ! { "include", required_argument, NULL, OP_INCLUDE }, { "include-from", required_argument, NULL, OP_INCLUDE_FROM }, { "links", no_argument, &opts.preserve_links, 1 }, + { "max-size", required_argument, NULL, OP_MAX_SIZE }, + { "min-size", required_argument, NULL, OP_MIN_SIZE }, { "no-links", no_argument, &opts.preserve_links, 0 }, { "no-motd", no_argument, &opts.no_motd, 1 }, { "numeric-ids", no_argument, &opts.numeric_ids, 1 }, *************** *** 327,337 **** main(int argc, char *argv[]) { pid_t child; ! int fds[2], sd = -1, rc, c, st, i; ! struct sess sess; struct fargs *fargs; char **args; ! const char *errstr; /* Global pledge. */ --- 340,351 ---- main(int argc, char *argv[]) { pid_t child; ! int fds[2], sd = -1, rc, c, st, i, lidx; ! size_t basedir_cnt = 0; ! struct sess sess; struct fargs *fargs; char **args; ! const char *errstr; /* Global pledge. */ *************** *** 339,345 **** NULL) == -1) err(ERR_IPC, "pledge"); ! while ((c = getopt_long(argc, argv, "Dae:ghlnoprtvxz", lopts, NULL)) != -1) { switch (c) { case 'D': --- 353,361 ---- NULL) == -1) err(ERR_IPC, "pledge"); ! opts.max_size = opts.min_size = -1; ! ! while ((c = getopt_long(argc, argv, "Dae:ghlnoprtvxz", lopts, &lidx)) != -1) { switch (c) { case 'D': *************** *** 423,428 **** --- 439,487 ---- case OP_INCLUDE_FROM: parse_file(optarg, RULE_INCLUDE); break; + case OP_COMP_DEST: + if (opts.alt_base_mode !=0 && + opts.alt_base_mode != BASE_MODE_COMPARE) { + errx(1, "option --%s conflicts with %s", + lopts[lidx].name, + alt_base_mode(opts.alt_base_mode)); + } + opts.alt_base_mode = BASE_MODE_COMPARE; + #if 0 + goto basedir; + case OP_COPY_DEST: + if (opts.alt_base_mode !=0 && + opts.alt_base_mode != BASE_MODE_COPY) { + errx(1, "option --%s conflicts with %s", + lopts[lidx].name, + alt_base_mode(opts.alt_base_mode)); + } + opts.alt_base_mode = BASE_MODE_COPY; + goto basedir; + case OP_LINK_DEST: + if (opts.alt_base_mode !=0 && + opts.alt_base_mode != BASE_MODE_LINK) { + errx(1, "option --%s conflicts with %s", + lopts[lidx].name, + alt_base_mode(opts.alt_base_mode)); + } + opts.alt_base_mode = BASE_MODE_LINK; + + basedir: + #endif + if (basedir_cnt >= MAX_BASEDIR) + errx(1, "too many --%s directories specified", + lopts[lidx].name); + opts.basedir[basedir_cnt++] = optarg; + break; + case OP_MAX_SIZE: + if (scan_scaled(optarg, &opts.max_size) == -1) + err(1, "bad max-size"); + break; + case OP_MIN_SIZE: + if (scan_scaled(optarg, &opts.min_size) == -1) + err(1, "bad min-size"); + break; case OP_VERSION: fprintf(stderr, "openrsync: protocol version %u\n", RSYNC_PROTOCOL); *************** *** 554,565 **** exit(rc); usage: fprintf(stderr, "usage: %s" ! " [-aDglnoprtvx] [-e program] [--address=sourceaddr] [--del]\n" ! "\t[--exclude] [--exclude-from=file] [--include] " ! "[--include-from=file]\n" ! "\t[--no-motd] [--numeric-ids] [--port=portnumber] " ! "[--rsync-path=program]\n\t[--timeout=seconds] [--version] " ! "source ... directory\n", getprogname()); exit(ERR_SYNTAX); } --- 613,623 ---- exit(rc); usage: fprintf(stderr, "usage: %s" ! " [-aDglnoprtvx] [-e program] [--address=sourceaddr]\n" ! "\t[--compare-dest=dir] [--del] [--exclude] [--exclude-from=file]\n" ! "\t[--include] [--include-from=file] [--no-motd] [--numeric-ids]\n" ! "\t[--port=portnumber] [--rsync-path=program] [--timeout=seconds]\n" ! "\t[--version] source ... directory\n", getprogname()); exit(ERR_SYNTAX); }