[Libguestfs] [PATCH 2/3] daemon: Move device_name_translation function to its own file.

Richard W.M. Jones rjones at redhat.com
Thu May 4 08:13:54 UTC 2017


Just code motion.
---
 daemon/Makefile.am               |  1 +
 daemon/daemon.h                  |  5 ++-
 daemon/device-name-translation.c | 95 ++++++++++++++++++++++++++++++++++++++++
 daemon/guestfsd.c                | 64 ---------------------------
 4 files changed, 99 insertions(+), 66 deletions(-)
 create mode 100644 daemon/device-name-translation.c

diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 68f863bcd..0d3dde516 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -74,6 +74,7 @@ guestfsd_SOURCES = \
 	dd.c \
 	debug.c \
 	debug-bmap.c \
+	device-name-translation.c \
 	devsparts.c \
 	df.c \
 	dir.c \
diff --git a/daemon/daemon.h b/daemon/daemon.h
index 75af5246e..3a7f6795e 100644
--- a/daemon/daemon.h
+++ b/daemon/daemon.h
@@ -136,8 +136,6 @@ extern int is_power_of_2 (unsigned long v);
 
 extern void trim (char *str);
 
-extern char *device_name_translation (const char *device);
-
 extern int parse_btrfsvol (const char *desc, mountable_t *mountable);
 
 extern int prog_exists (const char *prog);
@@ -167,6 +165,9 @@ extern uint64_t optargs_bitmask;
 extern int is_root_mounted (void);
 extern int is_device_mounted (const char *device);
 
+/*-- in device-name-translation.c --*/
+extern char *device_name_translation (const char *device);
+
 /*-- in stubs.c (auto-generated) --*/
 extern void dispatch_incoming_message (XDR *);
 extern guestfs_int_lvm_pv_list *parse_command_line_pvs (void);
diff --git a/daemon/device-name-translation.c b/daemon/device-name-translation.c
new file mode 100644
index 000000000..0c4387f54
--- /dev/null
+++ b/daemon/device-name-translation.c
@@ -0,0 +1,95 @@
+/* libguestfs - the guestfsd daemon
+ * Copyright (C) 2009-2017 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <limits.h>
+#include <sys/stat.h>
+
+#include "daemon.h"
+
+/**
+ * Perform device name translation.
+ *
+ * It returns a newly allocated string which the caller must free.
+ *
+ * It returns C<NULL> on error.  B<Note> it does I<not> call
+ * C<reply_with_*>.
+ *
+ * We have to open the device and test for C<ENXIO>, because the
+ * device nodes may exist in the appliance.
+ */
+char *
+device_name_translation (const char *device)
+{
+  int fd;
+  char *ret;
+
+  fd = open (device, O_RDONLY|O_CLOEXEC);
+  if (fd >= 0) {
+    close (fd);
+    return strdup (device);
+  }
+
+  if (errno != ENXIO && errno != ENOENT)
+    return NULL;
+
+  /* If the name begins with "/dev/sd" then try the alternatives. */
+  if (!STRPREFIX (device, "/dev/sd"))
+    return NULL;
+  device += 7;                  /* device == "a1" etc. */
+
+  /* /dev/vd (virtio-blk) */
+  if (asprintf (&ret, "/dev/vd%s", device) == -1)
+    return NULL;
+  fd = open (ret, O_RDONLY|O_CLOEXEC);
+  if (fd >= 0) {
+    close (fd);
+    return ret;
+  }
+  free (ret);
+
+  /* /dev/hd (old IDE driver) */
+  if (asprintf (&ret, "/dev/hd%s", device) == -1)
+    return NULL;
+  fd = open (ret, O_RDONLY|O_CLOEXEC);
+  if (fd >= 0) {
+    close (fd);
+    return ret;
+  }
+  free (ret);
+
+  /* User-Mode Linux */
+  if (asprintf (&ret, "/dev/ubd%s", device) == -1)
+    return NULL;
+  fd = open (ret, O_RDONLY|O_CLOEXEC);
+  if (fd >= 0) {
+    close (fd);
+    return ret;
+  }
+  free (ret);
+
+  return NULL;
+}
diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c
index 8e9fa9d63..db2bb702f 100644
--- a/daemon/guestfsd.c
+++ b/daemon/guestfsd.c
@@ -948,70 +948,6 @@ print_arginfo (const struct printf_info *info, size_t n, int *argtypes)
 #endif
 
 /**
- * Perform device name translation.
- *
- * It returns a newly allocated string which the caller must free.
- *
- * It returns C<NULL> on error.  B<Note> it does I<not> call
- * C<reply_with_*>.
- *
- * We have to open the device and test for C<ENXIO>, because the
- * device nodes may exist in the appliance.
- */
-char *
-device_name_translation (const char *device)
-{
-  int fd;
-  char *ret;
-
-  fd = open (device, O_RDONLY|O_CLOEXEC);
-  if (fd >= 0) {
-    close (fd);
-    return strdup (device);
-  }
-
-  if (errno != ENXIO && errno != ENOENT)
-    return NULL;
-
-  /* If the name begins with "/dev/sd" then try the alternatives. */
-  if (!STRPREFIX (device, "/dev/sd"))
-    return NULL;
-  device += 7;                  /* device == "a1" etc. */
-
-  /* /dev/vd (virtio-blk) */
-  if (asprintf (&ret, "/dev/vd%s", device) == -1)
-    return NULL;
-  fd = open (ret, O_RDONLY|O_CLOEXEC);
-  if (fd >= 0) {
-    close (fd);
-    return ret;
-  }
-  free (ret);
-
-  /* /dev/hd (old IDE driver) */
-  if (asprintf (&ret, "/dev/hd%s", device) == -1)
-    return NULL;
-  fd = open (ret, O_RDONLY|O_CLOEXEC);
-  if (fd >= 0) {
-    close (fd);
-    return ret;
-  }
-  free (ret);
-
-  /* User-Mode Linux */
-  if (asprintf (&ret, "/dev/ubd%s", device) == -1)
-    return NULL;
-  fd = open (ret, O_RDONLY|O_CLOEXEC);
-  if (fd >= 0) {
-    close (fd);
-    return ret;
-  }
-  free (ret);
-
-  return NULL;
-}
-
-/**
  * Parse the mountable descriptor for a btrfs subvolume.  Don't call
  * this directly; it is only used from the stubs.
  *
-- 
2.12.0




More information about the Libguestfs mailing list