Annotation of embedaddon/rsync/usage.c, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Some usage & version related functions.
                      3:  *
                      4:  * Copyright (C) 2002-2020 Wayne Davison
                      5:  *
                      6:  * This program is free software; you can redistribute it and/or modify
                      7:  * it under the terms of the GNU General Public License as published by
                      8:  * the Free Software Foundation; either version 3 of the License, or
                      9:  * (at your option) any later version.
                     10:  *
                     11:  * This program is distributed in the hope that it will be useful,
                     12:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
                     13:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     14:  * GNU General Public License for more details.
                     15:  *
                     16:  * You should have received a copy of the GNU General Public License along
                     17:  * with this program; if not, visit the http://fsf.org website.
                     18:  */
                     19: 
                     20: #include "rsync.h"
                     21: #include "latest-year.h"
                     22: #include "git-version.h"
                     23: #include "default-cvsignore.h"
                     24: 
                     25: extern struct name_num_obj valid_checksums;
                     26: extern struct name_num_obj valid_compressions;
                     27: 
                     28: static char *istring(const char *fmt, int val)
                     29: {
                     30:        char *str;
                     31:        if (asprintf(&str, fmt, val) < 0)
                     32:                out_of_memory("istring");
                     33:        return str;
                     34: }
                     35: 
                     36: static void print_info_flags(enum logcode f)
                     37: {
                     38:        STRUCT_STAT *dumstat;
                     39:        char line_buf[75];
                     40:        int line_len, j;
                     41:        char *info_flags[] = {
                     42: 
                     43:        "*Capabilities",
                     44: 
                     45:                istring("%d-bit files", (int)(sizeof (OFF_T) * 8)),
                     46:                istring("%d-bit inums", (int)(sizeof dumstat->st_ino * 8)), /* Don't check ino_t! */
                     47:                istring("%d-bit timestamps", (int)(sizeof (time_t) * 8)),
                     48:                istring("%d-bit long ints", (int)(sizeof (int64) * 8)),
                     49: 
                     50: #ifndef HAVE_SOCKETPAIR
                     51:                "no "
                     52: #endif
                     53:                        "socketpairs",
                     54: 
                     55: #ifndef SUPPORT_HARD_LINKS
                     56:                "no "
                     57: #endif
                     58:                        "hardlinks",
                     59: 
                     60: #ifndef CAN_HARDLINK_SPECIAL
                     61:                "no "
                     62: #endif
                     63:                        "hardlink-specials",
                     64: 
                     65: #ifndef SUPPORT_LINKS
                     66:                "no "
                     67: #endif
                     68:                        "symlinks",
                     69: 
                     70: #ifndef INET6
                     71:                "no "
                     72: #endif
                     73:                        "IPv6",
                     74: 
                     75: #ifndef SUPPORT_ATIMES
                     76:                "no "
                     77: #endif
                     78:                        "atimes",
                     79: 
                     80:                "batchfiles",
                     81: 
                     82: #ifndef HAVE_FTRUNCATE
                     83:                "no "
                     84: #endif
                     85:                        "inplace",
                     86: 
                     87: #ifndef HAVE_FTRUNCATE
                     88:                "no "
                     89: #endif
                     90:                        "append",
                     91: 
                     92: #ifndef SUPPORT_ACLS
                     93:                "no "
                     94: #endif
                     95:                        "ACLs",
                     96: 
                     97: #ifndef SUPPORT_XATTRS
                     98:                "no "
                     99: #endif
                    100:                        "xattrs",
                    101: 
                    102: #ifdef RSYNC_USE_PROTECTED_ARGS
                    103:                "default "
                    104: #else
                    105:                "optional "
                    106: #endif
                    107:                        "protect-args",
                    108: 
                    109: #ifndef ICONV_OPTION
                    110:                "no "
                    111: #endif
                    112:                        "iconv",
                    113: 
                    114: #ifndef CAN_SET_SYMLINK_TIMES
                    115:                "no "
                    116: #endif
                    117:                        "symtimes",
                    118: 
                    119: #ifndef SUPPORT_PREALLOCATION
                    120:                "no "
                    121: #endif
                    122:                        "prealloc",
                    123: 
                    124: #ifndef HAVE_MKTIME
                    125:                "no "
                    126: #endif
                    127:                        "stop-at",
                    128: 
                    129: #ifndef SUPPORT_CRTIMES
                    130:                "no "
                    131: #endif
                    132:                        "crtimes",
                    133: 
                    134: #if !defined HAVE_MYSQL_MYSQL_H || !defined HAVE_LIBMYSQLCLIENT
                    135:                "no "
                    136: #endif
                    137:                        "MySQL",
                    138: 
                    139: #if !defined HAVE_SQLITE3_H || !defined HAVE_LIBSQLITE3
                    140:                "no "
                    141: #endif
                    142:                        "SQLite",
                    143: 
                    144: #ifndef SUPPORT_FILEFLAGS
                    145:                "no "
                    146: #endif
                    147:                        "file-flags",
                    148: 
                    149: #ifndef HAVE_LIBSLP
                    150:                "no "
                    151: #endif
                    152:                        "SLP",
                    153: 
                    154:        "*Optimizations",
                    155: 
                    156: #ifndef HAVE_SIMD
                    157:                "no "
                    158: #endif
                    159:                        "SIMD",
                    160: 
                    161: #ifndef HAVE_ASM
                    162:                "no "
                    163: #endif
                    164:                        "asm",
                    165: 
                    166: #ifndef USE_OPENSSL
                    167:                "no "
                    168: #endif
                    169:                        "openssl-crypto",
                    170: 
                    171:                NULL
                    172:        };
                    173: 
                    174:        for (line_len = 0, j = 0; ; j++) {
                    175:                char *str = info_flags[j], *next_nfo = str ? info_flags[j+1] : NULL;
                    176:                int str_len = str && *str != '*' ? strlen(str) : 1000;
                    177:                int need_comma = next_nfo && *next_nfo != '*' ? 1 : 0;
                    178:                if (line_len && line_len + 1 + str_len + need_comma >= (int)sizeof line_buf) {
                    179:                        rprintf(f, "   %s\n", line_buf);
                    180:                        line_len = 0;
                    181:                }
                    182:                if (!str)
                    183:                        break;
                    184:                if (*str == '*') {
                    185:                        rprintf(f, "%s:\n", str+1);
                    186:                        continue;
                    187:                }
                    188:                line_len += snprintf(line_buf+line_len, sizeof line_buf - line_len, " %s%s", str, need_comma ? "," : "");
                    189:        }
                    190: }
                    191: 
                    192: void print_rsync_version(enum logcode f)
                    193: {
                    194:        char tmpbuf[256], *subprotocol = "";
                    195: 
                    196: #if SUBPROTOCOL_VERSION != 0
                    197:        subprotocol = istring(".PR%d", SUBPROTOCOL_VERSION);
                    198: #endif
                    199:        rprintf(f, "%s  version %s  protocol version %d%s\n",
                    200:                RSYNC_NAME, rsync_version(), PROTOCOL_VERSION, subprotocol);
                    201: 
                    202:        rprintf(f, "Copyright (C) 1996-" LATEST_YEAR " by Andrew Tridgell, Wayne Davison, and others.\n");
                    203:        rprintf(f, "Web site: https://rsync.samba.org/\n");
                    204: 
                    205:        print_info_flags(f);
                    206: 
                    207:        rprintf(f, "Checksum list:\n");
                    208:        get_default_nno_list(&valid_checksums, tmpbuf, sizeof tmpbuf, '(');
                    209:        rprintf(f, "    %s\n", tmpbuf);
                    210: 
                    211:        rprintf(f, "Compress list:\n");
                    212:        get_default_nno_list(&valid_compressions, tmpbuf, sizeof tmpbuf, '(');
                    213:        rprintf(f, "    %s\n", tmpbuf);
                    214: 
                    215: #ifdef MAINTAINER_MODE
                    216:        rprintf(f, "Panic Action: \"%s\"\n", get_panic_action());
                    217: #endif
                    218: 
                    219: #if SIZEOF_INT64 < 8
                    220:        rprintf(f, "WARNING: no 64-bit integers on this platform!\n");
                    221: #endif
                    222:        if (sizeof (int64) != SIZEOF_INT64) {
                    223:                rprintf(f,
                    224:                        "WARNING: size mismatch in SIZEOF_INT64 define (%d != %d)\n",
                    225:                        (int) SIZEOF_INT64, (int) sizeof (int64));
                    226:        }
                    227: 
                    228:        rprintf(f,"\n");
                    229:        rprintf(f,"rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you\n");
                    230:        rprintf(f,"are welcome to redistribute it under certain conditions.  See the GNU\n");
                    231:        rprintf(f,"General Public Licence for details.\n");
                    232: }
                    233: 
                    234: void usage(enum logcode F)
                    235: {
                    236:   print_rsync_version(F);
                    237: 
                    238:   rprintf(F,"\n");
                    239:   rprintf(F,"rsync is a file transfer program capable of efficient remote update\n");
                    240:   rprintf(F,"via a fast differencing algorithm.\n");
                    241: 
                    242:   rprintf(F,"\n");
                    243:   rprintf(F,"Usage: rsync [OPTION]... SRC [SRC]... DEST\n");
                    244:   rprintf(F,"  or   rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST\n");
                    245:   rprintf(F,"  or   rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST\n");
                    246:   rprintf(F,"  or   rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST\n");
                    247:   rprintf(F,"  or   rsync [OPTION]... [USER@]HOST:SRC [DEST]\n");
                    248:   rprintf(F,"  or   rsync [OPTION]... [USER@]HOST::SRC [DEST]\n");
                    249:   rprintf(F,"  or   rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]\n");
                    250:   rprintf(F,"The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect\n");
                    251:   rprintf(F,"to an rsync daemon, and require SRC or DEST to start with a module name.\n");
                    252:   rprintf(F,"\n");
                    253:   rprintf(F,"Options\n");
                    254: #include "help-rsync.h"
                    255:   rprintf(F,"\n");
                    256:   rprintf(F,"Use \"rsync --daemon --help\" to see the daemon-mode command-line options.\n");
                    257:   rprintf(F,"Please see the rsync(1) and rsyncd.conf(5) man pages for full documentation.\n");
                    258:   rprintf(F,"See https://rsync.samba.org/ for updates, bug reports, and answers\n");
                    259: }
                    260: 
                    261: void daemon_usage(enum logcode F)
                    262: {
                    263:   print_rsync_version(F);
                    264: 
                    265:   rprintf(F,"\n");
                    266:   rprintf(F,"Usage: rsync --daemon [OPTION]...\n");
                    267: #include "help-rsyncd.h"
                    268:   rprintf(F,"\n");
                    269:   rprintf(F,"If you were not trying to invoke rsync as a daemon, avoid using any of the\n");
                    270:   rprintf(F,"daemon-specific rsync options.  See also the rsyncd.conf(5) man page.\n");
                    271: }
                    272: 
                    273: void dbonly_usage(enum logcode F)
                    274: {
                    275:   rprintf(F,"Usage: rsyncdb --db=CONFIG_FILE [OPTIONS] [DIRS]\n");
                    276:   rprintf(F,"\n");
                    277:   rprintf(F,"Options:\n");
                    278: #include "help-rsyncdb.h"
                    279: }
                    280: 
                    281: const char *rsync_version(void)
                    282: {
                    283:        return RSYNC_GITVER;
                    284: }
                    285: 
                    286: const char *default_cvsignore(void)
                    287: {
                    288:        return DEFAULT_CVSIGNORE;
                    289: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>