From: John Ferlan Date: Wed, 30 Sep 2015 21:37:27 +0000 (-0400) Subject: virfile: Fix error path for forked virFileRemove X-Git-Tag: v1.2.18.3~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=58e916ffaf72a9bf848e66cfa84f3f70f12438c5;p=thirdparty%2Flibvirt.git virfile: Fix error path for forked virFileRemove As it turns out the caller in this case expects a return < 0 for failure and to get/use "errno" rather than using the negative of returned status. Again different than the create path. If someone "deleted" a file from the pool without using virsh vol-delete, then the unlink/rmdir would return an error (-1) and set errno to ENOENT. The caller checks errno for ENOENT when determining whether to throw an error message indicating the failure. Without the change, the error message is: error: Failed to delete vol $vol error: cannot unlink file '/$pathto/$vol': Success This patch thus allows the fork path to follow the non-fork path where unlink/rmdir return -1 and errno. (cherry picked from commit cb19cff468432e55366014658f405066ce06c2f2) --- diff --git a/src/util/virfile.c b/src/util/virfile.c index 7b14ee8195..d7426457a6 100644 --- a/src/util/virfile.c +++ b/src/util/virfile.c @@ -2381,9 +2381,10 @@ virFileUnlink(const char *path, path, msg); VIR_FREE(msg); if (WIFEXITED(status)) - ret = -WEXITSTATUS(status); + errno = WEXITSTATUS(status); else - ret = -EACCES; + errno = EACCES; + ret = -errno; } parenterror: