diff --git a/src/libstore/normalise.cc b/src/libstore/normalise.cc index 56ce5da7d..1632ad1fb 100644 --- a/src/libstore/normalise.cc +++ b/src/libstore/normalise.cc @@ -501,7 +501,7 @@ void NormalisationGoal::buildDone() debug(format("builder process for `%1%' finished") % nePath); /* Check the exit status. */ - if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { + if (!statusOk(status)) { deleteTmpDir(false); throw Error(format("builder for `%1%' %2%") % nePath % statusToString(status)); @@ -1371,7 +1371,7 @@ void SubstitutionGoal::finished() debug(format("substitute for `%1%' finished") % storePath); /* Check the exit status. */ - if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) + if (!statusOk(status)) throw Error(format("builder for `%1%' %2%") % storePath % statusToString(status)); diff --git a/src/libstore/store.cc b/src/libstore/store.cc index 2ec93d63b..9677f8422 100644 --- a/src/libstore/store.cc +++ b/src/libstore/store.cc @@ -161,7 +161,7 @@ void copyPath(const Path & src, const Path & dst) /* Wait for the child to finish. */ int status = pid.wait(true); - if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) + if (!statusOk(status)) throw Error(format("cannot copy `%1% to `%2%': child %3%") % src % dst % statusToString(status)); } diff --git a/src/libutil/util.cc b/src/libutil/util.cc index d4345eac3..5fb553d6d 100644 --- a/src/libutil/util.cc +++ b/src/libutil/util.cc @@ -611,3 +611,9 @@ string statusToString(int status) return "died abnormally"; } else return "succeeded"; } + + +bool statusOk(int status) +{ + return WIFEXITED(status) && WEXITSTATUS(status) == 0; +} diff --git a/src/libutil/util.hh b/src/libutil/util.hh index 67661eb5f..13f28dc22 100644 --- a/src/libutil/util.hh +++ b/src/libutil/util.hh @@ -243,5 +243,7 @@ Strings unpackStrings(const string & s); error string. */ string statusToString(int status); +bool statusOk(int status); + #endif /* !__UTIL_H */