=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/oldrdist/Attic/server.c,v retrieving revision 1.9 retrieving revision 1.10 diff -c -r1.9 -r1.10 *** src/usr.bin/oldrdist/Attic/server.c 1997/07/25 21:05:37 1.9 --- src/usr.bin/oldrdist/Attic/server.c 1998/04/27 03:13:53 1.10 *************** *** 1,4 **** ! /* $OpenBSD: server.c,v 1.9 1997/07/25 21:05:37 mickey Exp $ */ /* * Copyright (c) 1983, 1993 --- 1,4 ---- ! /* $OpenBSD: server.c,v 1.10 1998/04/27 03:13:53 deraadt Exp $ */ /* * Copyright (c) 1983, 1993 *************** *** 35,41 **** #ifndef lint /* from: static char sccsid[] = "@(#)server.c 8.1 (Berkeley) 6/9/93"; */ ! static char *rcsid = "$OpenBSD: server.c,v 1.9 1997/07/25 21:05:37 mickey Exp $"; #endif /* not lint */ #include --- 35,41 ---- #ifndef lint /* from: static char sccsid[] = "@(#)server.c 8.1 (Berkeley) 6/9/93"; */ ! static char *rcsid = "$OpenBSD: server.c,v 1.10 1998/04/27 03:13:53 deraadt Exp $"; #endif /* not lint */ #include *************** *** 47,52 **** --- 47,53 ---- struct linkbuf *ihead; /* list of files with more than one link */ char buf[BUFSIZ]; /* general purpose buffer */ char target[BUFSIZ]; /* target/source directory name */ + char source[BUFSIZ]; /* source directory name */ char *tp; /* pointer to end of target name */ char *Tdest; /* pointer to last T dest*/ int catname; /* cat name to target name */ *************** *** 243,248 **** --- 244,254 ---- char *rname; char destcopy[BUFSIZ]; + if (opts & WHOLE) + source[0] = '\0'; + else + strcpy(source, src); + if (dest == NULL) { opts &= ~WHOLE; /* WHOLE mode only useful if renaming */ dest = src; *************** *** 288,294 **** if (response() < 0) return; ! if (destdir) { strcpy(destcopy, dest); Tdest = destcopy; } --- 294,306 ---- if (response() < 0) return; ! /* ! * Save the name of the remote target destination if we are ! * in WHOLE mode (destdir > 0) or if the source and destination ! * are not the same. This info will be used later for maintaining ! * hardlink info. ! */ ! if (destdir || (src && dest && strcmp(src, dest))) { strcpy(destcopy, dest); Tdest = destcopy; } *************** *** 296,301 **** --- 308,355 ---- Tdest = 0; } + static char * + remotename(pathname, src) + char *pathname; + char *src; + { + char *cp; + int len; + + cp = pathname; + len = strlen(src); + if (0 == strncmp(pathname, src, len)) + cp += len; + if (*cp == '/') + cp ++; + return(cp); + } + + void + installlink(lp, rname, opts) + struct linkbuf *lp; + char *rname; + int opts; + { + if (*lp->target == 0) + (void) snprintf(buf, sizeof(buf), "k%o %s %s\n", + opts, lp->pathname, rname); + else + (void) snprintf(buf, sizeof(buf), "k%o %s/%s %s\n", + opts, lp->target, + remotename(lp->pathname, lp->src), rname); + + if (debug) { + printf("lp->src = %s\n", lp->src); + printf("lp->target = %s\n", lp->target); + printf("lp->pathname = %s\n", lp->pathname); + printf("rname = %s\n", rname); + printf("buf = %s", buf); + } + (void) write(rem, buf, strlen(buf)); + (void) response(); + } + #define protoname() (pw ? pw->pw_name : user) #define protogroup() (gr ? gr->gr_name : group) /* *************** *** 409,426 **** struct linkbuf *lp; if ((lp = savelink(&stb)) != NULL) { ! /* install link */ ! if (*lp->target == 0) ! (void) snprintf(buf, sizeof(buf), "k%o %s %s\n", ! opts, lp->pathname, rname); ! else ! (void) snprintf(buf, sizeof(buf), ! "k%o %s/%s %s\n", opts, lp->target, ! lp->pathname, rname); ! if (debug) ! printf("buf = %s", buf); ! (void) write(rem, buf, strlen(buf)); ! (void) response(); return; } } --- 463,469 ---- struct linkbuf *lp; if ((lp = savelink(&stb)) != NULL) { ! installlink(lp, rname, opts); return; } } *************** *** 458,474 **** struct linkbuf *lp; if ((lp = savelink(&stb)) != NULL) { ! /* install link */ ! if (*lp->target == 0) ! (void) snprintf(buf, sizeof(buf), "k%o %s %s\n", opts, ! lp->pathname, rname); ! else ! (void) snprintf(buf, sizeof(buf), "k%o %s/%s %s\n", ! opts, lp->target, lp->pathname, rname); ! if (debug) ! printf("buf = %s", buf); ! (void) write(rem, buf, strlen(buf)); ! (void) response(); return; } } --- 501,507 ---- struct linkbuf *lp; if ((lp = savelink(&stb)) != NULL) { ! installlink(lp, rname, opts); return; } } *************** *** 546,551 **** --- 579,585 ---- lp->devnum = stp->st_dev; lp->count = stp->st_nlink - 1; strcpy(lp->pathname, target); + strcpy(lp->src, source); if (Tdest) strcpy(lp->target, Tdest); else