/* $Header$ */ /* * Author: Peter J. Nicklin */ #include #include "path.h" #include "pld.h" #include "system.h" #define PMODE 0644 /* file access mode */ extern int FORCE; /* brute force approach */ static char *tpld = "/tmp/...XXXXXX"; /* temporary project link directory */ /* * restorpld() moves a project link directory from /tmp to pathname. */ void restorpld(pathname) char *pathname; /* project link directory pathname */ { char *pathcat(); /* pathname concatenation */ char pldpathname[PATHSIZE]; /* project link directory pathname */ int fastcopy(); /* fast file copy */ pathcat(pldpathname, pathname, PLDNAME); fastcopy(tpld, pldpathname); unlink(tpld); } /* * savepld() copies a project link directory from pathname to /tmp. * Returns 0 if successful, otherwise -1. */ savepld(pathname) char *pathname; /* project link directory pathname */ { char *mktemp(); /* make temporary file name */ char *pathcat(); /* pathname concatenation */ char pldpathname[PATHSIZE]; /* project link directory pathname */ pathcat(pldpathname, pathname, PLDNAME); return(fastcopy(pldpathname, mktemp(tpld))); } /* * unsavepld() removes the saved project link directory from /tmp. */ void unsavepld() { unlink(tpld); } /* * fastcopy() copies f1 to f2. Returns 0 if successful, otherwise -1. */ fastcopy(f1, f2) char *f1; /* from file */ char *f2; /* to file */ { register int ifd; /* input file descriptor */ register int ofd; /* output file descriptor */ register int n; /* byte count */ char buf[BUFSIZ]; /* I/O buffer */ if ((ifd = OPEN(f1, O_RDONLY, PMODE)) == -1) if (FORCE) return(0); else { pperror(f1); return(-1); } if ((ofd = CREATE(f2, O_WRONLY, PMODE)) == -1) if (FORCE) return(0); else { pperror(f2); return(-1); } while ((n = read(ifd, buf, BUFSIZ)) > 0) if (write(ofd, buf, n) != n) if (FORCE) return(0); else { pperror(""); return(-1); } close(ifd); close(ofd); return(0); }