commit 5fb2a92b7dde17307bc89ff9df598de475bbe77d Author: Frank Wall Date: Wed Nov 24 17:15:01 2021 +0100 emulators/qemu-guest-agent: update to fix zombie processes diff --git a/emulators/qemu-guest-agent/Makefile b/emulators/qemu-guest-agent/Makefile index 21b02023f317..5466e82bb7f7 100644 --- a/emulators/qemu-guest-agent/Makefile +++ b/emulators/qemu-guest-agent/Makefile @@ -2,6 +2,7 @@ PORTNAME= qemu DISTVERSION= 5.0.1 +PORTREVISION= 1 CATEGORIES= emulators MASTER_SITES= https://download.qemu.org/ PKGNAMESUFFIX= -guest-agent diff --git a/emulators/qemu-guest-agent/files/patch-qga_commands-posix.c b/emulators/qemu-guest-agent/files/patch-qga_commands-posix.c index 11dce8e5b8fc..58711c1a1a25 100644 --- a/emulators/qemu-guest-agent/files/patch-qga_commands-posix.c +++ b/emulators/qemu-guest-agent/files/patch-qga_commands-posix.c @@ -528,40 +528,35 @@ +{ + FsMount *mount; + char const *dfcmd = "/bin/df -hT"; -+ //char buf[BUFSIZE]; + + FILE *fp; + char *line = NULL; -+ //, *dash; + size_t n; + int ret; -+ //, dir_s, dir_e, type_s, type_e, dev_s, dev_e; -+ char dev_name[30], fstype[10], size[10], used[10], free[10], load[10], mounted[30]; -+ //int dev_name, fstype, size, used, free, load, mounted; ++ int status; ++ char dev_name[30], fstype[10], size[10], used[10], frees[10], load[10], mounted[30]; + + if ((fp = popen(dfcmd, "r")) == NULL) { -+ g_debug("Cannot open '%s'!!\n", dfcmd); ++ g_debug("Cannot open '%s'!!\n", dfcmd); + return; + } -+ while (getline(&line, &n, fp) != -1) { -+ //g_debug("line '%s'", line); -+ ret = sscanf(line, "%s%s%s%s%s%s%s", -+ dev_name, fstype, size, used, free, load, mounted); -+ if (g_str_equal(dev_name, "Filesystem") -+ ||g_str_equal(fstype,"devfs") -+ ||g_str_equal(fstype,"procfs") -+ ||g_str_equal(fstype,"fdescfs")) { -+ continue; -+ } -+ //g_debug("ret '%d'", ret); -+ -+ if (ret < 7) { ++ while (getline(&line, &n, fp) != -1) { ++ ret = sscanf(line, "%s%s%s%s%s%s%s", ++ dev_name, fstype, size, used, frees, load, mounted); ++ if (g_str_equal(dev_name, "Filesystem") ++ ||g_str_equal(fstype,"devfs") ++ ||g_str_equal(fstype,"procfs") ++ ||g_str_equal(fstype,"fdescfs")) { ++ continue; ++ } ++ ++ if (ret < 7) { + continue; + } + mount = g_new0(FsMount, 1); + mount->dirname = g_strdup(dev_name); + mount->devtype = g_strdup(fstype); -+ mount->free = g_strdup(free); ++ mount->free = g_strdup(frees); + mount->load = g_strdup(load); + mount->size = g_strdup(size); + mount->used = g_strdup(used); @@ -571,9 +566,14 @@ + + QTAILQ_INSERT_TAIL(mounts, mount, next); + } -+ //free(line); ++ free(line); ++ ++ status = pclose(fp); ++ if (status == -1) { ++ g_debug("Cannot close '%s'!!\n", dfcmd); ++ return; ++ } + -+ fclose(fp); +} + +/* ======================================================= */