Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package dolly for openSUSE:Factory checked 
in at 2021-06-07 22:44:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dolly (Old)
 and      /work/SRC/openSUSE:Factory/.dolly.new.32437 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "dolly"

Mon Jun  7 22:44:13 2021 rev:2 rq:898117 version:0.63.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/dolly/dolly.changes      2021-02-09 
21:16:40.970802352 +0100
+++ /work/SRC/openSUSE:Factory/.dolly.new.32437/dolly.changes   2021-06-07 
22:44:48.912618339 +0200
@@ -1,0 +2,5 @@
+Mon Jun  7 09:18:36 UTC 2021 - Christian Goll <[email protected]>
+
+- updated to v0.63.4 which builds with gcc-11
+
+-------------------------------------------------------------------

Old:
----
  dolly-0.63.1.tar.gz

New:
----
  dolly-0.63.4.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ dolly.spec ++++++
--- /var/tmp/diff_new_pack.3XFT0b/_old  2021-06-07 22:44:49.304619001 +0200
+++ /var/tmp/diff_new_pack.3XFT0b/_new  2021-06-07 22:44:49.308619008 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package dolly
 #
-# Copyright (C) 2021 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -14,7 +14,9 @@
 
 # Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
-%define vers 0.63.1
+
+
+%define vers 0.63.4
 
 Name:           dolly
 Summary:        Tool for cloning the installation of one machine to other 
machines
@@ -23,7 +25,7 @@
 Version:        %vers
 Release:        0
 URL:            http://www.cs.inf.ethz.ch/stricker/CoPs/patagonia/dolly.html
-Source0:        
https://github.com/mslacken/dolly/archive/%{version}.tar.gz#/dolly-%{version}.tar.gz
+Source0:        
https://github.com/openSUSE/dolly/archive/%{version}.tar.gz#/dolly-%{version}.tar.gz
 Source1:        dolly.conf
 Source2:        dolly.md
 
@@ -73,7 +75,7 @@
 %endif
 
 %files
-%doc README.md dolly.html dolly.example
+%doc README.md dolly.example
 %attr(755,root,root) %{_sbindir}/dolly
 %attr(644,root,root) %config(noreplace) %{_sysconfdir}/%{name}.conf
 %if 0%{?is_opensuse}

++++++ dolly-0.63.1.tar.gz -> dolly-0.63.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dolly-0.63.1/CHANGELOG new/dolly-0.63.4/CHANGELOG
--- old/dolly-0.63.1/CHANGELOG  2021-02-09 16:44:50.000000000 +0100
+++ new/dolly-0.63.4/CHANGELOG  2021-06-04 15:52:20.000000000 +0200
@@ -7,6 +7,9 @@
 
 History:
 
+V 0.63.4 11-SEP-2019 Christian Goll <[email protected]>
+  fixed warnings for gcc 11
+
 V 0.60 11-SEP-2019 Christian Goll <[email protected]>
   Added pure commandline feature, so that there is no need for
   a dolly configuration file. Also output to stdout is now possible.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dolly-0.63.1/Makefile new/dolly-0.63.4/Makefile
--- old/dolly-0.63.1/Makefile   2021-02-09 16:44:50.000000000 +0100
+++ new/dolly-0.63.4/Makefile   2021-06-04 15:52:20.000000000 +0200
@@ -1,7 +1,7 @@
 CXX = g++
 CC = gcc
-CFLAGS += -std=gnu11 -s -O -fPIE
-WARNINGS = -Werror -Wall -Wextra -pedantic-errors 
+CFLAGS += -std=gnu11 -s -O -fPIE $(RPM_OPT_FLAGS)
+WARNINGS = -Werror -Wall -Wextra -pedantic-errors
 LDFLAGS =
 LIBRARIES =
 BUILD_DIR = ./build
@@ -10,12 +10,19 @@
 DEPS = $(SOURCES:%.c=$(BUILD_DIR)/%.d)
 # Can 
 DEBUGFLAGS=-ggdb
+VERSION=0.63.3
 
 
 EXECUTABLE = dolly
 
 all: $(EXECUTABLE)
 
+tar: clean
+       mkdir $(EXECUTABLE)-$(VERSION)
+       find . -maxdepth 1 -type f -exec cp -a {} $(EXECUTABLE)-$(VERSION) \;
+       tar cfj $(EXECUTABLE)-$(VERSION).tar.bz2 $(EXECUTABLE)-$(VERSION)
+       rm -rf $(EXECUTABLE)-$(VERSION)
+
 $(BUILD_DIR)/%.d: %.c
        @mkdir -p $(dir $@)
        $(CC) $< -MT $(BUILD_DIR)/$*.o -MM -MF $(BUILD_DIR)/$*.d
@@ -32,5 +39,6 @@
 
 clean:
        rm -rf $(EXECUTABLE) $(OBJECTS) $(DEPS)
+       rm -rf $(EXECUTABLE)-$(VERSION) $(EXECUTABLE)-$(VERSION).tar.bz2
 
 -include $(DEPS)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dolly-0.63.1/README.md new/dolly-0.63.4/README.md
--- old/dolly-0.63.1/README.md  2021-02-09 16:44:50.000000000 +0100
+++ new/dolly-0.63.4/README.md  2021-06-04 15:52:20.000000000 +0200
@@ -1,19 +1,16 @@
-%DOLLY(1) Version 0.60 | Dolly file transfer
-
 DOLLY
 =====
-A program to clone disks / partitions
+A program to clone disks / partitions / data.
+Take same amount of time to copy data to one node or to X nodes.
 
 SYNOPSIS
 ========
 
-|dolly| \[**-f** config\]
-  or
-|dolly| \[**-I** infile\] \[**-O** outfile\|-\] \[**-H** hostlist\] 
-
+dolly \[**-f** config\]
 
-11 Sept 2019
+dolly \[**-I** infile\] \[**-O** outfile\|-\] \[**-H** hostlist\] 
 
+dolly **-v** **-r** 40 **-S** SERVERIP **-H** IPNODE1,IPNODE2,IPNODE3 **-I** 
/dev/vdd **-O** /dev/vdd
 
 DESCRIPTION
 ===========
@@ -24,63 +21,68 @@
 drives. As it forms a "virtual TCP ring" to distribute data, it works
 best with fast switched networks.
 
-As dolly clones whole partitions block-wise it works for most
-boot setups).
+As dolly clones whole partitions block-wise.
 
 OPTIONS
 =======
 If used without a configuration file following three commanline options must be
 set:
 
--I FILE : FILE is used as input file.
+**-I** FILE : FILE is used as input file.
 
--O FILE\|- : FILE will be used as output file, if '-' is used as FILE, the
+**-O** FILE\|- : FILE will be used as output file, if '-' is used as FILE, the
 output will printed to stdout.
 
--H HOSTLIST: A comma seperated hostlist, where then the first host of the list
+**-H** HOSTLIST: A comma seperated hostlist, where then the first host of the 
list
 is used as firstclient and the last host  as lastclient, like in the
 configuration file.
 
 Following other options are:
 
-  -h
+  **-h**
  :   Prints a short help and exits.
 
-  -V
+  **-V**
  :   Prints the version number as well as the date of that version and exits.
 
-  -v
+  **-v**
  :  This switches to verbose mode in which dolly prints out a little
     bit more information. This option is recommended if you want to
     know what's going on during cloning and it might be helpful during
     debugging.
 
-  -s
+  **-s**
  :  This option specifies the server machine and should only be used
     on the master. Dolly will warn you if the config file specifies
     another master than the machine on which this option is set.
     This option must be secified before the "-f" option!
 
