enum {
TABTYPE_FSTAB = 1,
TABTYPE_MTAB,
- TABTYPE_KERNEL
+ TABTYPE_KERNEL_MOUNTINFO
};
/* column names */
case TABTYPE_MTAB:
rc = mnt_table_parse_mtab(tb, path);
break;
- case TABTYPE_KERNEL:
+ case TABTYPE_KERNEL_MOUNTINFO:
if (!path)
path = access(_PATH_PROC_MOUNTINFO, R_OK) == 0 ?
_PATH_PROC_MOUNTINFO :
rc = mnt_table_parse_file(tb, path);
break;
+ default:
+ rc = -EINVAL;
+ break;
}
if (rc) {
mnt_unref_table(tb);
{ "help", no_argument, NULL, 'h' },
{ "invert", no_argument, NULL, 'i' },
{ "json", no_argument, NULL, 'J' },
- { "kernel", no_argument, NULL, 'k' },
+ { "kernel", optional_argument, NULL, 'k' },
{ "list", no_argument, NULL, 'l' },
{ "mountpoint", required_argument, NULL, 'M' },
{ "mtab", no_argument, NULL, 'm' },
findmnt.flags |= FL_TREE;
while ((c = getopt_long(argc, argv,
- "AabCcDd:ehIiJfF:o:O:p::PQ:klmM:nN:rst:uvRS:T:Uw:VxyH",
+ "AabCcDd:ehIiJfF:o:O:p::PQ:k::lmM:nN:rst:uvRS:T:Uw:VxyH",
longopts, NULL)) != -1) {
err_exclusive_options(c, longopts, excl, excl_st);
tabtype = TABTYPE_FSTAB;
findmnt.flags &= ~FL_TREE;
break;
- case 'k': /* kernel (mountinfo) */
- tabtype = TABTYPE_KERNEL;
+ case 'k':
+ if (optarg) {
+ if (strcmp(optarg, "mountinfo") == 0)
+ tabtype = TABTYPE_KERNEL_MOUNTINFO;
+ else
+ errx(EXIT_FAILURE, _("invalid --kernel argument"));
+ } else
+ tabtype = TABTYPE_KERNEL_MOUNTINFO;
break;
case 't':
set_match(COL_FSTYPE, optarg);
findmnt.flags |= FL_NOHEADINGS;
break;
case 'N':
- tabtype = TABTYPE_KERNEL;
+ tabtype = TABTYPE_KERNEL_MOUNTINFO;
tabfiles = append_pid_tabfile(tabfiles, &ntabfiles,
strtou32_or_err(optarg,
_("invalid TID argument")));
return EXIT_FAILURE;
if (!tabtype)
- tabtype = verify ? TABTYPE_FSTAB : TABTYPE_KERNEL;
+ tabtype = verify ? TABTYPE_FSTAB : TABTYPE_KERNEL_MOUNTINFO;
if ((findmnt.flags & FL_POLL) && ntabfiles > 1)
errx(EXIT_FAILURE, _("--poll accepts only one file, but more specified by --tab-file"));
mnt_table_set_userdata(tb, &findmnt);
if (tabtype == TABTYPE_MTAB && tab_is_kernel(tb))
- tabtype = TABTYPE_KERNEL;
+ tabtype = TABTYPE_KERNEL_MOUNTINFO;
istree = tab_is_tree(tb);
if (istree && force_tree)
}
mnt_table_set_cache(tb, findmnt.cache);
- if (tabtype != TABTYPE_KERNEL)
+ if (tabtype != TABTYPE_KERNEL_MOUNTINFO)
cache_set_targets(findmnt.cache);
}
rc = add_matching_lines(tb, table, direction, &findmnt);
if (rc != 0
- && tabtype == TABTYPE_KERNEL
+ && tabtype == TABTYPE_KERNEL_MOUNTINFO
&& (findmnt.flags & FL_NOSWAPMATCH)
&& !(findmnt.flags & FL_STRICTTARGET)
&& get_match(COL_TARGET)) {