summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Vaclav <jvaclav@redhat.com>2023-09-26 11:18:01 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2023-10-03 06:25:18 +0000
commit50f34217f919ed13bed60133cfd7ee9d88abd07e (patch)
tree330e43e90005dd566f4445749803839da6022e7b
parent28f7a6638f751ca1601d767297e9b03b7fdc1f5a (diff)
main: use _nm_utils_ascii_str_to_int64 instead of strtol for reading pid
Also removes the errno check, since it's already done within _nm_utils_ascii_str_to_int64() https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1727
-rw-r--r--src/core/main-utils.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/core/main-utils.c b/src/core/main-utils.c
index 3c210896ee..9360d68878 100644
--- a/src/core/main-utils.c
+++ b/src/core/main-utils.c
@@ -158,7 +158,8 @@ nm_main_utils_ensure_not_running_pidfile(const char *pidfile)
gs_free char *contents = NULL;
gs_free char *proc_cmdline = NULL;
gsize len = 0;
- long pid;
+ pid_t pid;
+ gint64 pid64;
const char *process_name;
const char *prgname = g_get_prgname();
@@ -173,12 +174,13 @@ nm_main_utils_ensure_not_running_pidfile(const char *pidfile)
return;
errno = 0;
- pid = strtol(contents, NULL, 10);
- if (pid <= 0 || errno)
+ pid64 = _nm_utils_ascii_str_to_int64(contents, 10, 0, G_MAXINT64, -1);
+ pid = (pid_t) pid64;
+ if (pid <= 0 || (gint64) pid != pid64)
return;
nm_clear_g_free(&contents);
- proc_cmdline = g_strdup_printf("/proc/%ld/cmdline", pid);
+ proc_cmdline = g_strdup_printf("/proc/%" G_GINT64_FORMAT "/cmdline", (gint64) pid);
if (!g_file_get_contents(proc_cmdline, &contents, &len, NULL))
return;
@@ -190,7 +192,10 @@ nm_main_utils_ensure_not_running_pidfile(const char *pidfile)
if (strcmp(process_name, prgname) == 0) {
/* Check that the process exists */
if (kill(pid, 0) == 0) {
- fprintf(stderr, _("%s is already running (pid %ld)\n"), prgname, pid);
+ fprintf(stderr,
+ _("%s is already running (pid %" G_GINT64_FORMAT ")\n"),
+ prgname,
+ (gint64) pid);
exit(1);
}
}