- if (stat(target, &s2) >= 0) {
- if ((s2.st_mode&S_IFMT) != S_IFDIR) {
- fprintf(stderr, "mv: %s exists\n", target);
- return(1);
- } else if (iflag && !fflag) {
- fprintf(stderr, "remove %s? ", target);
- cc = c = getchar();
- while (c != '\n' && c != EOF)
- c = getchar();
- if (cc != 'y')
- return(1);
- }
- if (strlen(target) > MAXN-DIRSIZ-2) {
- fprintf(stderr, "mv :target name too long\n");
- return(1);
- }
- strcpy(buf, target);
- target = buf;
- strcat(buf, SDELIM);
- strcat(buf, dname(source));
- 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);