The branch, master has been updated via 23a37eca Get indent right. via 47bae3ab Improve output of capabilities in --version list. from dff9dd56 Remove xxhash from capabilities list.
https://git.samba.org/?p=rsync.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 23a37ecac4bba997948fa30e72eb4aa8e317e394 Author: Wayne Davison <wa...@opencoder.net> Date: Mon May 25 23:33:11 2020 -0700 Get indent right. commit 47bae3abf66027e97f32e1cdbf189664ed1a7e99 Author: Wayne Davison <wa...@opencoder.net> Date: Mon May 25 22:43:33 2020 -0700 Improve output of capabilities in --version list. It now wraps better as the "no " prefixes change, and it makes it easier to maintain patches that add items into the capabilities list. ----------------------------------------------------------------------- Summary of changes: options.c | 167 +++++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 115 insertions(+), 52 deletions(-) Changeset truncated at 500 lines: diff --git a/options.c b/options.c index 9f5a24d6..04b84a72 100644 --- a/options.c +++ b/options.c @@ -566,83 +566,146 @@ void negate_output_levels(void) debug_levels[j] *= -1; } -static void print_rsync_version(enum logcode f) +static char *istring(const char *fmt, int val) +{ + char *str; + if (asprintf(&str, fmt, val) < 0) + out_of_memory("istring"); + return str; +} + +static void print_capabilities(enum logcode f) { - char tmpbuf[256]; - char *subprotocol = ""; - char const *got_socketpair = "no "; - char const *have_inplace = "no "; - char const *hardlinks = "no "; - char const *prealloc = "no "; - char const *symtimes = "no "; - char const *acls = "no "; - char const *xattrs = "no "; - char const *links = "no "; - char const *iconv = "no "; - char const *ipv6 = "no "; - char const *simd = "no "; + char *capabilities[256]; /* Just overallocate this so it's impossible to overflow... */ + char line_buf[75]; STRUCT_STAT *dumstat; + int line_len, cnt = 0; -#if SUBPROTOCOL_VERSION != 0 - if (asprintf(&subprotocol, ".PR%d", SUBPROTOCOL_VERSION) < 0) - out_of_memory("print_rsync_version"); +#define add(str,val) capabilities[cnt++] = istring(str, val) + + add("%d-bit files", (int)(sizeof (OFF_T) * 8)); + add("%d-bit inums", (int)(sizeof dumstat->st_ino * 8)); /* Don't check ino_t! */ + add("%d-bit timestamps", (int)(sizeof (time_t) * 8)); + add("%d-bit long ints", (int)(sizeof (int64) * 8)); + +#undef add +#define add(str) capabilities[cnt++] = str + + add( +#ifndef HAVE_SOCKETPAIR + "no " #endif -#ifdef HAVE_SOCKETPAIR - got_socketpair = ""; + "socketpairs"); + + add( +#ifndef SUPPORT_HARD_LINKS + "no " #endif -#ifdef HAVE_FTRUNCATE - have_inplace = ""; + "hardlinks"); + + add( +#ifndef SUPPORT_LINKS + "no " #endif -#ifdef SUPPORT_HARD_LINKS - hardlinks = ""; + "symlinks"); + + add( +#ifndef INET6 + "no " #endif -#ifdef SUPPORT_PREALLOCATION - prealloc = ""; + "IPv6"); + + add("batchfiles"); + + add( +#ifndef HAVE_FTRUNCATE + "no " #endif -#ifdef SUPPORT_ACLS - acls = ""; + "inplace"); + + add( +#ifndef HAVE_FTRUNCATE + "no " #endif -#ifdef SUPPORT_XATTRS - xattrs = ""; + "append"); + + add( +#ifndef SUPPORT_ACLS + " no" #endif -#ifdef SUPPORT_LINKS - links = ""; + "ACLs"); + + add( +#ifndef SUPPORT_XATTRS + " no" #endif -#ifdef INET6 - ipv6 = ""; + "xattrs"); + + add( +#ifndef ICONV_OPTION + " no" #endif -#ifdef ICONV_OPTION - iconv = ""; + "iconv"); + + add( +#ifndef CAN_SET_SYMLINK_TIMES + " no" #endif -#ifdef CAN_SET_SYMLINK_TIMES - symtimes = ""; + "symtimes"); + + add( +#ifndef SUPPORT_PREALLOCATION + "no " #endif -#ifdef HAVE_SIMD - simd = ""; + "prealloc"); + + add( +#ifndef HAVE_SIMD + "no " #endif + "SIMD"); + + add(NULL); +#undef add + + for (line_len = 0, cnt = 0; ; cnt++) { + char *cap = capabilities[cnt]; + int cap_len = cap ? strlen(cap) : 1000; + int need_comma = cap && capabilities[cnt+1] != NULL ? 1 : 0; + if (line_len + 1 + cap_len + need_comma >= (int)sizeof line_buf) { + rprintf(f, " %s\n", line_buf); + line_len = 0; + } + if (!cap) + break; + line_len += snprintf(line_buf+line_len, sizeof line_buf - line_len, " %s%s", cap, need_comma ? "," : ""); + } +} + +static void print_rsync_version(enum logcode f) +{ + char tmpbuf[256], *subprotocol = ""; + +#if SUBPROTOCOL_VERSION != 0 + subprotocol = istring(".PR%d", SUBPROTOCOL_VERSION); +#endif rprintf(f, "%s version %s protocol version %d%s\n", RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol); + rprintf(f, "Copyright (C) 1996-" LATEST_YEAR " by Andrew Tridgell, Wayne Davison, and others.\n"); rprintf(f, "Web site: http://rsync.samba.org/\n"); + rprintf(f, "Capabilities:\n"); - rprintf(f, " %d-bit files, %d-bit inums, %d-bit timestamps, %d-bit long ints,\n", - (int)(sizeof (OFF_T) * 8), - (int)(sizeof dumstat->st_ino * 8), /* Don't check ino_t! */ - (int)(sizeof (time_t) * 8), - (int)(sizeof (int64) * 8)); - rprintf(f, " %ssocketpairs, %shardlinks, %ssymlinks, %sIPv6, batchfiles, %sinplace,\n", - got_socketpair, hardlinks, links, ipv6, have_inplace); - rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %sSIMD\n", - have_inplace, acls, xattrs, iconv, symtimes, prealloc, simd); + print_capabilities(f); - rprintf(f,"\n"); - + rprintf(f, "Checksum list:\n"); get_default_nno_list(&valid_checksums, tmpbuf, sizeof tmpbuf, '('); - rprintf(f, "Checksum list: %s\n", tmpbuf); + rprintf(f, " %s\n", tmpbuf); + rprintf(f, "Compress list:\n"); get_default_nno_list(&valid_compressions, tmpbuf, sizeof tmpbuf, '('); - rprintf(f, "Compress list: %s\n", tmpbuf); + rprintf(f, " %s\n", tmpbuf); #ifdef MAINTAINER_MODE rprintf(f, "Panic Action: \"%s\"\n", get_panic_action()); -- The rsync repository. _______________________________________________ rsync-cvs mailing list rsync-cvs@lists.samba.org https://lists.samba.org/mailman/listinfo/rsync-cvs