summaryrefslogtreecommitdiff
path: root/0026-lib-move-guestfs_int_create_socketname-from-launch.c.patch
diff options
context:
space:
mode:
Diffstat (limited to '0026-lib-move-guestfs_int_create_socketname-from-launch.c.patch')
-rw-r--r--0026-lib-move-guestfs_int_create_socketname-from-launch.c.patch144
1 files changed, 144 insertions, 0 deletions
diff --git a/0026-lib-move-guestfs_int_create_socketname-from-launch.c.patch b/0026-lib-move-guestfs_int_create_socketname-from-launch.c.patch
new file mode 100644
index 0000000..f5153f7
--- /dev/null
+++ b/0026-lib-move-guestfs_int_create_socketname-from-launch.c.patch
@@ -0,0 +1,144 @@
+From 986f5d8b1110b461d37d044c7a8052ed7ba27f87 Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek@redhat.com>
+Date: Fri, 14 Jul 2023 15:22:11 +0200
+Subject: [PATCH] lib: move guestfs_int_create_socketname() from "launch.c" to
+ "tmpdirs.c"
+
+Consider the following inverted call tree (effectively a dependency tree
+-- callees are at the top and near the left margin):
+
+ lazy_make_tmpdir() [lib/tmpdirs.c]
+ guestfs_int_lazy_make_tmpdir() [lib/tmpdirs.c]
+ guestfs_int_make_temp_path() [lib/tmpdirs.c]
+ guestfs_int_lazy_make_sockdir() [lib/tmpdirs.c]
+ guestfs_int_create_socketname() [lib/launch.c]
+
+lazy_make_tmpdir() is our common workhorse / helper function that
+centralizes the mkdtemp() function call.
+
+guestfs_int_lazy_make_tmpdir() and guestfs_int_lazy_make_sockdir() are the
+next level functions, both calling lazy_make_tmpdir(), just feeding it
+different dirname generator functions, and different "is_runtime_dir"
+qualifications. These functions create temp dirs for various, more
+specific, purposes (see the manual and "lib/guestfs-internal.h" for more
+details).
+
+On a yet higher level are guestfs_int_make_temp_path() and
+guestfs_int_create_socketname() -- they serve for creating *entries* in
+those specific temp directories.
+
+The discrepancy here is that, although all the other functions live in
+"lib/tmpdirs.c", guestfs_int_create_socketname() is defined in
+"lib/launch.c". That makes for a confusing code reading; move the function
+to "lib/tmpdirs.c", just below its sibling function
+guestfs_int_make_temp_path().
+
+While at it, correct the leading comment on
+guestfs_int_create_socketname() -- the socket pathname is created in the
+socket directory, not in the temporary directory.
+
+Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2184967
+Signed-off-by: Laszlo Ersek <lersek@redhat.com>
+Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
+Message-Id: <20230714132213.96616-6-lersek@redhat.com>
+(cherry picked from commit 0b2ad40a098cbaf91d0d0a2df6e31bf8e3e08ace)
+---
+ lib/guestfs-internal.h | 2 +-
+ lib/launch.c | 26 --------------------------
+ lib/tmpdirs.c | 26 ++++++++++++++++++++++++++
+ 3 files changed, 27 insertions(+), 27 deletions(-)
+
+diff --git a/lib/guestfs-internal.h b/lib/guestfs-internal.h
+index c7ef3227..ebd68380 100644
+--- a/lib/guestfs-internal.h
++++ b/lib/guestfs-internal.h
+@@ -668,6 +668,7 @@ extern int guestfs_int_set_env_runtimedir (guestfs_h *g, const char *envname, co
+ extern int guestfs_int_lazy_make_tmpdir (guestfs_h *g);
+ extern int guestfs_int_lazy_make_sockdir (guestfs_h *g);
+ extern char *guestfs_int_make_temp_path (guestfs_h *g, const char *name, const char *extension);
++extern int guestfs_int_create_socketname (guestfs_h *g, const char *filename, char (*sockname)[UNIX_PATH_MAX]);
+ extern char *guestfs_int_lazy_make_supermin_appliance_dir (guestfs_h *g);
+ extern void guestfs_int_remove_tmpdir (guestfs_h *g);
+ extern void guestfs_int_remove_sockdir (guestfs_h *g);
+@@ -700,7 +701,6 @@ extern int guestfs_int_get_uefi (guestfs_h *g, char *const *firmwares, const cha
+ extern int64_t guestfs_int_timeval_diff (const struct timeval *x, const struct timeval *y);
+ extern void guestfs_int_launch_send_progress (guestfs_h *g, int perdozen);
+ extern void guestfs_int_unblock_sigterm (void);
+-extern int guestfs_int_create_socketname (guestfs_h *g, const char *filename, char (*sockname)[UNIX_PATH_MAX]);
+ extern void guestfs_int_register_backend (const char *name, const struct backend_ops *);
+ extern int guestfs_int_set_backend (guestfs_h *g, const char *method);
+
+diff --git a/lib/launch.c b/lib/launch.c
+index 6e08b120..bd0526c9 100644
+--- a/lib/launch.c
++++ b/lib/launch.c
+@@ -309,32 +309,6 @@ guestfs_impl_config (guestfs_h *g,
+ return 0;
+ }
+
+-/**
+- * Create the path for a socket with the selected filename in the
+- * tmpdir.
+- */
+-int
+-guestfs_int_create_socketname (guestfs_h *g, const char *filename,
+- char (*sockpath)[UNIX_PATH_MAX])
+-{
+- int r;
+-
+- if (guestfs_int_lazy_make_sockdir (g) == -1)
+- return -1;
+-
+- r = snprintf (*sockpath, UNIX_PATH_MAX, "%s/%s", g->sockdir, filename);
+- if (r >= UNIX_PATH_MAX) {
+- error (g, _("socket path too long: %s/%s"), g->sockdir, filename);
+- return -1;
+- }
+- if (r < 0) {
+- perrorf (g, _("%s"), g->sockdir);
+- return -1;
+- }
+-
+- return 0;
+-}
+-
+ /**
+ * When the library is loaded, each backend calls this function to
+ * register itself in a global list.
+diff --git a/lib/tmpdirs.c b/lib/tmpdirs.c
+index b8e19de2..24adf98d 100644
+--- a/lib/tmpdirs.c
++++ b/lib/tmpdirs.c
+@@ -253,6 +253,32 @@ guestfs_int_make_temp_path (guestfs_h *g,
+ extension ? extension : "");
+ }
+
++/**
++ * Create the path for a socket with the selected filename in the
++ * sockdir.
++ */
++int
++guestfs_int_create_socketname (guestfs_h *g, const char *filename,
++ char (*sockpath)[UNIX_PATH_MAX])
++{
++ int r;
++
++ if (guestfs_int_lazy_make_sockdir (g) == -1)
++ return -1;
++
++ r = snprintf (*sockpath, UNIX_PATH_MAX, "%s/%s", g->sockdir, filename);
++ if (r >= UNIX_PATH_MAX) {
++ error (g, _("socket path too long: %s/%s"), g->sockdir, filename);
++ return -1;
++ }
++ if (r < 0) {
++ perrorf (g, _("%s"), g->sockdir);
++ return -1;
++ }
++
++ return 0;
++}
++
+ /**
+ * Create the supermin appliance directory under cachedir, if it does
+ * not exist.