+ if ((pushd = getcwd(NULL, BUFSIZ + 1)) == NULL) {
+ fprintf(stderr, "%s: getcwd(): %s\n", dz, strerror(errno));
+ continue;
+ }
+ if (chdir(baseDestName) < 0) {
+ fprintf(stderr, "%s: chdir(%s): %s\n", dz, baseSrcName, strerror(errno));
+ continue;
+ }
+ if ((d = getcwd(NULL, BUFSIZ + 1)) == NULL) {
+ fprintf(stderr, "%s: getcwd(): %s\n", dz, strerror(errno));
+ continue;
+ }
+ while (!state && *d != '\0') {
+ if (stat(d, &sb) < 0) { /* stat not lstat - always dereference targets */
+ fprintf(stderr, "%s: stat(%s) :%s\n", dz, d, strerror(errno));
+ state = -1;
+ continue;
+ }
+ if ((sb.st_ino == srcStatBuf.st_ino) &&
+ (sb.st_dev == srcStatBuf.st_dev)) {
+ fprintf(stderr,
+ "%s: Cannot %s `%s' "
+ "into a subdirectory of itself, `%s/%s'\n",
+ dz, dz, baseSrcName, baseDestName, baseSrcName);
+ state = -1;
+ continue;
+ }
+ if ((p = strrchr(d, '/')) != NULL) {
+ *p = '\0';
+ }
+ }
+ if (chdir(pushd) < 0) {
+ fprintf(stderr, "%s: chdir(%s): %s\n", dz, pushd, strerror(errno));
+ free(pushd);
+ free(d);
+ continue;
+ }
+ free(pushd);
+ free(d);
+ if (state < 0)
+ continue;
+ else
+ fill_baseDest_buf(baseDestName, &baseDestLen);
+ }
+ status = setjmp(catch);
+ if (status == 0) {
+ mv_Action_first_time = 1;
+ if (recursiveAction(baseSrcName,
+ recursiveFlag, followLinks, FALSE,
+ cp_mv_Action, cp_mv_Action, NULL) == FALSE) goto exit_false;
+ if (dz_i == is_mv &&
+ recursiveAction(baseSrcName,
+ recursiveFlag, followLinks, TRUE,
+ rm_Action, rm_Action, NULL) == FALSE) goto exit_false;
+ }
+ if (flags_memo)
+ *(baseDestName + baseDestLen) = '\0';
+ }
+ return( TRUE);