From: Colin Walters Date: Thu, 26 Aug 2021 19:16:37 +0000 (-0400) Subject: checkout: Save errno when re-throwing X-Git-Tag: archive/raspbian/2022.1-3+rpi1~1^2~4^2~2^2~7^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=87d115706eed52069e54785b87108c97a44a0343;p=ostree.git checkout: Save errno when re-throwing I was seeing an `EPERM` here which was confusing. It turned out the real error was `EEXIST`. Since we're referring to the original error, but we do a lot of computation in the middle, we need to save errno. --- diff --git a/src/libostree/ostree-repo-checkout.c b/src/libostree/ostree-repo-checkout.c index eaa33a28..bdd93e7c 100644 --- a/src/libostree/ostree-repo-checkout.c +++ b/src/libostree/ostree-repo-checkout.c @@ -481,6 +481,7 @@ checkout_file_hardlink (OstreeRepo *self, } else if (errno == EEXIST) { + int saved_errno = errno; /* When we get EEXIST, we need to handle the different overwrite modes. */ switch (options->overwrite_mode) { @@ -566,6 +567,7 @@ checkout_file_hardlink (OstreeRepo *self, else { g_assert_cmpint (options->overwrite_mode, ==, OSTREE_REPO_CHECKOUT_OVERWRITE_UNION_IDENTICAL); + errno = saved_errno; return glnx_throw_errno_prefix (error, "Hardlinking %s to %s", loose_path, destination_name); } break;