chiark / gitweb /
[PATCH] more udev-016/extras/multipath
[elogind.git] / extras / multipath / devmap_name.c
1 #include "libdevmapper/libdevmapper.h"
2                                                                                 
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <ctype.h>
6 #include <linux/kdev_t.h>
7
8 static void usage(char * progname) {
9         fprintf(stderr, "usage : %s major minor\n", progname);
10         exit(1);
11 }
12
13 int main(int argc, char **argv)
14 {
15         int r = 0;
16         struct dm_names *names;
17         unsigned next = 0;
18         int major, minor;
19                                                                                 
20         /* sanity check */
21         if (argc != 3)
22                 usage(argv[0]);
23
24         major = atoi(argv[1]);
25         minor = atoi(argv[2]);
26
27         struct dm_task *dmt;
28                                                                                 
29         if (!(dmt = dm_task_create(DM_DEVICE_LIST)))
30                 return 0;
31                                                                                 
32         if (!dm_task_run(dmt))
33                 goto out;
34                                                                                 
35         if (!(names = dm_task_get_names(dmt)))
36                 goto out;
37                                                                                 
38         if (!names->dev) {
39                 printf("No devices found\n");
40                 goto out;
41         }
42                                                                                 
43         do {
44                 names = (void *) names + next;
45                 if ((int) MAJOR(names->dev) == major &&
46                     (int) MINOR(names->dev) == minor) {
47                         printf("%s\n", names->name);
48                         goto out;
49                 }
50                 next = names->next;
51         } while (next);
52                                                                                 
53       /* No correspondance found */
54       r = 1;
55
56       out:
57         dm_task_destroy(dmt);
58         return r;
59 }
60