cxt->fstab = mnt_new_table();
if (!cxt->fstab)
return -ENOMEM;
+ if (cxt->table_errcb)
+ mnt_table_set_parser_errcb(cxt->fstab, cxt->table_errcb);
cxt->flags &= ~MNT_FL_EXTERN_FSTAB;
rc = mnt_table_parse_fstab(cxt->fstab, NULL);
if (rc)
cxt->mtab = mnt_new_table();
if (!cxt->mtab)
return -ENOMEM;
+ if (cxt->table_errcb)
+ mnt_table_set_parser_errcb(cxt->fstab, cxt->table_errcb);
rc = mnt_table_parse_mtab(cxt->mtab, cxt->mtab_path);
if (rc)
return rc;
return 0;
}
+/**
+ * mnt_context_set_tables_errcb
+ * @cxt: mount context
+ * @cb: pointer to callback function
+ *
+ * The error callback is used for all tab files (e.g. mtab, fstab)
+ * parsed within the context.
+ *
+ * See also mnt_context_get_mtab(),
+ * mnt_context_get_fstab(),
+ * mnt_table_set_parser_errcb().
+ *
+ * Returns: 0 on success, negative number in case of error.
+ */
+int mnt_context_set_tables_errcb(struct libmnt_context *cxt,
+ int (*cb)(struct libmnt_table *tb, const char *filename, int line))
+{
+ if (!cxt)
+ return -EINVAL;
+
+ cxt->table_errcb = cb;
+ return 0;
+}
+
/**
* mnt_context_set_cache:
* @cxt: mount context
*/
int mnt_fs_match_options(struct libmnt_fs *fs, const char *options)
{
- char *o = mnt_fs_strdup_options(fs);
- int rc = 0;
-
- if (o)
- rc = mnt_match_options(o, options);
- free(o);
- return rc;
+ return mnt_match_options(mnt_fs_get_options(fs), options);
}
/**
extern int mnt_context_set_options_pattern(struct libmnt_context *cxt,
const char *pattern);
+extern int mnt_context_set_tables_errcb(struct libmnt_context *cxt,
+ int (*cb)(struct libmnt_table *tb, const char *filename, int line));
extern int mnt_context_set_fstab(struct libmnt_context *cxt,
struct libmnt_table *tb);
extern int mnt_context_get_fstab(struct libmnt_context *cxt,
mnt_context_set_optsmode;
mnt_context_set_source;
mnt_context_set_syscall_status;
+ mnt_context_set_tables_errcb;
mnt_context_set_target;
mnt_context_set_user_mflags;
mnt_context_strerror;
struct libmnt_table *fstab; /* fstab (or mtab for some remounts) entries */
struct libmnt_table *mtab; /* mtab entries */
+ int (*table_errcb)(struct libmnt_table *tb, /* callback for libmnt_table structs */
+ const char *filename, int line);
+
int optsmode; /* fstab optstr mode MNT_OPTSMODE_{AUTO,FORCE,IGNORE} */
int loopdev_fd; /* open loopdev */