CBL-Mariner/SPECS-EXTENDED/rdist/rdist-6.1.5-links.patch

75 строки
1.8 KiB
Diff

--- 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
@@ -303,6 +303,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
*/
@@ -311,6 +323,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--;
@@ -323,12 +336,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
@@ -580,7 +580,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
@@ -295,9 +295,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;
};