[systemd-devel] [PATCH] [PATCH v2] util: add rename_noreplace

Lennart Poettering lennart at poettering.net
Tue Mar 10 09:41:10 PDT 2015


On Tue, 10.03.15 17:34, Alban Crequy (alban.crequy at gmail.com) wrote:

>  
> -                r = renameat2(AT_FDCWD, i->temp_path, AT_FDCWD, i->final_path, RENAME_NOREPLACE);
> +                r = rename_noreplace(AT_FDCWD, i->temp_path, AT_FDCWD, i->final_path);
>                  if (r < 0) {
>                          r = log_error_errno(errno, "Failed to move RAW file into place: %m");
>                          goto finish;

If rename_noreplace() would return "-errno" like all the other calls
we define, then this would become:

if (r < 0) {
        log_error_errno(r, "Failed to move RAW file into place: %m");
        goto finish;
}

Which is both shorter and more inline with the rest of our code...

> -        if (renameat2(AT_FDCWD, t, AT_FDCWD, to, replace ? 0 : RENAME_NOREPLACE) < 0) {
> +        if (replace) {
> +                r = renameat(AT_FDCWD, t, AT_FDCWD, to);
> +        } else {
> +                r = rename_noreplace(AT_FDCWD, t, AT_FDCWD, to);
> +        }
> +        if (r < 0) {

Please, no {} for single-line if blocks. See CODING_STYLE.

> +        ret = unlinkat(olddirfd, oldpath, 0);
> +        if (ret < 0)
> +                unlinkat(newdirfd, newpath, 0);

Recently we started prefixing calls like this where we knowingly
ignore the return value with casts to (void). This tells code checkers
like Coverity that we *knowingly* ignore the error condition
here. Hence:

        (void) unlinkat(newdirfd, newpath, 0);

instead of:

        unlinkat(newdirfd, newpath, 0);

Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list