- return(1);
- utime(target, &s1.st_atime);
- }
- if (unlink(source) < 0) {
- fprintf(stderr, "mv: cannot unlink %s\n", source);
- return(1);
- }
- return(0);
-}
-
-mvdir(source, target)
-char *source, *target;
-{
- register char *p;
- register i;
- char buf[MAXN];
- char c,cc;
-
- if (stat(target, &s2) >= 0) {
- if ((s2.st_mode&S_IFMT) != S_IFDIR) {
- fprintf(stderr, "mv: %s exists\n", target);
- return(1);
- }
- p = dname(source);
- if (strlen(target) > MAXN-strlen(p)-2) {
- fprintf(stderr, "mv :target name too long\n");
- return(1);
- }
- strcpy(buf, target);
- target = buf;
- strcat(buf, SDELIM);
- strcat(buf, p);
- if (stat(target, &s2) >= 0) {
- fprintf(stderr, "mv: %s exists\n", buf);
- return(1);
- }
- }
- if (strcmp(source, target) == 0) {
- fprintf(stderr, "mv: ?? source == target, source exists and target doesnt\n");
- return(1);
- }
- p = dname(source);
- if (!strcmp(p, DOT) || !strcmp(p, DOTDOT) || !strcmp(p, "") || p[strlen(p)-1]=='/') {
- fprintf(stderr, "mv: cannot rename %s\n", p);
- return(1);
- }
- if (stat(pname(source), &s1) < 0 || stat(pname(target), &s2) < 0) {
- fprintf(stderr, "mv: cannot locate parent\n");
- return(1);
- }
- if (access(pname(target), 2) < 0) {
- fprintf(stderr, "mv: no write access to %s\n", pname(target));
- return(1);
- }
- if (access(pname(source), 2) < 0) {
- fprintf(stderr, "mv: no write access to %s\n", pname(source));
- return(1);
- }
- if (s1.st_dev != s2.st_dev) {
- fprintf(stderr, "mv: cannot move directories across devices\n");
- return(1);