*
* 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 <config.h>
#include "daemon.h"
#include "actions.h"
-char *
-do_vfs_type (const char *device)
+static char *
+get_blkid_tag (const char *device, const char *tag)
{
char *out, *err;
int r;
- r = command (&out, &err,
- "/sbin/blkid", "-o", "value", "-s", "TYPE", device, NULL);
- if (r == -1) {
- reply_with_error ("vfs_type: %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;
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')
return out; /* caller frees */
}
+
+char *
+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");
+}