On Thu, Jul 13, 2023 at 07:10:50PM +0200, Laszlo Ersek wrote: > 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 <ler...@redhat.com> > --- > 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 a6c4266ad3fe..2ee16ea1e75a 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); > extern bool guestfs_int_passt_runnable (guestfs_h *g); > diff --git a/lib/launch.c b/lib/launch.c > index 94c8f676d8bd..a0a8e1c45a51 100644 > --- a/lib/launch.c > +++ b/lib/launch.c > @@ -310,32 +310,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 b8e19de2bf9e..24adf98daee0 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.
This code evolved over at least a decade, hence the sometimes inconsistent function names and placement. Reviewed-by: Richard W.M. Jones <rjo...@redhat.com> Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 100 libraries supported. http://fedoraproject.org/wiki/MinGW _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://listman.redhat.com/mailman/listinfo/libguestfs