diff options
author | Karel Zak | 2011-06-21 14:58:37 +0200 |
---|---|---|
committer | Karel Zak | 2011-06-21 14:58:37 +0200 |
commit | d84508cfbdba620d02e37dbd47c3065dfe7ab240 (patch) | |
tree | 0c21d49cc675f2c0b26a19e236b5a3ab18319279 /libmount | |
parent | mountpoint: add new command (diff) | |
download | kernel-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.c | 28 | ||||
-rw-r--r-- | libmount/src/fs.c | 8 | ||||
-rw-r--r-- | libmount/src/libmount.h.in | 2 | ||||
-rw-r--r-- | libmount/src/libmount.sym | 1 | ||||
-rw-r--r-- | libmount/src/mountP.h | 3 |
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 */ |