| Upstream-Status: Inappropriate [1] |
| |
| [1] Not the author, the patch is from: |
| http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm |
| |
| --- rdist-6.1.5/src/client.c.links Wed Feb 17 17:46:09 1999 |
| +++ rdist-6.1.5/src/client.c Wed Feb 17 17:51:15 1999 |
| @@ -309,6 +309,18 @@ |
| return(0); |
| } |
| |
| +void freelinkinfo(lp) |
| + struct linkbuf *lp; |
| +{ |
| + if (lp->pathname) |
| + free(lp->pathname); |
| + if (lp->src) |
| + free(lp->src); |
| + if (lp->target) |
| + free(lp->target); |
| + free(lp); |
| +} |
| + |
| /* |
| * Save and retrieve hard link info |
| */ |
| @@ -317,6 +329,7 @@ |
| { |
| struct linkbuf *lp; |
| |
| + /* xxx: linear search doesn't scale with many links */ |
| for (lp = ihead; lp != NULL; lp = lp->nextp) |
| if (lp->inum == statp->st_ino && lp->devnum == statp->st_dev) { |
| lp->count--; |
| @@ -329,12 +342,14 @@ |
| lp->inum = statp->st_ino; |
| lp->devnum = statp->st_dev; |
| lp->count = statp->st_nlink - 1; |
| - (void) strcpy(lp->pathname, target); |
| - (void) strcpy(lp->src, source); |
| + lp->pathname = strdup(target); |
| + lp->src = strdup(source); |
| if (Tdest) |
| - (void) strcpy(lp->target, Tdest); |
| + lp->target = strdup(Tdest); |
| else |
| - *lp->target = CNULL; |
| + lp->target = NULL; |
| + if (!lp->pathname || !lp->src || !(Tdest && lp->target)) |
| + fatalerr("Cannot malloc memory in linkinfo."); |
| |
| return((struct linkbuf *) NULL); |
| } |
| --- rdist-6.1.5/src/docmd.c.links Wed Feb 17 17:51:23 1999 |
| +++ rdist-6.1.5/src/docmd.c Wed Feb 17 17:52:44 1999 |
| @@ -586,7 +586,7 @@ |
| if (!nflag) { |
| register struct linkbuf *nextl, *l; |
| |
| - for (l = ihead; l != NULL; free((char *)l), l = nextl) { |
| + for (l = ihead; l != NULL; freelinkinfo(l), l = nextl) { |
| nextl = l->nextp; |
| if (contimedout || IS_ON(opts, DO_IGNLNKS) || |
| l->count == 0) |
| --- rdist-6.1.5/include/defs.h.links Wed Feb 17 17:52:58 1999 |
| +++ rdist-6.1.5/include/defs.h Wed Feb 17 17:53:47 1999 |
| @@ -276,9 +276,9 @@ |
| ino_t inum; |
| dev_t devnum; |
| int count; |
| - char pathname[BUFSIZ]; |
| - char src[BUFSIZ]; |
| - char target[BUFSIZ]; |
| + char *pathname; |
| + char *src; |
| + char *target; |
| struct linkbuf *nextp; |
| }; |
| |