thx, pushed with your changes ...
On Tuesday 22 of January 2013 12:34:41 Denys Vlasenko wrote:
> On 01/22/2013 12:03 PM, Jakub Filak wrote:
> > +int dd_chown(struct dump_dir *dd, uid_t new_uid)
> > +{
> ...
>
> > + errno = 0;
> > + struct stat statbuf;
> > + if (!(stat(dd->dd_dirname, &statbuf) == 0 && S_ISDIR(statbuf.st_mode)))
> > + {
> > + perror_msg("stat");
> > + errno = 0;
> ^^^^^^^^^^^
> > + return 1;
> > + }
>
> Why do you clear errno? I think it should be removed
> (maybe both "errno = 0"'s should be removed).
>
> > + int chown_res = lchown(dd->dd_dirname, owners_uid, groups_gid);
> > + int chown_errno = errno;
> > + dd_init_next_file(dd);
> > + char *full_name;
> > + while (chown_res == 0 && dd_get_next_file(dd, /*short_name*/ NULL,
> > &full_name))
> > + {
> > + VERB3 log("chowning %s", full_name);
> > + chown_res = lchown(full_name, owners_uid, groups_gid);
> > + chown_errno = errno;
> > + free(full_name);
> > + }
> > +
> > + if (chown_res != 0)
> > + {
> > + errno = chown_errno;
> > + perror_msg("chown");
> > + errno = 0;
> > + return 1;
> > + }
> +
> + return 0;
> +}
>
> Here too...
> I propose slightly different code:
>
>
> > + int chown_res = lchown(dd->dd_dirname, owners_uid, groups_gid);
> if (chown_res)
> perror_msg("lchown('%s')", dd->dd_dirname);
> else
> {
> > + dd_init_next_file(dd);
> > + char *full_name;
> > + while (chown_res == 0 && dd_get_next_file(dd, /*short_name*/ NULL,
> > &full_name))
> > + {
> > + VERB3 log("chowning %s", full_name);
> > + chown_res = lchown(full_name, owners_uid, groups_gid);
> if (chown_res)
> perror_msg("lchown('%s')", full_name);
> > + free(full_name);
> > + }
> }
>
> return chown_res;
> }
>
>