From: "K. Y. Srinivasan" <kys@microsoft.com>
To: gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
devel@linuxdriverproject.org, olaf@aepfle.de, apw@canonical.com,
jasowang@redhat.com
Cc: "K. Y. Srinivasan" <kys@microsoft.com>
Subject: [PATCH 3/5] tools: hv: use getmntent in hv_vss_daemon
Date: Tue, 23 Apr 2013 14:23:59 -0700 [thread overview]
Message-ID: <1366752241-357-3-git-send-email-kys@microsoft.com> (raw)
In-Reply-To: <1366752241-357-1-git-send-email-kys@microsoft.com>
From: Olaf Hering <olaf@aepfle.de>
As suggested by Paolo Bonzini, use getmntent instead of parsing output
of mount(1).
Signed-off-by: Olaf Hering <olaf@aepfle.de>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
---
tools/hv/hv_vss_daemon.c | 39 +++++++++++++++++++++------------------
1 files changed, 21 insertions(+), 18 deletions(-)
diff --git a/tools/hv/hv_vss_daemon.c b/tools/hv/hv_vss_daemon.c
index dc3eb1e..e37d86c 100644
--- a/tools/hv/hv_vss_daemon.c
+++ b/tools/hv/hv_vss_daemon.c
@@ -23,6 +23,7 @@
#include <sys/poll.h>
#include <linux/types.h>
#include <stdio.h>
+#include <mntent.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
@@ -47,11 +48,10 @@ static int vss_operate(int operation)
{
char *fs_op;
char cmd[512];
- char buf[512];
- FILE *file;
- char *p;
- char *x;
- int error = 0;
+ char match[] = "/dev/";
+ FILE *mounts;
+ struct mntent *ent;
+ int error = 0, root_seen = 0;
switch (operation) {
case VSS_OP_FREEZE:
@@ -64,25 +64,28 @@ static int vss_operate(int operation)
return -1;
}
- file = popen("mount | awk '/^\\/dev\\// { print $3}'", "r");
- if (file == NULL)
+ mounts = setmntent("/proc/mounts", "r");
+ if (mounts == NULL)
return -1;
- while ((p = fgets(buf, sizeof(buf), file)) != NULL) {
- x = strchr(p, '\n');
- *x = '\0';
- if (!strncmp(p, "/", sizeof("/")))
+ while((ent = getmntent(mounts))) {
+ if (strncmp(ent->mnt_fsname, match, strlen(match)))
continue;
-
- sprintf(cmd, "%s %s %s", "fsfreeze ", fs_op, p);
+ if (strcmp(ent->mnt_dir, "/") == 0) {
+ root_seen = 1;
+ continue;
+ }
+ snprintf(cmd, sizeof(cmd), "fsfreeze %s '%s'", fs_op, ent->mnt_dir);
syslog(LOG_INFO, "VSS cmd is %s\n", cmd);
- error = system(cmd);
+ error |= system(cmd);
}
- pclose(file);
+ endmntent(mounts);
- sprintf(cmd, "%s %s %s", "fsfreeze ", fs_op, "/");
- syslog(LOG_INFO, "VSS cmd is %s\n", cmd);
- error = system(cmd);
+ if (root_seen) {
+ sprintf(cmd, "fsfreeze %s /", fs_op);
+ syslog(LOG_INFO, "VSS cmd is %s\n", cmd);
+ error |= system(cmd);
+ }
return error;
}
--
1.7.4.1
next prev parent reply other threads:[~2013-04-23 20:51 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-23 21:23 [PATCH 0/5] Tools: hv: snapshot K. Y. Srinivasan
2013-04-23 21:23 ` [PATCH 1/5] Tools: hv: fix warnings in hv_vss_daemon K. Y. Srinivasan
2013-04-23 21:23 ` [PATCH 2/5] tools: hv: fix checks for origin of netlink message " K. Y. Srinivasan
2013-04-23 21:23 ` K. Y. Srinivasan [this message]
2013-04-23 21:24 ` [PATCH 4/5] tools: hv: use FIFREEZE/FITHAW " K. Y. Srinivasan
2013-04-23 21:24 ` [PATCH 5/5] [PATCH 2/2] tools: hv: skip iso9660 mounts " K. Y. Srinivasan
2013-04-23 21:09 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1366752241-357-3-git-send-email-kys@microsoft.com \
--to=kys@microsoft.com \
--cc=apw@canonical.com \
--cc=devel@linuxdriverproject.org \
--cc=gregkh@linuxfoundation.org \
--cc=jasowang@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=olaf@aepfle.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.