|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 1/2] tools/helpers: Introduce cmp-fd-file-inode utility
This is a C implementation of the perl code inside of locking.sh to
check that the locked file descriptor and lock file share the same inode
and therefore match. One change from the perl version is replacing
printing "y" on success with exit values of 0 (shell True) and 1 (shell
False).
Requiring perl is a large dependency for the single use, so a dedicated
utility removes that dependency for systems that otherwise would not
install perl.
Signed-off-by: Jason Andryuk <jandryuk@xxxxxxxxx>
---
.gitignore | 1 +
tools/helpers/Makefile | 3 +++
tools/helpers/cmp-fd-file-inode.c | 43 +++++++++++++++++++++++++++++++
3 files changed, 47 insertions(+)
create mode 100644 tools/helpers/cmp-fd-file-inode.c
diff --git a/.gitignore b/.gitignore
index 4ca679ddbc..897f878eef 100644
--- a/.gitignore
+++ b/.gitignore
@@ -164,6 +164,7 @@ tools/fuzz/x86_instruction_emulator/x86-emulate.[ch]
tools/helpers/_paths.h
tools/helpers/init-xenstore-domain
tools/helpers/xen-init-dom0
+tools/helpers/cmp-fd-file-inode
tools/hotplug/common/hotplugpath.sh
tools/hotplug/FreeBSD/rc.d/xencommons
tools/hotplug/FreeBSD/rc.d/xendriverdomain
diff --git a/tools/helpers/Makefile b/tools/helpers/Makefile
index f759528322..7daf5c46ca 100644
--- a/tools/helpers/Makefile
+++ b/tools/helpers/Makefile
@@ -8,6 +8,7 @@ include $(XEN_ROOT)/tools/Rules.mk
PROGS += xen-init-dom0
ifeq ($(CONFIG_Linux),y)
PROGS += init-xenstore-domain
+PROGS += cmp-fd-file-inode
endif
XEN_INIT_DOM0_OBJS = xen-init-dom0.o init-dom-json.o
@@ -40,12 +41,14 @@ install: all
$(INSTALL_PROG) xen-init-dom0 $(DESTDIR)$(LIBEXEC_BIN)
ifeq ($(CONFIG_Linux),y)
$(INSTALL_PROG) init-xenstore-domain $(DESTDIR)$(LIBEXEC_BIN)
+ $(INSTALL_PROG) cmp-fd-file-inode $(DESTDIR)$(LIBEXEC_BIN)
endif
.PHONY: uninstall
uninstall:
ifeq ($(CONFIG_Linux),y)
rm -f $(DESTDIR)$(LIBEXEC_BIN)/init-xenstore-domain
+ rm -f $(DESTDIR)$(LIBEXEC_BIN)/cmp-fd-file-inode
endif
rm -f $(DESTDIR)$(LIBEXEC_BIN)/xen-init-dom0
diff --git a/tools/helpers/cmp-fd-file-inode.c
b/tools/helpers/cmp-fd-file-inode.c
new file mode 100644
index 0000000000..886ea888ed
--- /dev/null
+++ b/tools/helpers/cmp-fd-file-inode.c
@@ -0,0 +1,43 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+void usage(const char * prog)
+{
+ fprintf(stderr,
+"%s <fd> <filename>\n"
+"Checks that the open file descriptor (referenced by number) has the same\n"
+"inode as the filename.\n"
+"Returns 0 on match and 1 on non-match\n", prog);
+}
+
+int main(int argc, char *argv[])
+{
+ struct stat fd_statbuf, file_statbuf;
+ int ret;
+ int fd;
+
+ if (argc < 3) {
+ usage(argv[0]);
+ return 1;
+ }
+
+ fd = strtoul(argv[1], NULL, 0);
+
+ ret = fstat(fd, &fd_statbuf);
+ if (ret) {
+ return 1;
+ }
+
+ ret = stat(argv[2], &file_statbuf);
+ if (ret) {
+ return 1;
+ }
+
+ if (fd_statbuf.st_ino == file_statbuf.st_ino)
+ return 0;
+ else
+ return 1;
+}
--
2.24.1
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |