aboutsummaryrefslogtreecommitdiffstats
path: root/batch.c
blob: 42a249c2f5409ada0865a5203989b4586750edc8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/* -*- c-file-style: "linux" -*-

   Weiss 1/1999
   Batch utilities for rsync.

*/

#include "rsync.h"
#include <time.h>

extern char *batch_prefix;

void write_batch_argvs_file(int argc, char *argv[])
{
	int fd, i;
	char filename[MAXPATHLEN];

	stringjoin(filename, sizeof filename,
		   batch_prefix, ".rsync_argvs", NULL);
	fd = do_open(filename, O_WRONLY | O_CREAT | O_TRUNC,
		     S_IRUSR | S_IWUSR | S_IEXEC);
	if (fd < 0) {
		rsyserr(FERROR, errno, "Batch file %s open error", filename);
		exit_cleanup(1);
	}

	/* Write argvs info to BATCH.rsync_argvs file */
	for (i = 0; i < argc; i++) {
		if (i == argc - 2) /* Skip source directory on cmdline */
			continue;
		if (strncmp(argv[i], "--files-from=", 13) == 0)
			continue;
		if (i != 0)
			write(fd, " ", 1);
		if (strncmp(argv[i], "--write-batch=", 14) == 0) {
			write(fd, "--read-batch=", 13);
			write(fd, batch_prefix, strlen(batch_prefix));
		} else if (i == argc - 1) {
			char *p = find_colon(argv[i]);
			if (p) {
				if (*++p == ':')
					p++;
			} else
				p = argv[i];
			write(fd, "${1:-", 5);
			write(fd, p, strlen(p));
			write(fd, "}", 1);
		} else
			write(fd, argv[i], strlen(argv[i]));
	}
	if (write(fd, "\n", 1) != 1 || close(fd) < 0) {
		rsyserr(FERROR, errno, "Batch file %s write error", filename);
		exit_cleanup(1);
	}
}

void show_flist(int index, struct file_struct **fptr)
{
	/*  for debugging    show_flist(flist->count, flist->files * */

	int i;
	for (i = 0; i < index; i++) {
		rprintf(FINFO, "flist->flags=%#x\n", fptr[i]->flags);
		rprintf(FINFO, "flist->modtime=%#lx\n",
			(long unsigned) fptr[i]->modtime);
		rprintf(FINFO, "flist->length=%.0f\n",
			(double) fptr[i]->length);
		rprintf(FINFO, "flist->mode=%#o\n", (int) fptr[i]->mode);
		rprintf(FINFO, "flist->basename=%s\n", fptr[i]->basename);
		if (fptr[i]->dirname)
			rprintf(FINFO, "flist->dirname=%s\n",
				fptr[i]->dirname);
		if (fptr[i]->basedir)
			rprintf(FINFO, "flist->basedir=%s\n",
				fptr[i]->basedir);
	}
}

void show_argvs(int argc, char *argv[])
{
	/*  for debugging  * */

	int i;
	rprintf(FINFO, "BATCH.C:show_argvs,argc=%d\n", argc);
	for (i = 0; i < argc; i++) {
		/*    if (argv[i])   */
		rprintf(FINFO, "i=%d,argv[i]=%s\n", i, argv[i]);

	}
}