1 /* libguestfs - the guestfsd daemon
2 * Copyright (C) 2010 Red Hat Inc.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
30 findfs (const char *tag, const char *label_or_uuid)
32 /* Kill the cache file, forcing blkid to reread values from the
33 * original filesystems. In blkid there is a '-p' option which is
34 * supposed to do this, but (a) it doesn't work and (b) that option
35 * is not supported in RHEL 5.
37 unlink ("/etc/blkid/blkid.tab");
39 size_t len = strlen (tag) + strlen (label_or_uuid) + 2;
41 snprintf (arg, len, "%s=%s", tag, label_or_uuid);
44 int r = command (&out, &err, "findfs", arg, NULL);
46 reply_with_error ("%s", err);
54 /* Trim trailing \n if present. */
56 if (len > 0 && out[len-1] == '\n')
59 if (STRPREFIX (out, "/dev/mapper/") || STRPREFIX (out, "/dev/dm-")) {
61 r = lv_canonical (out, &canonical);
70 /* Ignore the case where r == 0. /dev/mapper does not correspond
71 * to an LV, so the best we can do is just return it as-is.
75 return out; /* caller frees */
79 do_findfs_uuid (const char *uuid)
81 return findfs ("UUID", uuid);
85 do_findfs_label (const char *label)
87 return findfs ("LABEL", label);