From d84508cfbdba620d02e37dbd47c3065dfe7ab240 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Tue, 21 Jun 2011 14:58:37 +0200 Subject: libmount: allow to set parser callback to context Signed-off-by: Karel Zak --- libmount/src/context.c | 28 ++++++++++++++++++++++++++++ libmount/src/fs.c | 8 +------- libmount/src/libmount.h.in | 2 ++ libmount/src/libmount.sym | 1 + libmount/src/mountP.h | 3 +++ 5 files changed, 35 insertions(+), 7 deletions(-) (limited to 'libmount') 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; @@ -749,6 +753,30 @@ int mnt_context_get_mtab(struct libmnt_context *cxt, struct libmnt_table **tb) 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 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 */ -- cgit v1.2.3-55-g7522