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; if (!(lines = g_strsplit(buf, "\n", 0))) - return -1; + goto error; 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__) */ -- Andrea Bolognani / Red Hat / Virtualization