-  -S
+  **-S**
  :  Same as "-s", but dolly will not warn you if the server's hostname
     and the name specified in the config file do not match.
 
-  -q
+ **-R**
+ :  resolve the hostnames to ipv4 addresses
+
+ **-6**
+ :  resolve the hostnames to ipv6 addresses
+
+  **-q**
  :  Usually dolly will print a warning when the select() system call
     is interrupted by a signal. This option suppresses these warnings.
 
-  -c
+  **-c**
  :  With this option it is possible to specify the uncompressed size
     of a compressed file. It's only needed for performance statistics
     at the end of a cloning process and not important if you are not
     interested in the statistics.
 
-  -d
+  **-d**
  :  The "Dummy" option disables all disk accesses. It can be used to
     benchmark the throughput of your system (computers, network,
     switches). This option must be specified before the "-f" option!
 
-  -t <seconds>
+  **-t** <seconds>
  :  When in dummy mode, this option allows to specify how long the
     testrun should approximately take. Since the dummy mode is mostly
     used for benchmarking purposes and single runs might result in
@@ -89,12 +91,12 @@
     the run-lenght in seconds, as the benchmark-time becomes more
     predictable.
     
-  -f <config file>
+  **-f** <config file>
  :  This option is used to select the config file for this cloning
     process. This option makes only sense on the master machine and
     the configuration file must exist on the master.
 
-  -o <logfile>
+  **-o** <logfile>
  :  This option specifies the logfile. Dolly will write some
     statistical information into the logfile. it is mostly
     used when benchmarking switches. The format of the lines in the
