1*4882a593SmuzhiyunUpstream-Status: Inappropriate [1]
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun[1] Not the author, the patch is from:
4*4882a593Smuzhiyunhttp://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun--- rdist-6.1.5/src/client.c.links	Wed Feb 17 17:46:09 1999
7*4882a593Smuzhiyun+++ rdist-6.1.5/src/client.c	Wed Feb 17 17:51:15 1999
8*4882a593Smuzhiyun@@ -309,6 +309,18 @@
9*4882a593Smuzhiyun 	return(0);
10*4882a593Smuzhiyun }
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun+void freelinkinfo(lp)
13*4882a593Smuzhiyun+	struct linkbuf *lp;
14*4882a593Smuzhiyun+{
15*4882a593Smuzhiyun+	if (lp->pathname)
16*4882a593Smuzhiyun+		free(lp->pathname);
17*4882a593Smuzhiyun+	if (lp->src)
18*4882a593Smuzhiyun+		free(lp->src);
19*4882a593Smuzhiyun+	if (lp->target)
20*4882a593Smuzhiyun+		free(lp->target);
21*4882a593Smuzhiyun+	free(lp);
22*4882a593Smuzhiyun+}
23*4882a593Smuzhiyun+
24*4882a593Smuzhiyun /*
25*4882a593Smuzhiyun  * Save and retrieve hard link info
26*4882a593Smuzhiyun  */
27*4882a593Smuzhiyun@@ -317,6 +329,7 @@
28*4882a593Smuzhiyun {
29*4882a593Smuzhiyun 	struct linkbuf *lp;
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun+	/* xxx: linear search doesn't scale with many links */
32*4882a593Smuzhiyun 	for (lp = ihead; lp != NULL; lp = lp->nextp)
33*4882a593Smuzhiyun 		if (lp->inum == statp->st_ino && lp->devnum == statp->st_dev) {
34*4882a593Smuzhiyun 			lp->count--;
35*4882a593Smuzhiyun@@ -329,12 +342,14 @@
36*4882a593Smuzhiyun 	lp->inum = statp->st_ino;
37*4882a593Smuzhiyun 	lp->devnum = statp->st_dev;
38*4882a593Smuzhiyun 	lp->count = statp->st_nlink - 1;
39*4882a593Smuzhiyun-	(void) strcpy(lp->pathname, target);
40*4882a593Smuzhiyun-	(void) strcpy(lp->src, source);
41*4882a593Smuzhiyun+	lp->pathname = strdup(target);
42*4882a593Smuzhiyun+	lp->src = strdup(source);
43*4882a593Smuzhiyun 	if (Tdest)
44*4882a593Smuzhiyun-		(void) strcpy(lp->target, Tdest);
45*4882a593Smuzhiyun+		lp->target = strdup(Tdest);
46*4882a593Smuzhiyun 	else
47*4882a593Smuzhiyun-		*lp->target = CNULL;
48*4882a593Smuzhiyun+		lp->target = NULL;
49*4882a593Smuzhiyun+	if (!lp->pathname || !lp->src || !(Tdest && lp->target))
50*4882a593Smuzhiyun+		fatalerr("Cannot malloc memory in linkinfo.");
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun 	return((struct linkbuf *) NULL);
53*4882a593Smuzhiyun }
54*4882a593Smuzhiyun--- rdist-6.1.5/src/docmd.c.links	Wed Feb 17 17:51:23 1999
55*4882a593Smuzhiyun+++ rdist-6.1.5/src/docmd.c	Wed Feb 17 17:52:44 1999
56*4882a593Smuzhiyun@@ -586,7 +586,7 @@
57*4882a593Smuzhiyun 	if (!nflag) {
58*4882a593Smuzhiyun 		register struct linkbuf *nextl, *l;
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun-		for (l = ihead; l != NULL; free((char *)l), l = nextl) {
61*4882a593Smuzhiyun+		for (l = ihead; l != NULL; freelinkinfo(l), l = nextl) {
62*4882a593Smuzhiyun 			nextl = l->nextp;
63*4882a593Smuzhiyun 			if (contimedout || IS_ON(opts, DO_IGNLNKS) ||
64*4882a593Smuzhiyun 			    l->count == 0)
65*4882a593Smuzhiyun--- rdist-6.1.5/include/defs.h.links	Wed Feb 17 17:52:58 1999
66*4882a593Smuzhiyun+++ rdist-6.1.5/include/defs.h	Wed Feb 17 17:53:47 1999
67*4882a593Smuzhiyun@@ -276,9 +276,9 @@
68*4882a593Smuzhiyun 	ino_t	inum;
69*4882a593Smuzhiyun 	dev_t	devnum;
70*4882a593Smuzhiyun 	int	count;
71*4882a593Smuzhiyun-	char	pathname[BUFSIZ];
72*4882a593Smuzhiyun-	char	src[BUFSIZ];
73*4882a593Smuzhiyun-	char	target[BUFSIZ];
74*4882a593Smuzhiyun+	char	*pathname;
75*4882a593Smuzhiyun+	char	*src;
76*4882a593Smuzhiyun+	char	*target;
77*4882a593Smuzhiyun 	struct	linkbuf *nextp;
78*4882a593Smuzhiyun };
79*4882a593Smuzhiyun
80