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;
>    }
> 
> 

Reply via email to