Annotation of embedaddon/rsync/usage.c, revision 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>