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>