]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libmount: allow to set parser callback to context
authorKarel Zak <kzak@redhat.com>
Tue, 21 Jun 2011 12:58:37 +0000 (14:58 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 21 Jun 2011 12:58:37 +0000 (14:58 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
libmount/src/context.c
libmount/src/fs.c
libmount/src/libmount.h.in
libmount/src/libmount.sym
libmount/src/mountP.h

index d65c8f1528386be208375f1e0787176b53b7d06b..f3eaae414810101f1b927fb6b2be437e2d9fbb08 100644 (file)
@@ -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
index 02f401d9529b4c0bed9cfd1df0e2f097a5f22363..dc6009cf9df27ae329c46383df47f3fb156be3cc 100644 (file)
@@ -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);
 }
 
 /**
index 18d0739ca90b2eb14cd948dd3d557863ab92428a..b9d4db69db5bd718a9acc03d4a8ac1c69d4831c7 100644 (file)
@@ -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,
index a4989165047da61232195eb8697e3d85b22a8ba0..889309379b2ba13b13863087578e3e310f682e60 100644 (file)
@@ -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;
index 8c63fbd4e6886f83f38012538fcb1bf8d8cce7d0..9c85e13b5a436c3e8dd97eb7b1a8c57e309505cd 100644 (file)
@@ -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 */