summaryrefslogtreecommitdiffstats
path: root/libmount
diff options
context:
space:
mode:
authorKarel Zak2011-06-21 14:58:37 +0200
committerKarel Zak2011-06-21 14:58:37 +0200
commitd84508cfbdba620d02e37dbd47c3065dfe7ab240 (patch)
tree0c21d49cc675f2c0b26a19e236b5a3ab18319279 /libmount
parentmountpoint: add new command (diff)
downloadkernel-qcow2-util-linux-d84508cfbdba620d02e37dbd47c3065dfe7ab240.tar.gz
kernel-qcow2-util-linux-d84508cfbdba620d02e37dbd47c3065dfe7ab240.tar.xz
kernel-qcow2-util-linux-d84508cfbdba620d02e37dbd47c3065dfe7ab240.zip
libmount: allow to set parser callback to context
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libmount')
-rw-r--r--libmount/src/context.c28
-rw-r--r--libmount/src/fs.c8
-rw-r--r--libmount/src/libmount.h.in2
-rw-r--r--libmount/src/libmount.sym1
-rw-r--r--libmount/src/mountP.h3
5 files changed, 35 insertions, 7 deletions
diff --git a/libmount/src/context.c b/libmount/src/context.c
index d65c8f152..f3eaae414 100644
--- a/libmount/src/context.c
+++ b/libmount/src/context.c
@@ -696,6 +696,8 @@ int mnt_context_get_fstab(struct libmnt_context *cxt, struct libmnt_table **tb)
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)
@@ -736,6 +738,8 @@ int mnt_context_get_mtab(struct libmnt_context *cxt, struct libmnt_table **tb)
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;
@@ -750,6 +754,30 @@ int mnt_context_get_mtab(struct libmnt_context *cxt, struct libmnt_table **tb)
}
/**
+ * 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
* @cache: cache instance or nULL
diff --git a/libmount/src/fs.c b/libmount/src/fs.c
index 02f401d95..dc6009cf9 100644
--- a/libmount/src/fs.c
+++ b/libmount/src/fs.c
@@ -1220,13 +1220,7 @@ int mnt_fs_match_fstype(struct libmnt_fs *fs, const char *types)
*/
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);
}
/**
diff --git a/libmount/src/libmount.h.in b/libmount/src/libmount.h.in
index 18d0739ca..b9d4db69d 100644
--- a/libmount/src/libmount.h.in
+++ b/libmount/src/libmount.h.in
@@ -412,6 +412,8 @@ extern int mnt_context_set_fstype_pattern(struct libmnt_context *cxt,
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,
diff --git a/libmount/src/libmount.sym b/libmount/src/libmount.sym
index a49891650..889309379 100644
--- a/libmount/src/libmount.sym
+++ b/libmount/src/libmount.sym
@@ -61,6 +61,7 @@ global:
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;
diff --git a/libmount/src/mountP.h b/libmount/src/mountP.h
index 8c63fbd4e..9c85e13b5 100644
--- a/libmount/src/mountP.h
+++ b/libmount/src/mountP.h
@@ -258,6 +258,9 @@ struct libmnt_context
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 */