On 3/15/21 12:22 PM, Andrea Bolognani wrote:
On Mon, 2021-03-15 at 11:57 +0100, Andrea Bolognani wrote:
> The changes you're suggesting are not trivial enough for me to feel
> comfortable simply applying them locally and then pushing right away.
> Would the diff below look reasonable squashed in?
>
> diff --git a/src/util/virprocess.c b/src/util/virprocess.c
> index 4fa854090d..cae0dabae3 100644
> --- a/src/util/virprocess.c
> +++ b/src/util/virprocess.c
> @@ -799,16 +799,17 @@ virProcessGetLimitFromProc(pid_t pid,
> size_t i;
>
> if (!(label = virProcessLimitResourceToLabel(resource))) {
> + virReportSystemError(EINVAL, "%s", _("Invalid
resource"));
> return -1;
> }
>
> procfile = g_strdup_printf("/proc/%lld/limits", (long long)pid);
>
> if (virFileReadAllQuiet(procfile, 2048, &buf) < 0)
> - return -1;
> + goto error;
>
[...]
>
> + error:
> + virReportSystemError(EIO, "%s", _("Input/output error"));
> + return -1;
> }
> # else /* !defined(__linux__) */
> static int
> @@ -846,6 +851,7 @@ virProcessGetLimitFromProc(pid_t pid G_GNUC_UNUSED,
> int resource G_GNUC_UNUSED,
> struct rlimit *limit G_GNUC_UNUSED)
> {
> + virReportSystemError(ENOSYS, "%s", _("Not supported on this
platform"));
> return -1;
> }
> # endif /* !defined(__linux__) */
This probably makes more sense:
diff --git a/src/util/virprocess.c b/src/util/virprocess.c
index 4fa854090d..b173856b7a 100644
--- a/src/util/virprocess.c
+++ b/src/util/virprocess.c
@@ -799,16 +799,17 @@ virProcessGetLimitFromProc(pid_t pid,
size_t i;
if (!(label = virProcessLimitResourceToLabel(resource))) {
+ errno = EINVAL;
return -1;
}
procfile = g_strdup_printf("/proc/%lld/limits", (long long)pid);
if (virFileReadAllQuiet(procfile, 2048, &buf) < 0)
- return -1;
+ goto error;
virFileReadAllQuiet() sets errno, this would just overwrite it with
something less specific.
if (!(lines = g_strsplit(buf, "\n", 0)))
- return -1;
+ goto error;
I think this check can be dropped. g_strsplit() doesn't ever return NULL
really, does it?
for (i = 0; lines[i]; i++) {
g_autofree char *softLimit = NULL;
@@ -820,25 +821,29 @@ virProcessGetLimitFromProc(pid_t pid,
continue;
if (sscanf(line, "%ms %ms %*s", &softLimit, &hardLimit) <
2)
- return -1;
+ goto error;
if (STREQ(softLimit, "unlimited")) {
limit->rlim_cur = RLIM_INFINITY;
} else {
if (virStrToLong_ull(softLimit, NULL, 10, &tmp) < 0)
- return -1;
+ goto error;
limit->rlim_cur = tmp;
}
if (STREQ(hardLimit, "unlimited")) {
limit->rlim_max = RLIM_INFINITY;
} else {
if (virStrToLong_ull(hardLimit, NULL, 10, &tmp) < 0)
- return -1;
+ goto error;
limit->rlim_max = tmp;
}
}
return 0;
+
+ error:
+ errno = EIO;
+ return -1;
}
# else /* !defined(__linux__) */
static int
@@ -846,6 +851,7 @@ virProcessGetLimitFromProc(pid_t pid G_GNUC_UNUSED,
int resource G_GNUC_UNUSED,
struct rlimit *limit G_GNUC_UNUSED)
{
+ errno = ENOSYS;
return -1;
}
# endif /* !defined(__linux__) */
The rest looks good.
Michal