@@ -102,7 +104,7 @@
     Trans. data  Segsize Clients Time      Dataflow  Agg. dataflow
     [MB]         [Byte]  [#]     [s]       [MB/s]    [MB/s]
 
-  -a <timeout>
+  **-a** <timeout>
  :  Sometimes it might be useful if Dolly would terminate instead of
     waiting indefinitely in case something goes wrong. This option
     lets you specify this timeout. If dolly could not transfer any
@@ -112,19 +114,20 @@
     you don't want to have dolly-processes hang around if a machine
     hangs.
 
-  -n
+  **-n**
  :  Do not sync() before exit. Thus, dolly will exit sooner, but data
     may not make it to disk if power fails soon after dolly exits.
 
-  -u <size>
+  **-u** <size>
  :  Specify the size of buffers for TCP sockets. Should be a Multiple
     of 4K.
 
-  -b <size>
- :  option to specify the TRANSFER_BLOCK_SIZE. Should be a multiple of
+  **-b** <size>
+ :  Option to specify the TRANSFER_BLOCK_SIZE. Should be a multiple of
     the size of buffers for TCP sockets.
 
-
+ **-r** <n>
+ :  Retry to connect to mode <n> times
 
 
 Configuration file
@@ -279,7 +282,7 @@
    EG: endconfig
 
 
-Note on nodes' hostnames
+Note on nodes hostnames
 ------------------------
 
 On some machines (e.g. with very small maintenance installations),
@@ -384,100 +387,8 @@
 
 CHANGES 
 =======
-version 0.2
-------------------
-
-We applied some changes to Dolly since version 0.2. Most of them are
-not very important.
-
-- Dolly as a benchmarking tool.
-  Dolly can now be used to benchmark your network. In the dummy mode,
-  Dolly will not access the hard disk, neither for reading nor for
-  writing. It just transfers data between your machines. This might be
-  useful for testing the throughput of your switch. The running time
-  for such a run can be specified with the "-t" option on the command
-  line. With the "-o" option you can specify a logfile where Dolly
-  will write some statistical information.
-
-- Using extra network interfaces.
-  It's now possible to use multiple network interfaces for the data
-  transfer. This is mostly useful if you have multiple network
-  interfaces with similar speeds, e.g. two fast ethernet networks (one
-  for administration/logins and the other for your applications
-  communication). For example: If your machines are connected with two
-  fast ethernet links, then you should be able to increase the
-  thourghput of the cloning process from 10 to 20 MB/s, therefore
-  cutting the cloning-time by half.
-  You need the "add" option in the config file to use this feature.
-  WARNING: This feature has only been tested with the linear network
-  topology (no fanout option or "fanout 1" option in the config file).
-
-- Different networking topologies.
-  We tried different topologies (binary trees, ternary trees, ...) to
-  get somre more results in a paper, but the initial multi-drop chain
-  (virtual TCP ring) is still the best. You will most likely not need
-  this feature.
-
-
-version 0.57
-------------
-
-Besides some bug-files and smaller improvements, it's now possible to
-split an image in multiple files for archival and send the
-multiple-file image to the clients. This allows to story arbitrary
-long partitions on file systems with a file size limit. For details
-and examples, see the section about the configuration file below
-(parameters infile and outfile).
-
-
-version 0.58
-------------
-
-Thanks to David Mathog, dolly is now able to read or write data from
-its standard input or to its standard output. That means that you can
-e.g. pipe a tar stream through dolly. Whether that feature is useful
-or not depends on your situation. By using tar (instead of cloning the
-whole partition) your disks' reads and writes will be slower, but you
-only transfer the data that is actually needed. This feature might be
-most useful in situations where e.g. your disks/partitions are mostly
-empty or have different sizes/geometries.
-
-Please note that version 0.58 has not yet been thoroughly tested (I'm
-no longer working with clusters). E.g. it is not yet clear what
-happens when somebody tries to reach you with the "write", "talk" or
-"wall" commands while dolly is running (which might potentially
-interfere with with your stdin/stdout, see below).
-
-Note also, that since all of dolly's output is now written to stderr
-(instead of stdout as before), some third-party scripts might no
-longer work.
-
-To use the feature, you should specify /dev/stdin as your infile
-and/or /dev/stdout as your outfile.
-
-
-version 0.58C
--------------
-
-Again, thanks to David Mathog, dolly can now be run without explicit
-sync() at the end of the cloning process (option "-n"). This can speed
-up dolly's runtime considerably when cloning smaller files, but there
-is no garantuee that the data actually made it to the disk if there is
-e.g. a power loss right after dolly finished.
-
-version 0.59
-------------
-
-Some output improvments and add some options to deal with socket and 
-buffer size to experiment some parameter on the fly. Done some cleanup
-in the C code to get less warning in building with recent GCC7.
-
-version 0.60
-------------
-
-Added pure commandline feature, so that there is no need for
-a dolly configuration file. Also output to stdout is now possible.
 
+See CHANGELOG file
 
 EXAMPLE
 =======
@@ -486,28 +397,31 @@
 node0..node15. We want to clone the partition sda5 from node0 to all
 other nodes. The configuration file (let's name it dollytab.cfg)
 should then look as follows:
-  infile /dev/sda5
-  outfile /dev/sda5
-  server node0
-  firstclient node1
-  lastclient node15
-  clients 15
-  node1
-  node2
-  node3
-  node4
-  node5
-  node6
-  node7
-  node8
-  node9
-  node10
-  node11
-  node12
-  node13
-  node14
-  node15
-  endconfig
+```
+infile /dev/sda5
+outfile /dev/sda5
+server node0
+firstclient node1
+lastclient node15
+clients 15
+node1
+node2
+node3
+node4
+node5
+node6
+node7
+node8
+node9
+node10
+node11
+node12
+node13
+node14
+node15
+endconfig
+```
+
 Next, we start Dolly on all the clients. No options are required for
 the clients (but you might want to add the "-v" option for verbose
 progress reports). Finally, Dolly is started on the server as follows:
@@ -527,7 +441,8 @@
 http://www.cs.inf.ethz.ch/~rauch/
 Felix Rauch <[email protected]>
 
-AUTHORS
-=======
-Antione Agienies <[email protected]>
+AUTHORS / CONTRIBUTORS
+=======================
+Felix Rauch <[email protected]>
+Antoine Ginies <[email protected]>
 Christian Goll <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dolly-0.63.1/dolly.c new/dolly-0.63.4/dolly.c
--- old/dolly-0.63.1/dolly.c    2021-02-09 16:44:50.000000000 +0100
+++ new/dolly-0.63.4/dolly.c    2021-06-04 15:52:20.000000000 +0200
@@ -89,10 +89,10 @@
   fprintf(stderr, "using ctrl port %u\n", ctrlport);
   fprintf(stderr, "myhostname = '%s'\n", mydollytab->myhostname);
   if(mydollytab->segsize > 0) {
-    fprintf(stderr, "TCP segment size = %d\n", mydollytab->segsize);
+    fprintf(stderr, "TCP segment size = %u\n", mydollytab->segsize);
   }
   if(mydollytab->add_nr > 0) {
-    fprintf(stderr, "add_nr (extra network interfaces) = %d\n", 
mydollytab->add_nr);
+    fprintf(stderr, "add_nr (extra network interfaces) = %u\n", 
mydollytab->add_nr);
     if(mydollytab->add_mode == 1) {
       fprintf(stderr, "Postfixes: ");
     } else if(mydollytab->add_mode == 2) {
@@ -112,12 +112,12 @@
     fprintf(stderr, "%s", mydollytab->add_name[0]);
     fprintf(stderr, "\n");
   }
-  fprintf(stderr, "fanout = %d\n", mydollytab->fanout);
-  fprintf(stderr, "nr_childs = %d\n", mydollytab->nr_childs);
+  fprintf(stderr, "fanout = %u\n", mydollytab->fanout);
+  fprintf(stderr, "nr_childs = %u\n", mydollytab->nr_childs);
   fprintf(stderr, "server = '%s'\n", mydollytab->servername);
   fprintf(stderr, "I'm %sthe server.\n", (mydollytab->meserver ? "" : "not "));
   fprintf(stderr, "I'm %sthe last host.\n", (mydollytab->melast ? "" : "not 
"));
-  fprintf(stderr, "There are %d hosts in the ring (excluding server):\n",
+  fprintf(stderr, "There are %u hosts in the ring (excluding server):\n",
          mydollytab->hostnr);
   for(i = 0; i < mydollytab->hostnr; i++) {
     fprintf(stderr, "\t'%s'\n", mydollytab->hostring[i]);
@@ -173,7 +173,7 @@
 
   if(mydollytab->segsize > 0) {
     /* Attempt to set TCP_MAXSEG */
-    fprintf(stderr, "Set TCP_MAXSEG to %d bytes\n", mydollytab->segsize);
+    fprintf(stderr, "Set TCP_MAXSEG to %u bytes\n", mydollytab->segsize);
     if(setsockopt(datasock, IPPROTO_TCP, TCP_MAXSEG,
                  &mydollytab->segsize, sizeof(int)) < 0) {
       (void) fprintf(stderr,"setsockopt: TCP_MAXSEG failed! errno=%d\n", 
errno);
@@ -182,7 +182,7 @@
   }
   
   /* Attempt to set input BUFFER sizes */
-  if(mydollytab->flag_v) { fprintf(stderr, "Buffer size: %d\n", SCKBUFSIZE); }
+  if(mydollytab->flag_v) { fprintf(stderr, "Buffer size: %u\n", SCKBUFSIZE); }
   if(setsockopt(datasock, SOL_SOCKET, SO_RCVBUF, 
&SCKBUFSIZE,sizeof(SCKBUFSIZE)) < 0) {
     (void) fprintf(stderr, "setsockopt: SO_RCVBUF failed! errno = %d\n",
                   errno);
@@ -300,9 +300,9 @@
     }
     
     hent = gethostbyname(hn);
-    /*  (void)fprintf(stderr,"DEBUG gethostbyname on >%s<\n",hn); */
+    //(void)fprintf(stderr,"DEBUG gethostbyname on >%s<\n",hn);
     if(hent == NULL) {
-      char str[strlen(hn)];
+      char str[strlen(hn)+34];
       sprintf(str, "gethostbyname for host '%s' error %d",
              hn, h_errno);
       herror(str);
@@ -312,9 +312,9 @@
       fprintf(stderr, "Expected h_addrtype of AF_INET, got %d\n",
              hent->h_addrtype);
     }
-    
+
     if(mydollytab->flag_v) {
-      fprintf(stderr, "Connecting to host %s... ", hn);
+      fprintf(stderr, "Connecting to host %s...\n", hn);
       fflush(stderr);
     }
     
@@ -346,7 +346,7 @@
 
       if(mydollytab->segsize > 0) {
        /* Attempt to set TCP_MAXSEG */
-        fprintf(stderr, "Set TCP_MAXSEG to %d bytes\n", mydollytab->segsize);
+        fprintf(stderr, "Set TCP_MAXSEG to %u bytes\n", mydollytab->segsize);
         if(setsockopt(dataout[i], IPPROTO_TCP, TCP_MAXSEG,
                      &mydollytab->segsize, sizeof(int)) < 0) {
          (void) fprintf(stderr, "setsockopt: TCP_MAXSEG failed! errno = %d\n", 
@@ -360,7 +360,7 @@
       }
       getsockopt(dataout[i], SOL_SOCKET, SO_RCVBUF,
            (char *) &send_size, (void *) &sizeofint);
-      fprintf(stderr, "Send buffer %d is %d bytes\n", i, send_size);
+      //fprintf(stderr, "Send buffer %u is %d bytes\n", i, send_size);
 
       ///* Setup data port */
       addrdata.sin_family = hent->h_addrtype;
@@ -601,7 +601,7 @@
               p++;
             }
             fprintf(stderr,
-              "Machines left to wait for: %d\n", mydollytab->hostnr - 
ready_mach);
+              "Machines left to wait for: %u\n", mydollytab->hostnr - 
ready_mach);
           }
         }
       } /* For all childs */
@@ -635,9 +635,12 @@
 
 static void usage(void) {
   fprintf(stderr, "\n");
+  fprintf(stderr, "Dolly version: %s\n", version_string);
+  fprintf(stderr, "\n");
   fprintf(stderr,
          "Usage: dolly [-hVvSsnYR] [-c <size>] [-b <size>] [-u <size>] [-d] 
[-f configfile] "
-         "[-o logfile] [-t time] -I [inputfile] -O [outpufile] -H 
[hostnames]\n");
+         "[-o logfile] [-t time] -I [inputfile] -O [outpufile] -H 
[node1,node2,node3...]\n");
+  fprintf(stderr, "\n");
   fprintf(stderr, "\t-s: this is the server, check hostname\n");
   fprintf(stderr, "\t-S <hostname>: use hostname as server\n");
   fprintf(stderr, "\t-R: resolve the hostnames to ipv4 addresses\n");
@@ -661,12 +664,10 @@
   fprintf(stderr, "\t-q: Suppresss \"ignored signal\" messages\n");
   fprintf(stderr, "\t-V: Print version number and exit\n");
   fprintf(stderr, "\tFollowing options can be used instead of a dollytab 
and\n");
-  fprintf(stderr, "\timply the -S or -s option which must me prceeded.\n");
+  fprintf(stderr, "\timply the -S or -s option which must me preceded.\n");
   fprintf(stderr, "\t-H: comma seperated list of the hosts to send to\n");
   fprintf(stderr, "\t-I: input file\n");
   fprintf(stderr, "\t-O: output file (just - for output to stdout)\n");
-  fprintf(stderr, "version: %s\n",version_string);
-  fprintf(stderr, "\nDolly was part of the ETH Patagonia cluster project, ");
   fprintf(stderr, "\n");
   exit(1);
 }
@@ -700,7 +701,7 @@
       flag_f = 1;
       break;
     case 'R':
-      if(mydollytab->resolve != 6 || mydollytab->resolve != 4) {
+      if(mydollytab->resolve != 6 && mydollytab->resolve != 4) {
         mydollytab->resolve = 1;
       }
       break;
@@ -749,12 +750,12 @@
         fprintf(stderr,"'%s' is not a valid servername\n",optarg);
         exit(1);
       }
-      strncpy(mydollytab->servername,optarg,strlen(optarg));
+      memcpy(mydollytab->servername,optarg,strlen(optarg));
       break;
     case 'a':
       i = atoi(optarg);
-      if(i <= 0) {
-        fprintf(stderr, "Timeout of %d doesn't make sense.\n", i);
+      if((int)i <= 0) {
+        fprintf(stderr, "Timeout of %u doesn't make sense.\n", i);
         exit(1);
       }
       timeout = i;
@@ -786,7 +787,7 @@
         fprintf(stderr,"the -S/-s must preceed the -I option\n");
         exit(1);
       }
-      strncpy(mydollytab->infile,optarg,strlen(optarg)); 
+      memcpy(mydollytab->infile,optarg,strlen(optarg));
       flag_cargs = 1;
       break;
 
@@ -799,7 +800,7 @@
         fprintf(stderr,"the -S/-s must preceed the -O option\n");
         exit(1);
       }
-      strncpy(mydollytab->outfile,optarg,strlen(optarg)); 
+      memcpy(mydollytab->outfile,optarg,strlen(optarg));
       flag_cargs = 1;
       break;
 
@@ -833,7 +834,7 @@
            inet_pton(AF_INET,host_str,&(sock_address.sin_addr)) == 1 &&
            inet_pton(AF_INET6,host_str,&(sock_address.sin_addr)) == 1) {
           mydollytab->hostring[nr_hosts] = (char *)malloc(strlen(host_str)+1);
-          strncpy(mydollytab->hostring[nr_hosts], host_str,strlen(host_str));
+          memcpy(mydollytab->hostring[nr_hosts], host_str,strlen(host_str));
         } else { 
           /* get memory for ip address */
           ip_addr = (char*)malloc(sizeof(char)*256);
@@ -902,12 +903,12 @@
             fprintf(stderr,"Could resolve the server address 
'%s'\n",mydollytab->servername);
             exit(1);
           }
-          strncpy(mydollytab->myhostname,ip_addr,strlen(ip_addr));
-          strncpy(mydollytab->servername,ip_addr,strlen(ip_addr));
+          memcpy(mydollytab->myhostname,ip_addr,strlen(ip_addr));
+          memcpy(mydollytab->servername,ip_addr,strlen(ip_addr));
           free(ip_addr);
         } else {
-          strncpy(mydollytab->myhostname,mnname,strlen(mnname));
-          strncpy(mydollytab->servername,mnname,strlen(mnname));
+          memcpy(mydollytab->myhostname,mnname,strlen(mnname));
+          memcpy(mydollytab->servername,mnname,strlen(mnname));
         }
       } else {
         /* check if we allready have a valid ip address */
@@ -919,11 +920,11 @@
             fprintf(stderr,"Could resolve the server address 
'%s'\n",mydollytab->servername);
             exit(1);
           }
-          strncpy(mydollytab->servername,ip_addr,strlen(ip_addr));
-          strncpy(mydollytab->myhostname,ip_addr,strlen(ip_addr));
+          memcpy(mydollytab->servername,ip_addr,strlen(ip_addr));
+          memcpy(mydollytab->myhostname,ip_addr,strlen(ip_addr));
           free(ip_addr);
         } else {
-          
strncpy(mydollytab->myhostname,mydollytab->servername,strlen(mydollytab->servername));
+          
memcpy(mydollytab->myhostname,mydollytab->servername,strlen(mydollytab->servername));
         }
       }
 
@@ -969,7 +970,7 @@
       fprintf(df,"server %s\n",mydollytab->myhostname);
       fprintf(df,"firstclient %s\n",mydollytab->hostring[0]);
       fprintf(df,"lastclient %s\n",mydollytab->hostring[nr_hosts-1]);
-      fprintf(df,"clients %i\n",mydollytab->hostnr);
+      fprintf(df,"clients %u\n",mydollytab->hostnr);
       for(i = 0; i < mydollytab->hostnr; i++) {
         fprintf(df,"%s\n",mydollytab->hostring[i]);
         fprintf(stderr,"writing '%s'\n'",mydollytab->hostring[i]);
@@ -1027,7 +1028,6 @@
   for(i = 0; i < mydollytab->hostnr; i++) {
     free(mydollytab->hostring[i]);
   }
-  free(mydollytab->dollybuf);
   free(mydollytab->hostring);
   free(mydollytab);
  
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dolly-0.63.1/dolly.h new/dolly-0.63.4/dolly.h
--- old/dolly-0.63.1/dolly.h    2021-02-09 16:44:50.000000000 +0100
+++ new/dolly-0.63.4/dolly.h    2021-06-04 15:52:20.000000000 +0200
@@ -1,6 +1,6 @@
 #ifndef DOLLY_H
 #define DOLLY_H
-static const char version_string[] = "0.63, 2-FEB-2020";
+static const char version_string[] = "0.63.4, 06-JUN-2020";
 
 #include <unistd.h>
 #include <stdio.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dolly-0.63.1/dolly.html new/dolly-0.63.4/dolly.html
--- old/dolly-0.63.1/dolly.html 2021-02-09 16:44:50.000000000 +0100
+++ new/dolly-0.63.4/dolly.html 1970-01-01 01:00:00.000000000 +0100
@@ -1,560 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
-<html>
-<head><title>Dolly - A program to clone disks / partitions</title>
-
-<h1>Dolly &mdash; A program to clone disks / partitions</h1>
-
-Version 0.59<br>
-09 April 2019<br>
-Felix Rauch &lt;<a href="mailto:[email protected]";>[email protected]</a>&gt;
-
-<p>
-This document describes the program "dolly", its purpose and the
-format of the required config-file.
-
-
-<h2>Purpose</h2>
-
-Dolly is used to clone the installation of one machine to (possibly
-many) other machines. It can distribute image-files (even gnu-zipped),
-partitions or whole hard disk drives to other partitions or hard disk
-drives. As it forms a "virtual TCP ring" to distribute data, it works
-best with fast switched networks (we were able to clone a 2 GB Windows
-NT partition to 15 machines in our cluster over Gigabit Ethernet in
-less than 4 minutes).
-<p>
-As dolly clones whole partitions block-wise it works for most
-filesystems. We used it to clone partitions of the following type:
-Linux, Windows NT, Oberon, Solaris (most of our machines have multi
-boot setups). We have a small (additional) Linux installation on all
-of our machines or use a small one-floppy-disk-linux (e.g. muLinux) to
-do the cloning. On newer machines we use PXE to boot a small system in
-a RAM disk. From that system we then clone the hard disks in the
-machines.
-
-<h2>How it works</h2>
-
-Setting up or upgrading a cluster of PCs typically leads to the
-problem that many machines need the exact same files. There are
-different approaches to distribute the setup of one "master" machine
-to all the other machines in the cluster. Our approach is not
-sophisticated, but simple and fast (at least for fast switched
-networks). We send the data around in a "virtual TCP ring" from the
-server to all the clients which store tha received data on their local
-disks.
-<p>
-One machine is the master and distributes the data to the others. The
-master can be a machine of the cluster or some other machine (in the
-current version of dolly it should be the same architecture
-though). It stores the image of the partition or disk to be cloned or
-has the partition on a local disk. The server should be on a fast
-switched network (as all the other machines too) for fast cloning.
-<p>
-All other machines are clients. They receive the data from the ring,
-store it to the local disk and send it to the next machine in the
-ring. It is important to note that all of this happens at the same time.
-<p>
-The cloning process is depicted in the following two figures. Usually
-there are more than two clients, but you get the idea:
-<pre>
-      +--------+  +----------+ +----------+
-      | Master |  | Client 1 | | Client 2 |
-      +----+---+  +---|------+ +----+-----+
-            \         |            /
-             \    +---+----+      /
-              +---+ Switch |-----+
-                  +--------+
-
-</pre>
-Above: Cloning process, physical network
-<pre>
-
-
-     +--------+  Data   +----------+  Data  +----------+
-     | Master |-------->| Client 1 |------->| Client 2 |
-     +--------+         +----------+        +----------+
-         ^                   |                   |
-         | Data              | Data              | Data
-         |                   V                   V
-      +------+            +------+            +------+
-      | Disk |            | Disk |            | Disk |
-      +------+            +------+            +------+
-
-</pre>
-Above: Cloning process, virtual network with TCP connections
-<p>
-We choose this method instead of a multicast scheme because it is
-simple to implement, doesn't require the need to write a reliable
-multicast protocol and works quite well with existing
-technologies. One could also use the master as an NFS server and copy
-the data to each client, but this puts quite a high load on the server
-and makes it the bottleneck. Furthermore, it would not be possible to
-directly clone partitions from one machine to some others without any
-filesystem in the partition.
-
-
-<h2>Different cloning possibilities</h2>
-
-There are different possibilities to clone your master machine:
-<ul>
-<li>You already have an image of the partition which you want to clone
-  on your master (raw or compressed). In this case you need Linux
-  (some other UNIX might also work, but we haven't tested that yet) on
-  your master and a Linux on each client.</li>
-
-<li>You want to clone a partition which is on a local disk of your
-  master. In this case you need Linux (or probably another UNIX, we
-  haven't tried that) on your master as well as on all the clients.
-  You can use any Linux installation as long as it's not the one you
-  want to clone (i.e. you can not clone the Linux which you are
-  currently running in. See the warning below).</li>
-
-<li>You want to clone a whole disk including all the partitions. In this
-  case you either need a second disk on all machines where your Linux
-  used for the cloning process runs on (not the one you want to clone)
-  or you need a small one-floppy-disk-Linux which you boot on all
-  machines. In the later case you also need dolly on all machines
-  (copy it to your floppy disk or mount it with NFS) and the
-  config-file on the master.</li>
-</ul>
-<b>WARNING</b>: You can NOT clone an OS which is currently in
-         use. That is why we have a small second Linux installation on
-         all of our machines (or a small system that can be booted
-         over the network by PXE), which we can boot to clone our
-         regular Linux partition.
-
-<h2>Changes since version 0.2</h2>
-
-We applied some changes to Dolly since version 0.2. Most of them are
-not very important.
-<ul>
-<li>Dolly as a benchmarking tool.<br>
-  Dolly can now be used to benchmark your network. In the dummy mode,
-  Dolly will not access the hard disk, neither for reading nor for
-  writing. It just transfers data between your machines. This might be
-  useful for testing the throughput of your switch. The running time
-  for such a run can be specified with the "-t" option on the command
-  line. With the "-o" option you can specify a logfile where Dolly
-  will write some statistical information.</li>
-
-<li>Using extra network interfaces.<br>
-  It's now possible to use multiple network interfaces for the data
-  transfer. This is mostly useful if you have multiple network
-  interfaces with similar speeds, e.g. two fast ethernet networks (one
-  for administration/logins and the other for your applications
-  communication). For example: If your machines are connected with two
-  fast ethernet links, then you should be able to increase the
-  thourghput of the cloning process from 10 to 20 MB/s, therefore
-  cutting the cloning-time by half.<br>
-  You need the "add" option in the config file to use this feature.
-  WARNING: This feature has only been tested with the linear network
-  topology (no fanout option or "fanout 1" option in the config file).</li>
-
-<li>Different networking topologies.<br>
-  We tried different topologies (binary trees, ternary trees, ...) to
-  get somre more results in a paper, but the initial multi-drop chain
-  (virtual TCP ring) is still the best. You will most likely not need
-  this feature.
-</ul>
-
-<h2>Change in version 0.57</h2>
-
-Besides some bug-files and smaller improvements, it's now possible to
-split an image in multiple files for archival and send the
-multiple-file image to the clients. This allows to story arbitrary
-long partitions on file systems with a file size limit. For details
-and examples, see the section about the configuration file below
-(parameters <em>infile</em> and <em>outfile</em>).
-
-
-<h2>Change in version 0.58</h2>
-
-<p>
-Thanks to David Mathog, dolly is now able to read or write data from
-its standard input or to its standard output. That means that you can
-e.g. pipe a <tt>tar</tt> stream through dolly. Whether that feature is
-useful or not depends on your situation. By using tar (instead of
-cloning the whole partition) your disks' reads and writes will be
-slower, but you only transfer the data that is actually needed. This
-feature might be most useful in situations where e.g. your
-disks/partitions are mostly empty or have different sizes/geometries.
-</p>
-
-<p>
-Please note that version 0.58 has not yet been thoroughly tested (I'm
-no longer working with clusters). E.g. it is not yet clear what
-happens when somebody tries to reach you with the <tt>write</tt>,
-<tt>talk</tt> or <tt>wall</tt> commands while dolly is running (which
-might potentially interfere with with your stdin/stdout, see below).
-</p>
-
-<p>Note also, that since all of dolly's output is now written to
-stderr (instead of stdout as before), some third-party scripts might
-no longer work.</p>
-
-<p>
-To use the feature, you should specify <tt>/dev/stdin</tt> as your
-infile and/or <tt>/dev/stdout</tt> as your outfile.
-</p>
- 
-<h2>Change in version 0.58C</h2>
-
-<p>
-Again, thanks to David Mathog, dolly can now be run without explicit
-<tt>sync()</tt> at the end of the cloning process (option
-"<tt>-n</tt>"). This can speed up dolly's runtime considerably when
-cloning smaller files, but there is no garantuee that the data
-actually made it to the disk if there is e.g. a power loss right after
-dolly finished.
-</p>
-
-<h2>Change in version 0.59</h2>
-        <p>
-Some output improvments and add some options to deal with socket and
-buffer size to experiment some parameter on the fly. Done some cleanup
-in the C code to get less warning in building with recent GCC7.
-</p>
-
-
-<h2>Configuration file</h2>
-
-You need a configuration file for the cloning process. Its format is
-strict, but easy. It contains the following entries (note that the
-order of the entries is fix):<br>
-(The text after "Syntax:" explains the syntax of the entry, the lines
-following "EG:" are example lines)
-<ol>
-<li>The file/partition you want to clone, preceeded by the keywords
-   "infile" or "compressed infile" in case of a compressed image.
-   This file or partitions needs to be available on the master only.
-   Dolly will warn you if you try to use a compressed infile which
-   does not end with ".gz". The compressed keyword is important so
-   that the master can inform the clients when they have to use gunzip
-   before writing a file. The optional keyword "split" after the
-   filename instructs Dolly to read all files with the given name and
-   an appended number, separated by an underscore.<br>
-   <b>Syntax</b>: [compressed] infile <em>input file or device</em> [split]<br>
-   EG: <tt>infile /dev/sda10</tt><br>
-   -> Will just send the partition <tt>/dev/sda10</tt> to all clients.<br>
-   EG: <tt>compressed infile /images/cloneimages/sda10_WinNTRes.gz</tt><br>
-   -> Will send the given file compressed to all the clients,
-   instructing them to uncompress the image before writing it.<br>
-   EG: <tt>infile /images/cloneimages/sda split</tt><br>
-   -> Will send all files of the form /images/cloneimages/sda_&lt;number&gt;
-   in order to the clients.<br>
-   EG: <tt>compressed infile /images/cloneimages/sda.gz split</tt><br>
-   -> Will send all files of the form /images/cloneimages/sda.gz_&lt;number&gt;
-   in order to the clients, instructing them to decompress the
-   incoming stream before writing it.<br>
-<p>
-<li>The file or partition you want to write (usually its a partition,
-   but you can also write to a file) after the keyword "outfile". This
-   file needs to be available on the clients only. The optional
-   keyword "compressed" instructs the server to compress the data
-   before sending it, so the client will store the data
-   compressed. The optional keyword "split" after the filename,
-   followed by a number and a multiplier, instructs the client to
-   write the data in junks of no more than the given size. This is
-   useful if the file system on your client does not allow files
-   greater than a certain size. The files will be stored with the
-   given namen and an appended <tt>_&lt;number&gt;</tt>.<br>
-   <b>Syntax: [compressed] outfile <em>output file or device</em>
-   [split <em>n</em>(k|M|G|T)]</b><br>
-   EG: <tt>outfile /dev/sda10</tt><br>
-   -> Will store the incoming data stream to the partition sda10.<br>
-   EG: <tt>compressed outfile /images/cloneimages/sda10_SuSE81.gz</tt><br>
-   -> Will store the compressed data stream in the given file.<br>
-   EG: <tt>compressed outfile /images/cloneimages/sda_all.gz split 2G</tt><br>
-   -> Will store the incoming compressed data stream in the directory
-   <tt>/images/cloneimages/</tt> in files <tt>sda_all.gz_0</tt>,
-   <tt>sda_all.gz_1</tt> and so on.</ br>
-
-
-<p>
-   Instead of the first two entries ("infile" and "outfile") it is
-   also possible to use the single line "dummy <em>[MB]</em>", where
-   <em>MB</em> is  the number of Megabytes to transfer in dummy
-   mode. If &lt;MB&gt; is set to 0, then the clients will just
-   terminate. This is useful when benchmarking with different options,
-   so the clients can run all the time. To finally terminate them on
-   all clients, just set dummy to 0.<br>
-   NOTE: It is probably better to use the newer "-t" switch on the
-   server to specify the number of seconds the benchmarks should
-   run. In that case you can leave the &lt;MB&gt; blank.<br>
-   <b>Syntax: dummy <em>[MB]</em></b><br>
-   EG: <tt>dummy 128</tt>
-<p>
-   The optional keyword "segsize" is mostly used to benchmark
-   switches. It specifies the maximal size of TCP segments during the
-   network transfer. Usually you don't need to specify this option at
-   all.<br>
-   <b>Syntax: segsize <em>TCP_MAXSEG_size</em></b><br>
-   EG: <tt>segsize 128</tt>
-<p>
-   With the optional keyword "add" it is possible to add more
-   interfaces to use. The network traffic is then evenly distributed
-   across the interfaces. This option is useful if you have for
-   example two fast ethernet interfaces in your machines: One for
-   administrative purposes and one for your main application on the
-   cluster. This option is not so useful if you have multiple
-   interfaces with different bandwidths. In this case just use the
-   fastest available.<br>
-   You have to specify the number of additional interfaces and the
-   suffixes of thouse interfaces. For example, in a cluster where the
-   machines are named slave0..slave15 on their default interfaces and
-   all the machines have a second interface named
-   slave0-fast..slave15-fast, you should use the line specified below
-   (EG).<br>
-   <b>Syntax: add <em>nr</em>:<em>suffix</em>{:<em>suffix</em>}</b><br>
-   EG: <tt>add 1:-fast</tt>
-<p>
-   The optional keyword "fanout" was mostly used during performance
-   tests of different network topologies. You barely need it in
-   practice. Fanout specifies the number of outlinks from the server
-   and the following machines (except the leafes). A fanout of 1 is a
-   linear list (the default behaviour of Dolly and usually the
-   fastest), 2 is a binary tree, 3 is a ternary tree, etc. Dolly
-   automatically connects all the specified clients with the desired
-   topology.<br>
-   <b>Syntax: fanout <em>fanout</em></b><br>
-   EG: <tt>fannout 1</tt>
-<p>
-   The optional keyword "hypennormal" instructs Dolly to treat the '-'
-   character in hostnames as any other character. By default the
-   hyphen is used to separate the base hostnames from the names of the
-   different interface (e.g. "node12-giga"). You might use this
-   paramater if your hostnames include a hypen (like e.g. "node-12").<br>
-   <b>Syntax: <tt>hyphennormal</tt></b><br>
-   EG: hyphennormal<br>
-<p>
-<li> After the keyword "server" follows the hostname of the server (or
-   master). This is required for the last machine in the ring to be
-   able to send the end-acknowledge back to the server.<br>
-   <b>Syntax: server <em>master machine</em></b><br>
-   EG: server cluster-master<br>
-<p>
-<li> This entry has the keyword "firstclient" followed by the hostname
-   of the first client in the ring. You should use the hostname of the
-   machine here, not the name of the interface where you want to
-   connect.<br>
-   <b>Syntax: firstclient <em>name of first machine</em></b><br>
-   EG: <tt>firstclient cluster-1</tt><br>
-<p>
-<li> This entry has the keyword "lastclient" followed by the hostname of
-   the last client in the ring. You should use the hostname of the
-   machine here, not the name of the interface where you want to
-   connect.<br>
-   <b>Syntax: lastclient <em>name of last machine</em></b><br>
-   EG: <tt>lastclient cluster-9</tt><br>
-<p>
-<li> This entry specifies how many clients are in the ring. The keyword
-   is "clients" followed by the actual number of clients. This number
-   does not include the master.<br>
-   <b>Syntax: clients <em>number of clients</em></b><br>
-   EG: <tt>clients 9</tt><br>
-<p>
-<li> The following lines contain the interface-names of the client
-   machines. The number of machines must match the above number of
-   clients (see 6.). You should use the name of the interface on
-   which the machines will receive the data.<br>
-   <b>Syntax: <em>name of client 1</em><br>
-           <em>name of client 2</em><br>
-           [...]<br>
-           <em>name of client n</em></b><br>
-   EG: <tt>cluster-1-giga<br>
-       cluster-2-giga<br>
-       [...]<br>
-       cluster-9-giga</tt><br>
-<p>
-<li> The last entry in the config file consists of the keyword
-   "endconfig" and marks the end of the configuration file.<br>
-   <b>Syntax: endconfig</b><br>
-   EG: <tt>endconfig</tt><br>
-</ol>
-
-<h2>Note on nodes' hostnames</h2>
-
-On some machines (e.g. with very small maintenance installations),
-gethostbyname() does not return the hostname (I don't know why). If
-you have that problem, you should make sure that the environment
-variables MYNODENAME or HOST are set accordingly. Dolly first tries to
-get the environment variable MYNODENAME, then HOST, then it tries
-<tt>gethostbyname()</tt>. This feature was introduced in dolly version
-0.58.
-
-<h2>Dolly options</h2>
-
-Dolly has a few options which are explained here:
-<ul>
-<li>-h<br>
-    Prints a short help and exits.
-<br><br>
-</li>
-<li>-V<br>
-    Prints the version number as well as the date of that version and exits.
-<br><br>
-</li>
-<li>-v<br>
-    This switches to verbose mode in which dolly prints out a little
-    bit more information. This option is recommended if you want to
-    know what's going on during cloning and it might be helpful during
-    debugging.
-<br><br>
-</li>
-<li>-s<br>
-    This option specifies the server machine and should only be used
-    on the master. Dolly will warn you if the config file specifies
-    another master than the machine on which this option is set.
-    This option must be secified before the "-f" option!
-<br><br>
-</li>
-<li>-S<br>
-    Same as "-s", but dolly will not warn you if the server's hostname and
-    the name specified in the config file do not match.
-<br><br>
-</li>
-<li>-q<br>
-    Usually dolly will print a warning when the <tt>select()</tt>
-    system call is interrupted by a signal. This option suppresses
-    these warnings.
-<br><br>
-</li>
-<li>-c<br>
-    With this option it is possible to specify the uncompressed size
-    of a compressed file. It's only needed for performance statistics
-    at the end of a cloning process and not important if you are not
-    interested in the statistics.
-<br><br>
-</li>
-<li>-d<br>
-    The "Dummy" option disables all disk accesses. It can be used to
-    benchmark the throughput of your system (computers, network,
-    switches). This option must be specified before the "-f" option!
-<br><br>
-</li>
-<li>-t <em>seconds</em>
-    When in dummy mode, this option allows to specify how long the
-    testrun should approximately take. Since the dummy mode is mostly
-    used for benchmarking purposes and single runs might result in
-    different speeds (especially with many machines and bad switches
-    or with small TCP segment sizes), it's more convenient to specify
-    the run-lenght in seconds, as the benchmark-time becomes more
-    predictable.
-<br><br>
-</li>
-<li>-f <em>config file</em><br>
-    This option is used to select the config file for this cloning
-    process. This option makes only sense on the master machine and
-    the configuration file must exist on the master.
-<br><br>
-</li>
-<li>-o <em>logfile</em><br>
-    This option specifies the logfile. Dolly will write some
-    statistical information into the logfile. it is mostly
-    used when benchmarking switches. The format of the lines in the
-    logfile is as follows:<br>
-    Trans. data [MB], Segsize [Byte], Clients [#], Time [s], Dataflow
-    [MB/s], Agg. dataflow [MB/s]
-<br><br>
-</li>
-<li>-a <em>timeout</em><br>
-    Sometimes it might be useful if Dolly would terminate instead of
-    waiting indefinitely in case something goes wrong. This option
-    lets you specify this timeout. If dolly could not transfer any
-    data after <em>timeout</em> seconds, then it will simply print an error
-    message and terminate. This feature might be especially useful for
-    scripted and automatic installations (such as "CloneSys"), where
-    you don't want to have dolly-processes hang around if a machine
-    hangs.
-<br><br>
-</li>
-<li>-n<br>
-    Do not <tt>sync()</tt> before exit. Thus, dolly will exit sooner, but data
-    may not make it to disk if power fails soon after dolly exits.
-<br><br>
-</li>
-<li>-u <em>size</em><br>
-    Specify the size of buffers for TCP sockets. Should be a Multiple
-    of 4K.
-<br><br>
-</li>
-<li>-b<em>size</em><br>
-    option to specify the TRANSFER_BLOCK_SIZE. Should be a multiple of
-    the size of buffers for TCP sockets.
-<br><br>
-</li>
-</ul>
-
-<h2>Starting the process</h2>
-
-To start the cloning, you need to start dolly on each machine. It is
-recommended to start it with the "-v" (verbose) option. The order in
-which you start the programs on the master and the clients doesn't
-matter. You must give the "-s" (server) option on exactly one machine
-(the master).
-<p>
-When the machines have found each other and the ring is completed, the
-cloning starts. Dolly will print some progress information every
-10 MBytes.
-
-
-<h2>Example</h2>
-
-In this example we assume a cluster of 16 machines, named
-node0..node15. We want to clone the partition sda5 from node0 to all
-other nodes. The configuration file (let's name it dollytab.cfg)
-should then look as follows:
-<pre>
-  infile /dev/sda5
-  outfile /dev/sda5
-  server node0
-  firstclient node1
-  lastclient node15
-  clients 15
-  node1
-  node2
-  node3
-  node4
-  node5
-  node6
-  node7
-  node8
-  node9
-  node10
-  node11
-  node12
-  node13
-  node14
-  node15
-  endconfig
-</pre>
-Next, we start Dolly on all the clients. No options are required for
-the clients (but you might want to add the "-v" option for verbose
-progress reports). Finally, Dolly is started on the server as follows:<br>
-<pre>  dolly -v -s -f dollytab.cfg</pre>
-That's all.
-
-<h2>Bibliography</h2>
-
-Felix Rauch, Christian Kurmann, Thomas M. Stricker: <em>Optimizing the
-distribution of large data sets in theory and practice</em>. Concurrency
-and Computation: Practice and Experience, volume 14, issue 3, pages
-165-181, april 2002. (c) John Wiley & Sons, Ltd.
-
-<HR>
-<A HREF="http://www.cs.inf.ethz.ch/";>ICS</A> [Laboratory for
-Computersystems], <A HREF="http://www.inf.ethz.ch/";>DINFK</A>
-[Dept. of Computer Science], <A HREF="http://www.ethz.ch/";>ETHZ</A>
-[Swiss Institute of Technology], <a 
href="http://www.cs.inf.ethz.ch/stricker/CoPs/patagonia/";>Patagonia Cluster 
Project</a>.
-<br><br>
-<a href="http://www.anybrowser.org/campaign/";><img border="0" 
src="http://www.cs.inf.ethz.ch/~rauch/images/w3c_ab.png"; ALT="Best viewed with 
any browser."></a>
-<a href="http://validator.w3.org/check/referer";><img border="0"
-   src="http://www.w3.org/Icons/valid-html32";
-   alt="Valid HTML 3.2!" height="31" width="88"></a>
-<address>
-Maintained by <a href="http://www.cs.inf.ethz.ch/~rauch/";>Felix Rauch</a>.
-</address>
-Last changed: 09-Apr-2019
-</body>
-</html>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dolly-0.63.1/dollytab.c new/dolly-0.63.4/dollytab.c
--- old/dolly-0.63.1/dollytab.c 2021-02-09 16:44:50.000000000 +0100
+++ new/dolly-0.63.4/dollytab.c 2021-06-04 15:52:20.000000000 +0200
@@ -342,7 +342,7 @@
   }
   mydollytab->hostnr = atoi(str+8);
   if((mydollytab->hostnr < 1) || (mydollytab->hostnr > MAXHOSTS)) {
-    fprintf(stderr, "I think %d numbers of hosts doesn't make much sense.\n",
+    fprintf(stderr, "I think %u numbers of hosts doesn't make much sense.\n",
            mydollytab->hostnr);
     exit(1);
   }
@@ -355,7 +355,7 @@
   for(i = 0; i < mydollytab->hostnr; i++) {
     if(fgets(str, 256, df) == NULL) {
       char errstr[256];
-      sprintf(errstr, "gets for host %d", i);
+      sprintf(errstr, "gets for host %u", i);
       perror(errstr);
       exit(1);
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dolly-0.63.1/files.c new/dolly-0.63.4/files.c
--- old/dolly-0.63.1/files.c    2021-02-09 16:44:50.000000000 +0100
+++ new/dolly-0.63.4/files.c    2021-06-04 15:52:20.000000000 +0200
@@ -16,7 +16,7 @@
     }
   }
   if(mydollytab->input_split != 0) {
-    sprintf(name, "%s_%d", mydollytab->infile, input_nr);
+    sprintf(name, "%s_%u", mydollytab->infile, input_nr);
   } else {
     strcpy(name, mydollytab->infile);
   }
@@ -27,7 +27,7 @@
     input = open(name, O_RDONLY);
     if(input == -1) {
       if(try_hard == 1) {
-        char str[strlen(name)];
+        char str[strlen(name)+18];
         sprintf(str, "open inputfile '%s'", name);
         perror(str);
         exit(1);
@@ -39,7 +39,7 @@
     /* Input should be compressed first. */
     if(access(name, R_OK) == -1) {
       if(try_hard == 1) {
-        char str[strlen(name)];
+        char str[strlen(name)+18];
         sprintf(str, "open inputfile '%s'", name);
         perror(str);
         exit(1);
@@ -57,13 +57,13 @@
       /* Here's the child. */
       close(id[0]);
       close(1);
-      dup(id[1]);
+      (void) !dup(id[1]);
       close(id[1]);
       if((fd = open(name, O_RDONLY)) == -1) {
         exit(1);
       }
       close(0);
-      dup(fd);
+      (void) !dup(fd);
       close(fd);
       if(execl("/usr/bin/gzip", "gzip", "-cf", NULL) == -1) {
         perror("execl for gzip in child");
@@ -90,7 +90,7 @@
     }
   }
   if(mydollytab->output_split != 0) {
-    sprintf(name, "%s_%d", mydollytab->outfile, output_nr);
+    sprintf(name, "%s_%u", mydollytab->outfile, output_nr);
   } else {
     strcpy(name, mydollytab->outfile);
   }
@@ -117,7 +117,7 @@
       output = open(name, O_WRONLY | O_CREAT | O_EXCL, 0644);
     }
     if(output == -1) {
-      char str[strlen(name)];
+      char str[strlen(name)+19];
       sprintf(str, "open outputfile '%s'", name);
       perror(str);
       exit(1);
@@ -125,7 +125,7 @@
   } else { /* Compressed_In */
     if(access(name, W_OK) == -1) {
       if(try_hard == 1) {
-        char str[strlen(name)];
+        char str[strlen(name)+19];
         sprintf(str, "open outputfile '%s'", name);
         perror(str);
         exit(1);
@@ -144,7 +144,7 @@
       /* Here's the child! */
       close(pd[1]);
       close(0);      /* Close stdin */
-      dup(pd[0]);    /* Duplicate pipe on stdin */
+      (void) !dup(pd[0]);    /* Duplicate pipe on stdin */
       close(pd[0]);  /* Close the unused end of the pipe */
       if((fd = open(name, O_WRONLY)) == -1) {
         if(errno == ENOENT) {
@@ -154,7 +154,7 @@
         exit(1);
       }
       close(1);
-      dup(fd);
+      (void) !dup(fd);
       close(fd);
       /* Now stdout is redirected to our file */
       if(execl("/usr/bin/gunzip", "gunzip", "-c", NULL) == -1) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dolly-0.63.1/transmit.c new/dolly-0.63.4/transmit.c
--- old/dolly-0.63.1/transmit.c 2021-02-09 16:44:50.000000000 +0100
+++ new/dolly-0.63.4/transmit.c 2021-06-04 15:52:20.000000000 +0200
@@ -84,13 +84,13 @@
           }
           if(mydollytab->add_nr == 0) {
             for(i = 0; i < mydollytab->nr_childs; i++) {
-              (void)fprintf(stderr, "Writing maxbytes = %lld to ctrlout\n",
+              (void)fprintf(stderr, "Writing maxbytes = %llu to ctrlout\n",
                 maxbytes);
               movebytes(ctrlout[i], WRITE, (char *)&maxbytes, 8,mydollytab);
               shutdown(dataout[i], 2);
             }
           } else {
-            (void)fprintf(stderr, "Writing maxbytes = %lld to ctrlout\n",
+            (void)fprintf(stderr, "Writing maxbytes = %llu to ctrlout\n",
               maxbytes);
             movebytes(ctrlout[0], WRITE, (char *)&maxbytes, 8,mydollytab);
             for(i = 0; i <= mydollytab->add_nr; i++) {
@@ -238,15 +238,15 @@
              for(i = 0;(int) i < maxsetnr; i++) {
                if(FD_ISSET(i, &cur_set)) {
                  unsigned int j;
-                 fprintf(stderr, "  file descriptor %d is set.\n", i);
+                 fprintf(stderr, "  file descriptor %u is set.\n", i);
                  for(j = 0; j < mydollytab->nr_childs; j++) {
                    if(FD_ISSET(ctrlout[j], &cur_set)) {
-                     fprintf(stderr, "  (fd %d = ctrlout[%d])\n", i, j);
+                     fprintf(stderr, "  (fd %u = ctrlout[%u])\n", i, j);
                    }
                  }
                  for(j = 0; j <= mydollytab->add_nr; j++) {
                    if(FD_ISSET(datain[j], &cur_set)) {
-                     fprintf(stderr, "  (fd %d = datain[%d])\n", i, j);
+                     fprintf(stderr, "  (fd %u = datain[%u])\n", i, j);
                    }
                  }
                }
@@ -292,7 +292,7 @@
       fprintf(logfd, "outfile = '%s'\n", mydollytab->outfile);
       if(mydollytab->flag_v) {
         if(mydollytab->segsize > 0) {
-          fprintf(logfd, "TCP segment size : %d Byte (%d Byte eth)\n", 
+          fprintf(logfd, "TCP segment size : %u Byte (%u Byte eth)\n", 
             mydollytab->segsize,mydollytab->segsize+54);
         } else {
           fprintf(logfd,
@@ -300,7 +300,7 @@
         }
       } else {
         if(mydollytab->segsize > 0) {
-          fprintf(logfd, " %8d", mydollytab->segsize);
+          fprintf(logfd, " %8u", mydollytab->segsize);
         } else {
           fprintf(logfd, " %8d", 1460);
         }
@@ -308,11 +308,11 @@
       
       if(mydollytab->flag_v) {
         fprintf(logfd, "Server : '%s'\n", mydollytab->myhostname);
-        fprintf(logfd, "Fanout = %d\n", mydollytab->fanout);
-        fprintf(logfd, "Nr of childs = %d\n", mydollytab->nr_childs);
-        fprintf(logfd, "Nr of hosts = %d\n", mydollytab->hostnr);
+        fprintf(logfd, "Fanout = %u\n", mydollytab->fanout);
+        fprintf(logfd, "Nr of childs = %u\n", mydollytab->nr_childs);
+        fprintf(logfd, "Nr of hosts = %u\n", mydollytab->hostnr);
       } else {
-        fprintf(logfd, " %8d", mydollytab->hostnr);
+        fprintf(logfd, " %8u", mydollytab->hostnr);
       }
     }
   } else {
@@ -331,12 +331,12 @@
   if(mydollytab->meserver) {
     for(i = 0; i < mydollytab->nr_childs; i++) {
       if(mydollytab->flag_v) {
-        fprintf(stderr, "Waiting for child %d.\n",i);
+        fprintf(stderr, "Waiting for child %u.\n",i);
       }
       ret = movebytes(ctrlout[i], READ, buf, 8,mydollytab);
       if(ret != 8) {
         fprintf(stderr,
-          "Server got only %d bytes back from client %d instead of 8\n",
+          "Server got only %d bytes back from client %u instead of 8\n",
           ret, i);
       }
     }

Reply via email to