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