1e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 2e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * dev.c - allocation/initialization/free routines for dev 3e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * 4e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * Copyright (C) 2001 Andreas Dilger 550b380b4d4ab668bad45033e3a8aaf93c7f42844Theodore Ts'o * Copyright (C) 2003 Theodore Ts'o 6e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * 7e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * %Begin-Header% 8e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * This file may be redistributed under the terms of the 9e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * GNU Lesser General Public License. 10e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * %End-Header% 11e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o */ 12e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 13e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#include <stdlib.h> 14e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#include <string.h> 15e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 167a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o#include "blkidP.h" 17e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 187a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'oblkid_dev blkid_new_dev(void) 19e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o{ 207a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o blkid_dev dev; 21e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 227a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o if (!(dev = (blkid_dev) calloc(1, sizeof(struct blkid_struct_dev)))) 23e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o return NULL; 24e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 25e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o INIT_LIST_HEAD(&dev->bid_devs); 26e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o INIT_LIST_HEAD(&dev->bid_tags); 27e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 28e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o return dev; 29e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o} 30e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 317a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'ovoid blkid_free_dev(blkid_dev dev) 32e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o{ 33e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o if (!dev) 34e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o return; 35e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 36f0a22d0fd3ec3f45b562af5afba8811f72b94a28Theodore Ts'o DBG(DEBUG_DEV, 37bb47c2a4aff6ec6b9be7f30cd04cf7c858a84de4Theodore Ts'o printf(" freeing dev %s (%s)\n", dev->bid_name, dev->bid_type ? 38bb47c2a4aff6ec6b9be7f30cd04cf7c858a84de4Theodore Ts'o dev->bid_type : "(null)")); 3978c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o DBG(DEBUG_DEV, blkid_debug_dump_dev(dev)); 40e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 41e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o list_del(&dev->bid_devs); 42e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o while (!list_empty(&dev->bid_tags)) { 437a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o blkid_tag tag = list_entry(dev->bid_tags.next, 447a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o struct blkid_struct_tag, 457a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o bit_tags); 46e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o blkid_free_tag(tag); 47e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o } 4845e338f5332a54295893dba2e32cc093d1316f60Jim Meyering free(dev->bid_name); 49e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o free(dev); 50e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o} 51e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 52e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 537a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o * Given a blkid device, return its name 547a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o */ 5598999c399d563c248728bf217467a788cb0c1aadTheodore Ts'oextern const char *blkid_dev_devname(blkid_dev dev) 567a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o{ 577a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o return dev->bid_name; 587a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o} 597a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o 6078c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o#ifdef CONFIG_BLKID_DEBUG 6178c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'ovoid blkid_debug_dump_dev(blkid_dev dev) 6278c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o{ 6378c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o struct list_head *p; 6478c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o 6578c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o if (!dev) { 6678c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o printf(" dev: NULL\n"); 6778c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o return; 6878c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o } 6978c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o 7078c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o printf(" dev: name = %s\n", dev->bid_name); 7112a829dcdc57fb8ddc4887b07b40136288b6e7feMatthias Andree printf(" dev: DEVNO=\"0x%0llx\"\n", (long long)dev->bid_devno); 7212a829dcdc57fb8ddc4887b07b40136288b6e7feMatthias Andree printf(" dev: TIME=\"%ld\"\n", (long)dev->bid_time); 7378c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o printf(" dev: PRI=\"%d\"\n", dev->bid_pri); 7478c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o printf(" dev: flags = 0x%08X\n", dev->bid_flags); 7578c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o 7678c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o list_for_each(p, &dev->bid_tags) { 7778c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o blkid_tag tag = list_entry(p, struct blkid_struct_tag, bit_tags); 7855080a7637172402c51eb4f2fb2b81870c04de3dTheodore Ts'o if (tag) 79efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o printf(" tag: %s=\"%s\"\n", tag->bit_name, 8055080a7637172402c51eb4f2fb2b81870c04de3dTheodore Ts'o tag->bit_val); 8155080a7637172402c51eb4f2fb2b81870c04de3dTheodore Ts'o else 8255080a7637172402c51eb4f2fb2b81870c04de3dTheodore Ts'o printf(" tag: NULL\n"); 8378c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o } 8478c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o printf("\n"); 8578c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o} 8678c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o#endif 8778c7d0efae91cde1a992f69c1a0157b39e971670Theodore Ts'o 887a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o/* 897a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o * dev iteration routines for the public libblkid interface. 907a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o * 917a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o * These routines do not expose the list.h implementation, which are a 927a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o * contamination of the namespace, and which force us to reveal far, far 937a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o * too much of our internal implemenation. I'm not convinced I want 947a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o * to keep list.h in the long term, anyway. It's fine for kernel 957a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o * programming, but performance is not the #1 priority for this 967a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o * library, and I really don't like the tradeoff of type-safety for 977a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o * performance for this application. [tytso:20030125.2007EST] 987a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o */ 997a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o 1007a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o/* 1017a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o * This series of functions iterate over all devices in a blkid cache 1027a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o */ 1037a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o#define DEV_ITERATE_MAGIC 0x01a5284c 104efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 1057a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'ostruct blkid_struct_dev_iterate { 1067a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o int magic; 1077a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o blkid_cache cache; 108c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o char *search_type; 109c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o char *search_value; 1107a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o struct list_head *p; 1117a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o}; 1127a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o 1137a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'oextern blkid_dev_iterate blkid_dev_iterate_begin(blkid_cache cache) 1147a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o{ 1157a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o blkid_dev_iterate iter; 1167a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o 1177a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o iter = malloc(sizeof(struct blkid_struct_dev_iterate)); 1187a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o if (iter) { 1197a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o iter->magic = DEV_ITERATE_MAGIC; 1207a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o iter->cache = cache; 1217a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o iter->p = cache->bic_devs.next; 122c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o iter->search_type = 0; 123c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o iter->search_value = 0; 1247a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o } 1257a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o return (iter); 1267a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o} 1277a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o 128c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'oextern int blkid_dev_set_search(blkid_dev_iterate iter, 129c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o char *search_type, char *search_value) 130c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o{ 131c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o char *new_type, *new_value; 132c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o 133efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o if (!iter || iter->magic != DEV_ITERATE_MAGIC || !search_type || 134c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o !search_value) 135c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o return -1; 136c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o new_type = malloc(strlen(search_type)+1); 137c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o new_value = malloc(strlen(search_value)+1); 138c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o if (!new_type || !new_value) { 13945e338f5332a54295893dba2e32cc093d1316f60Jim Meyering free(new_type); 14045e338f5332a54295893dba2e32cc093d1316f60Jim Meyering free(new_value); 141c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o return -1; 142c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o } 143c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o strcpy(new_type, search_type); 144c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o strcpy(new_value, search_value); 14545e338f5332a54295893dba2e32cc093d1316f60Jim Meyering free(iter->search_type); 14645e338f5332a54295893dba2e32cc093d1316f60Jim Meyering free(iter->search_value); 147c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o iter->search_type = new_type; 148c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o iter->search_value = new_value; 149c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o return 0; 150c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o} 151c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o 1527a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o/* 1537a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o * Return 0 on success, -1 on error 1547a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o */ 1557a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'oextern int blkid_dev_next(blkid_dev_iterate iter, 156c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o blkid_dev *ret_dev) 1577a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o{ 158c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o blkid_dev dev; 159c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o 160c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o *ret_dev = 0; 161c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o if (!iter || iter->magic != DEV_ITERATE_MAGIC) 1627a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o return -1; 163c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o while (iter->p != &iter->cache->bic_devs) { 164c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o dev = list_entry(iter->p, struct blkid_struct_dev, bid_devs); 165c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o iter->p = iter->p->next; 166efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o if (iter->search_type && 167efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o !blkid_dev_has_tag(dev, iter->search_type, 168c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o iter->search_value)) 169c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o continue; 170c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o *ret_dev = dev; 171c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o return 0; 172c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o } 173c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o return -1; 1747a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o} 1757a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o 1767a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'oextern void blkid_dev_iterate_end(blkid_dev_iterate iter) 1777a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o{ 1787a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o if (!iter || iter->magic != DEV_ITERATE_MAGIC) 1797a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o return; 1807a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o iter->magic = 0; 1817a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o free(iter); 1827a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o} 1837a603aa89fcffb8798eca34ca3858db6f0393046Theodore Ts'o 184c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o#ifdef TEST_PROGRAM 185c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o#ifdef HAVE_GETOPT_H 186c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o#include <getopt.h> 187c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o#else 188c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'oextern char *optarg; 189c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'oextern int optind; 190c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o#endif 191c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o 192c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'ovoid usage(char *prog) 193c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o{ 194c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o fprintf(stderr, "Usage: %s [-f blkid_file] [-m debug_mask]\n", prog); 19512a829dcdc57fb8ddc4887b07b40136288b6e7feMatthias Andree fprintf(stderr, "\tList all devices and exit\n"); 196c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o exit(1); 197c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o} 198c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o 199c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'oint main(int argc, char **argv) 200c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o{ 201c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o blkid_dev_iterate iter; 202c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o blkid_cache cache = NULL; 203c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o blkid_dev dev; 204c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o int c, ret; 205c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o char *tmp; 206c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o char *file = NULL; 207c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o char *search_type = NULL; 208c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o char *search_value = NULL; 209c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o 210c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o while ((c = getopt (argc, argv, "m:f:")) != EOF) 211c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o switch (c) { 212c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o case 'f': 213c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o file = optarg; 214c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o break; 215c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o case 'm': 216c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o blkid_debug_mask = strtoul (optarg, &tmp, 0); 217c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o if (*tmp) { 218efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o fprintf(stderr, "Invalid debug mask: %s\n", 219c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o optarg); 220c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o exit(1); 221c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o } 222c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o break; 223c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o case '?': 224c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o usage(argv[0]); 225c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o } 226c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o if (argc >= optind+2) { 227c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o search_type = argv[optind]; 228c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o search_value = argv[optind+1]; 229c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o optind += 2; 230c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o } 231c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o if (argc != optind) 232c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o usage(argv[0]); 233c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o 234c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o if ((ret = blkid_get_cache(&cache, file)) != 0) { 235c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o fprintf(stderr, "%s: error creating cache (%d)\n", 236c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o argv[0], ret); 237c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o exit(1); 238c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o } 239c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o 240c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o iter = blkid_dev_iterate_begin(cache); 241c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o if (search_type) 242c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o blkid_dev_set_search(iter, search_type, search_value); 243c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o while (blkid_dev_next(iter, &dev) == 0) { 244c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o printf("Device: %s\n", blkid_dev_devname(dev)); 245c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o } 246c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o blkid_dev_iterate_end(iter); 247c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o 248c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o 249c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o blkid_put_cache(cache); 250c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o return (0); 251c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o} 252c37543df2f58f454c29fece5997bd0e9d6ee7533Theodore Ts'o#endif 253