]> git.ipfire.org Git - thirdparty/util-linux.git/blob - misc-utils/findfs.c
a437bda84a691c7e7201bbf800f3b93590e0d55a
[thirdparty/util-linux.git] / misc-utils / findfs.c
1 /*
2 * Copyright (C) 2009 Karel Zak <kzak@redhat.com>
3 *
4 * This file may be redistributed under the terms of the GNU Public
5 * License.
6 */
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include <errno.h>
11 #include <getopt.h>
12
13 #include <blkid.h>
14
15 #include "nls.h"
16 #include "closestream.h"
17 #include "c.h"
18
19 /* Exit codes used by findfs. */
20 #define FINDFS_SUCCESS 0 /* no errors */
21 #define FINDFS_NOT_FOUND 1 /* label or uuid cannot be found */
22 #define FINDFS_USAGE_ERROR 2 /* user did something unexpected */
23
24 static void __attribute__((__noreturn__)) usage(void)
25 {
26 FILE *out = stdout;
27 fputs(USAGE_HEADER, out);
28 fprintf(out, _(" %s [options] {LABEL,UUID,PARTUUID,PARTLABEL}=<value>\n"),
29 program_invocation_short_name);
30
31 fputs(USAGE_SEPARATOR, out);
32 fputs(_("Find a filesystem by label or UUID.\n"), out);
33
34 fputs(USAGE_OPTIONS, out);
35 printf(USAGE_HELP_OPTIONS(16));
36 printf(USAGE_MAN_TAIL("findfs(8)"));
37 exit(FINDFS_SUCCESS);
38 }
39
40 int main(int argc, char **argv)
41 {
42 char *dev;
43 int c;
44 static const struct option longopts[] = {
45 {"version", no_argument, NULL, 'V'},
46 {"help", no_argument, NULL, 'h'},
47 {NULL, 0, NULL, 0}
48 };
49
50 setlocale(LC_ALL, "");
51 bindtextdomain(PACKAGE, LOCALEDIR);
52 textdomain(PACKAGE);
53 atexit(close_stdout);
54
55 if (argc != 2) {
56 /* we return '2' for backward compatibility
57 * with version from e2fsprogs */
58 warnx(_("bad usage"));
59 errtryhelp(FINDFS_USAGE_ERROR);
60 }
61
62 while ((c = getopt_long(argc, argv, "Vh", longopts, NULL)) != -1)
63 switch (c) {
64 case 'V':
65 printf(UTIL_LINUX_VERSION);
66 return FINDFS_SUCCESS;
67 case 'h':
68 usage();
69 default:
70 errtryhelp(FINDFS_USAGE_ERROR);
71 }
72
73 dev = blkid_evaluate_tag(argv[1], NULL, NULL);
74 if (!dev)
75 errx(FINDFS_NOT_FOUND, _("unable to resolve '%s'"), argv[1]);
76
77 puts(dev);
78 return FINDFS_SUCCESS;
79 }
80