mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-22 07:03:38 +00:00
api: add mountable_device and mountable_subvolume
These two functions allow the user to split the mountable strings into a device and a subvolume if any. See this thread on the mailing list for the rationale: https://www.redhat.com/archives/libguestfs/2016-February/msg00247.html
This commit is contained in:
committed by
Pino Toscano
parent
43dd545e46
commit
f5a9cdff2a
@@ -1289,6 +1289,32 @@ for a filesystem to be shared between operating systems.
|
||||
Please read L<guestfs(3)/INSPECTION> for more details.
|
||||
See also C<guestfs_inspect_get_mountpoints>." };
|
||||
|
||||
{ defaults with
|
||||
name = "mountable_device"; added = (1, 33, 15);
|
||||
style = RString "device", [Mountable "mountable"], [];
|
||||
shortdesc = "extract the device part of a mountable";
|
||||
longdesc = "\
|
||||
Returns the device name of a mountable. In quite a lot of
|
||||
cases, the mountable is the device name.
|
||||
|
||||
However this doesn't apply for btrfs subvolumes, where the
|
||||
mountable is a combination of both the device name and the
|
||||
subvolume path (see also C<guestfs_mountable_subvolume> to
|
||||
extract the subvolume path of the mountable if any)." };
|
||||
|
||||
{ defaults with
|
||||
name = "mountable_subvolume"; added = (1, 33, 15);
|
||||
style = RString "subvolume", [Mountable "mountable"], [];
|
||||
shortdesc = "extract the subvolume part of a mountable";
|
||||
longdesc = "\
|
||||
Returns the subvolume path of a mountable. Btrfs subvolumes
|
||||
mountables are a combination of both the device name and the
|
||||
subvolume path (see also C<guestfs_mountable_device> to extract
|
||||
the device of the mountable).
|
||||
|
||||
If the mountable does not represent a btrfs subvolume, then
|
||||
this function fails and the C<errno> is set to C<EINVAL>." };
|
||||
|
||||
{ defaults with
|
||||
name = "set_network"; added = (1, 5, 4);
|
||||
style = RErr, [Bool "network"], [];
|
||||
|
||||
@@ -346,6 +346,7 @@ src/libvirt-is-version.c
|
||||
src/listfs.c
|
||||
src/lpj.c
|
||||
src/match.c
|
||||
src/mountable.c
|
||||
src/osinfo.c
|
||||
src/private-data.c
|
||||
src/proto.c
|
||||
|
||||
@@ -121,6 +121,7 @@ libguestfs_la_SOURCES = \
|
||||
listfs.c \
|
||||
lpj.c \
|
||||
match.c \
|
||||
mountable.c \
|
||||
osinfo.c \
|
||||
private-data.c \
|
||||
proto.c \
|
||||
|
||||
52
src/mountable.c
Normal file
52
src/mountable.c
Normal file
@@ -0,0 +1,52 @@
|
||||
/* libguestfs
|
||||
* Copyright (C) 2016 SUSE LLC
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "guestfs.h"
|
||||
#include "guestfs-internal.h"
|
||||
#include "guestfs-internal-actions.h"
|
||||
|
||||
|
||||
char *
|
||||
guestfs_impl_mountable_device (guestfs_h *g, const char *mountable)
|
||||
{
|
||||
CLEANUP_FREE_INTERNAL_MOUNTABLE struct guestfs_internal_mountable *mnt = NULL;
|
||||
|
||||
mnt = guestfs_internal_parse_mountable (g, mountable);
|
||||
if (mnt == NULL)
|
||||
return NULL;
|
||||
|
||||
return safe_strdup (g, mnt->im_device);
|
||||
}
|
||||
|
||||
char *
|
||||
guestfs_impl_mountable_subvolume (guestfs_h *g, const char *mountable)
|
||||
{
|
||||
CLEANUP_FREE_INTERNAL_MOUNTABLE struct guestfs_internal_mountable *mnt = NULL;
|
||||
|
||||
mnt = guestfs_internal_parse_mountable (g, mountable);
|
||||
if (mnt == NULL || STREQ (mnt->im_volume, "")) {
|
||||
guestfs_int_error_errno (g, EINVAL, "not a btrfs subvolume identifier");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return safe_strdup (g, mnt->im_volume);
|
||||
}
|
||||
Reference in New Issue
Block a user