Skip to content

Instantly share code, notes, and snippets.

@likema
Created February 22, 2016 06:13
Show Gist options
  • Save likema/f0b5014591c495459d64 to your computer and use it in GitHub Desktop.
Save likema/f0b5014591c495459d64 to your computer and use it in GitHub Desktop.
/* vim: set ts=4 sw=4 sts=4 et: */
#include <blkid.h>
#include <stdio.h>
static void print_udev_format (FILE* fp, const char *name, const char *value)
{
char enc[265], safe[256];
*safe = *enc = 0;
if (!strcmp (name, "TYPE") || !strcmp (name, "VERSION")) {
blkid_encode_string (value, enc, sizeof(enc));
fprintf (fp, "ID_FS_%s=%s\n", name, enc);
} else if (!strcmp (name, "UUID") ||
!strcmp(name, "LABEL") ||
!strcmp(name, "UUID_SUB")) {
blkid_safe_string (value, safe, sizeof(safe));
fprintf (fp, "ID_FS_%s=%s\n", name, safe);
blkid_encode_string (value, enc, sizeof(enc));
fprintf (fp, "ID_FS_%s_ENC=%s\n", name, enc);
} else {
fprintf (fp, "ID_FS_%s=%s\n", name, value);
}
}
static void print_tags (FILE* fp, blkid_dev dev)
{
if (!dev)
return;
const char *name, *value, *devname = blkid_dev_devname (dev);
blkid_tag_iterate i = blkid_tag_iterate_begin (dev);
while (blkid_tag_next (i, &name, &value) == 0) {
print_udev_format (fp, name, value);
}
blkid_tag_iterate_end (i);
}
int blkid_dev_print_udev (FILE* fp, const char* devname)
{
blkid_cache cache = 0;
if (blkid_get_cache(&cache, 0) < 0)
return -1;
int rc = 0;
blkid_dev dev = blkid_get_dev (cache, devname, BLKID_DEV_NORMAL);
if (dev) {
print_tags (fp, dev);
} else {
rc = -1;
}
blkid_put_cache (cache);
return rc;
}
int main (int argc, const char* argv[])
{
if (argc < 2) {
fprintf (stderr, "blkid-udev <device path>\n");
return 1;
}
blkid_dev_print_udev (stdout, argv[1]);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment