On Sun, Jul 15, 2012 at 02:54:31PM +0200, Jan Klemkow wrote:
> + if (!mflag)
> + continue;
> + if (depth == max_depth)
> + continue;
This breaks the non recursive case. There depth and max_depth are
always 0. Do "if (S_ISDIR(filestat.st_mode) && depth == max_depth)"
as I have already suggested.
> + if (!confirm(argv[0], *cpp))
> + continue;
> +
> + /*
> + * If file is a directory then create a new one
> + * at the remote machine.
> + */
> + stat(*cpp, &filestat);
Please do the error check.
> + if (S_ISDIR(filestat.st_mode)) {
> + xargv[1] = *cpp;
> + makedir(2, xargv);
> + cd(2, xargv);
> + if (dirchange != 1) {
> + warn("remote: %s", *cpp);
> + mflag = 0;
mget does not set mflag = 0 here. If we cannot create a remote
directory, just print the error message and skip this file.
Don't stop recursion.
> + continue;
> + }
> +
> + if (chdir(*cpp) != 0) {
> + warn("local: %s", *cpp);
mget does not warn here. This should not happen anyway. But perhaps
it would be better to add a warning in mget than to remove it here.
> + goto out;
> + }
> +
> + /* Copy the whole directory recursively. */
> + xargv[1] = "*";
> + mput(2, xargv);
> +
> + if (chdir("..") != 0) {
> + warn("local: %s", *cpp);
mget does not warn here. This should not happen anyway.
> + mflag = 0;
mget has a goto out here. Of course that does not change anything.
But it shows that the correct error handling has been considered.
> + }
> + out:
> + xargv[1] = "..";
> + cd(2, xargv);
> + if (dirchange != 1) {
> + warn("remote: %s", *cpp);
> + mflag = 0;
> }
> + continue;
> + }
bluhm