busybox/util-linux/findfs.c
<<
>>
Prefs
   1/* vi: set sw=4 ts=4: */
   2/*
   3 * Support functions for mounting devices by label/uuid
   4 *
   5 * Copyright (C) 2006 by Jason Schoon <floydpink@gmail.com>
   6 * Some portions cribbed from e2fsprogs, util-linux, dosfstools
   7 *
   8 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
   9 */
  10//config:config FINDFS
  11//config:       bool "findfs (12 kb)"
  12//config:       default y
  13//config:       select PLATFORM_LINUX
  14//config:       select VOLUMEID
  15//config:       help
  16//config:       Prints the name of a filesystem with given label or UUID.
  17
  18/* Benefits from suid root: better access to /dev/BLOCKDEVs: */
  19//applet:IF_FINDFS(APPLET(findfs, BB_DIR_SBIN, BB_SUID_MAYBE))
  20
  21//kbuild:lib-$(CONFIG_FINDFS) += findfs.o
  22
  23//usage:#define findfs_trivial_usage
  24//usage:       "LABEL=label or UUID=uuid"
  25//usage:#define findfs_full_usage "\n\n"
  26//usage:       "Find a filesystem device based on a label or UUID"
  27//usage:
  28//usage:#define findfs_example_usage
  29//usage:       "$ findfs LABEL=MyDevice"
  30
  31#include "libbb.h"
  32#include "volume_id.h"
  33
  34int findfs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
  35int findfs_main(int argc UNUSED_PARAM, char **argv)
  36{
  37        char *dev = *++argv;
  38
  39        if (!dev)
  40                bb_show_usage();
  41
  42        if (is_prefixed_with(dev, "/dev/")) {
  43                /* Just pass any /dev/xxx name right through.
  44                 * This might aid in some scripts being able
  45                 * to call this unconditionally */
  46                dev = NULL;
  47        } else {
  48                /* Otherwise, handle LABEL=xxx and UUID=xxx,
  49                 * fail on anything else */
  50                if (!resolve_mount_spec(argv))
  51                        bb_show_usage();
  52        }
  53
  54        if (*argv != dev) {
  55                puts(*argv);
  56                return 0;
  57        }
  58        return 1;
  59}
  60