X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;ds=inline;f=daemon%2Fblkid.c;h=6d395c1b15ea28ad318b9725baaa673865592842;hb=e1f395defc6db5bbc82537af6e517d94216b7d4b;hp=1ddc8cdf353553853648392b8b5b17ea496c9bb9;hpb=85c71f8fff3e80f549342bf995b686ba7303c2b4;p=libguestfs.git diff --git a/daemon/blkid.c b/daemon/blkid.c index 1ddc8cd..6d395c1 100644 --- a/daemon/blkid.c +++ b/daemon/blkid.c @@ -13,7 +13,7 @@ * * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include @@ -33,10 +33,16 @@ get_blkid_tag (const char *device, const char *tag) char *out, *err; int r; - r = command (&out, &err, - "blkid", "-o", "value", "-s", tag, device, NULL); - if (r == -1) { - reply_with_error ("%s: %s", device, err); + r = commandr (&out, &err, + "blkid", + /* Adding -c option kills all caching, even on RHEL 5. */ + "-c", "/dev/null", + "-o", "value", "-s", tag, device, NULL); + if (r != 0 && r != 2) { + if (r >= 0) + reply_with_error ("%s: %s (blkid returned %d)", device, err, r); + else + reply_with_error ("%s: %s", device, err); free (out); free (err); return NULL; @@ -44,6 +50,14 @@ get_blkid_tag (const char *device, const char *tag) free (err); + if (r == 2) { /* means UUID etc not found */ + free (out); + out = strdup (""); + if (out == NULL) + reply_with_perror ("strdup"); + return out; + } + /* Trim trailing \n if present. */ size_t len = strlen (out); if (len > 0 && out[len-1] == '\n') @@ -57,3 +71,15 @@ do_vfs_type (const char *device) { return get_blkid_tag (device, "TYPE"); } + +char * +do_vfs_label (const char *device) +{ + return get_blkid_tag (device, "LABEL"); +} + +char * +do_vfs_uuid (const char *device) +{ + return get_blkid_tag (device, "UUID"); +}