diff options
author | Horea Christian <chr@chymera.eu> | 2020-10-09 06:40:53 -0400 |
---|---|---|
committer | Horea Christian <chr@chymera.eu> | 2020-10-09 06:40:53 -0400 |
commit | b414dcb4aeff8ee5d9e81560b4090dc185e72000 (patch) | |
tree | cd1fe4834d23ea229230398f0ff28d87816afb60 /patches | |
parent | sci-libs/itk: eclass and RESTRICT updates (diff) | |
download | sci-b414dcb4aeff8ee5d9e81560b4090dc185e72000.tar.gz sci-b414dcb4aeff8ee5d9e81560b4090dc185e72000.tar.bz2 sci-b414dcb4aeff8ee5d9e81560b4090dc185e72000.zip |
patchers: removed patches directory for packages distributed by ::gentoo
Signed-off-by: Horea Christian <chr@chymera.eu>
Diffstat (limited to 'patches')
-rw-r--r-- | patches/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch | 2082 | ||||
-rw-r--r-- | patches/07_doxygen.patch | 1804 |
2 files changed, 0 insertions, 3886 deletions
diff --git a/patches/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch b/patches/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch deleted file mode 100644 index 813446c38..000000000 --- a/patches/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch +++ /dev/null @@ -1,2082 +0,0 @@ -From 9071634fd9db37a6121fdfbd817162f782661202 Mon Sep 17 00:00:00 2001 -From: James Simmons <uja.ornl@gmail.com> -Date: Mon, 5 May 2014 10:02:21 -0400 -Subject: [PATCH 2/3] LU-3319 procfs: move mdd/ofd proc handling to seq_files - -With 3.10 linux kernel and above proc handling now only -uses struct seq_files. This patch migrates the mdd/ofd -layer proc entries over to using seq_files. - -Signed-off-by: James Simmons <uja.ornl@gmail.com> -Change-Id: I61b7df6bfd5efd0f12e3ca1a1813b7b62d493168 ---- - lustre/include/lustre_lfsck.h | 6 +- - lustre/lfsck/lfsck_internal.h | 9 +- - lustre/lfsck/lfsck_layout.c | 132 ++++------- - lustre/lfsck/lfsck_lib.c | 88 +++----- - lustre/lfsck/lfsck_namespace.c | 75 ++----- - lustre/mdd/mdd_device.c | 25 +-- - lustre/mdd/mdd_internal.h | 1 - - lustre/mdd/mdd_lproc.c | 302 ++++++++++++------------- - lustre/ofd/lproc_ofd.c | 490 +++++++++++++++++++++-------------------- - lustre/ofd/ofd_dev.c | 90 ++++---- - lustre/ofd/ofd_internal.h | 6 +- - 11 files changed, 543 insertions(+), 681 deletions(-) - -diff --git a/lustre/include/lustre_lfsck.h b/lustre/include/lustre_lfsck.h -index 0d6f666..5adbffe 100644 ---- a/lustre/include/lustre_lfsck.h -+++ b/lustre/include/lustre_lfsck.h -@@ -148,12 +148,12 @@ int lfsck_in_notify(const struct lu_env *env, struct dt_device *key, - int lfsck_query(const struct lu_env *env, struct dt_device *key, - struct lfsck_request *lr); - --int lfsck_get_speed(struct dt_device *key, void *buf, int len); -+int lfsck_get_speed(struct seq_file *m, struct dt_device *key); - int lfsck_set_speed(struct dt_device *key, int val); --int lfsck_get_windows(struct dt_device *key, void *buf, int len); -+int lfsck_get_windows(struct seq_file *m, struct dt_device *key); - int lfsck_set_windows(struct dt_device *key, int val); - --int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type); -+int lfsck_dump(struct seq_file *m, struct dt_device *key, enum lfsck_type type); - - static inline void lfsck_pack_rfa(struct lfsck_request *lr, - const struct lu_fid *fid) -diff --git a/lustre/lfsck/lfsck_internal.h b/lustre/lfsck/lfsck_internal.h -index 24b84ae..203ad74 100644 ---- a/lustre/lfsck/lfsck_internal.h -+++ b/lustre/lfsck/lfsck_internal.h -@@ -303,8 +303,7 @@ struct lfsck_operations { - - int (*lfsck_dump)(const struct lu_env *env, - struct lfsck_component *com, -- char *buf, -- int len); -+ struct seq_file *m); - - int (*lfsck_double_scan)(const struct lu_env *env, - struct lfsck_component *com); -@@ -590,10 +589,10 @@ void lfsck_component_cleanup(const struct lu_env *env, - struct lfsck_component *com); - void lfsck_instance_cleanup(const struct lu_env *env, - struct lfsck_instance *lfsck); --int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[], -+int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[], - const char *prefix); --int lfsck_time_dump(char **buf, int *len, __u64 time, const char *prefix); --int lfsck_pos_dump(char **buf, int *len, struct lfsck_position *pos, -+int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix); -+int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos, - const char *prefix); - void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck, - struct lfsck_position *pos, bool init); -diff --git a/lustre/lfsck/lfsck_layout.c b/lustre/lfsck/lfsck_layout.c -index ced2e4d..e2df62d 100644 ---- a/lustre/lfsck/lfsck_layout.c -+++ b/lustre/lfsck/lfsck_layout.c -@@ -492,7 +492,7 @@ static struct lfsck_rbtree_node *lfsck_rbtree_new(const struct lu_env *env, - return ERR_PTR(-ENOMEM); - } - -- rb_init_node(&lrn->lrn_node); -+ RB_CLEAR_NODE(&lrn->lrn_node); - lrn->lrn_seq = fid_seq(fid); - lrn->lrn_first_oid = fid_oid(fid) & ~LFSCK_RBTREE_BITMAP_MASK; - atomic_set(&lrn->lrn_known_count, 0); -@@ -4873,69 +4873,53 @@ static int lfsck_layout_slave_post(const struct lu_env *env, - } - - static int lfsck_layout_dump(const struct lu_env *env, -- struct lfsck_component *com, char *buf, int len) -+ struct lfsck_component *com, struct seq_file *m) - { - struct lfsck_instance *lfsck = com->lc_lfsck; - struct lfsck_bookmark *bk = &lfsck->li_bookmark_ram; - struct lfsck_layout *lo = com->lc_file_ram; -- int save = len; -- int ret = -ENOSPC; - int rc; - - down_read(&com->lc_sem); -- rc = snprintf(buf, len, -- "name: lfsck_layout\n" -+ seq_printf(m, "name: lfsck_layout\n" - "magic: %#x\n" - "version: %d\n" - "status: %s\n", - lo->ll_magic, - bk->lb_version, - lfsck_status2names(lo->ll_status)); -- if (rc <= 0) -- goto out; - -- buf += rc; -- len -= rc; -- rc = lfsck_bits_dump(&buf, &len, lo->ll_flags, lfsck_flags_names, -- "flags"); -+ rc = lfsck_bits_dump(m, lo->ll_flags, lfsck_flags_names, "flags"); - if (rc < 0) - goto out; - -- rc = lfsck_bits_dump(&buf, &len, bk->lb_param, lfsck_param_names, -- "param"); -+ rc = lfsck_bits_dump(m, bk->lb_param, lfsck_param_names, "param"); - if (rc < 0) - goto out; - -- rc = lfsck_time_dump(&buf, &len, lo->ll_time_last_complete, -+ rc = lfsck_time_dump(m, lo->ll_time_last_complete, - "time_since_last_completed"); - if (rc < 0) - goto out; - -- rc = lfsck_time_dump(&buf, &len, lo->ll_time_latest_start, -+ rc = lfsck_time_dump(m, lo->ll_time_latest_start, - "time_since_latest_start"); - if (rc < 0) - goto out; - -- rc = lfsck_time_dump(&buf, &len, lo->ll_time_last_checkpoint, -+ rc = lfsck_time_dump(m, lo->ll_time_last_checkpoint, - "time_since_last_checkpoint"); - if (rc < 0) - goto out; - -- rc = snprintf(buf, len, -- "latest_start_position: "LPU64"\n" -+ seq_printf(m, "latest_start_position: "LPU64"\n" - "last_checkpoint_position: "LPU64"\n" - "first_failure_position: "LPU64"\n", - lo->ll_pos_latest_start, - lo->ll_pos_last_checkpoint, - lo->ll_pos_first_inconsistent); -- if (rc <= 0) -- goto out; - -- buf += rc; -- len -= rc; -- -- rc = snprintf(buf, len, -- "success_count: %u\n" -+ seq_printf(m, "success_count: %u\n" - "repaired_dangling: "LPU64"\n" - "repaired_unmatched_pair: "LPU64"\n" - "repaired_multiple_referenced: "LPU64"\n" -@@ -4955,11 +4939,6 @@ static int lfsck_layout_dump(const struct lu_env *env, - lo->ll_objs_skipped, - lo->ll_objs_failed_phase1, - lo->ll_objs_failed_phase2); -- if (rc <= 0) -- goto out; -- -- buf += rc; -- len -= rc; - - if (lo->ll_status == LS_SCANNING_PHASE1) { - __u64 pos; -@@ -4977,8 +4956,7 @@ static int lfsck_layout_dump(const struct lu_env *env, - do_div(new_checked, duration); - if (rtime != 0) - do_div(speed, rtime); -- rc = snprintf(buf, len, -- "checked_phase1: "LPU64"\n" -+ seq_printf(m, "checked_phase1: "LPU64"\n" - "checked_phase2: "LPU64"\n" - "run_time_phase1: %u seconds\n" - "run_time_phase2: %u seconds\n" -@@ -4992,11 +4970,6 @@ static int lfsck_layout_dump(const struct lu_env *env, - lo->ll_run_time_phase2, - speed, - new_checked); -- if (rc <= 0) -- goto out; -- -- buf += rc; -- len -= rc; - - LASSERT(lfsck->li_di_oit != NULL); - -@@ -5009,12 +4982,8 @@ static int lfsck_layout_dump(const struct lu_env *env, - pos = iops->store(env, lfsck->li_di_oit); - if (!lfsck->li_current_oit_processed) - pos--; -- rc = snprintf(buf, len, "current_position: "LPU64"\n", pos); -- if (rc <= 0) -- goto out; -+ seq_printf(m, "current_position: "LPU64"\n", pos); - -- buf += rc; -- len -= rc; - } else if (lo->ll_status == LS_SCANNING_PHASE2) { - cfs_duration_t duration = cfs_time_current() - - lfsck->li_time_last_checkpoint; -@@ -5032,29 +5001,26 @@ static int lfsck_layout_dump(const struct lu_env *env, - do_div(speed1, lo->ll_run_time_phase1); - if (rtime != 0) - do_div(speed2, rtime); -- rc = snprintf(buf, len, -- "checked_phase1: "LPU64"\n" -- "checked_phase2: "LPU64"\n" -- "run_time_phase1: %u seconds\n" -- "run_time_phase2: %u seconds\n" -- "average_speed_phase1: "LPU64" items/sec\n" -- "average_speed_phase2: "LPU64" items/sec\n" -- "real-time_speed_phase1: N/A\n" -- "real-time_speed_phase2: "LPU64" items/sec\n" -- "current_position: "DFID"\n", -- lo->ll_objs_checked_phase1, -- checked, -- lo->ll_run_time_phase1, -- rtime, -- speed1, -- speed2, -- new_checked, -- PFID(&com->lc_fid_latest_scanned_phase2)); -+ rc = seq_printf(m, "checked_phase1: "LPU64"\n" -+ "checked_phase2: "LPU64"\n" -+ "run_time_phase1: %u seconds\n" -+ "run_time_phase2: %u seconds\n" -+ "average_speed_phase1: "LPU64" items/sec\n" -+ "average_speed_phase2: "LPU64" items/sec\n" -+ "real-time_speed_phase1: N/A\n" -+ "real-time_speed_phase2: "LPU64" items/sec\n" -+ "current_position: "DFID"\n", -+ lo->ll_objs_checked_phase1, -+ checked, -+ lo->ll_run_time_phase1, -+ rtime, -+ speed1, -+ speed2, -+ new_checked, -+ PFID(&com->lc_fid_latest_scanned_phase2)); - if (rc <= 0) - goto out; - -- buf += rc; -- len -= rc; - } else { - __u64 speed1 = lo->ll_objs_checked_phase1; - __u64 speed2 = lo->ll_objs_checked_phase2; -@@ -5063,34 +5029,26 @@ static int lfsck_layout_dump(const struct lu_env *env, - do_div(speed1, lo->ll_run_time_phase1); - if (lo->ll_run_time_phase2 != 0) - do_div(speed2, lo->ll_run_time_phase2); -- rc = snprintf(buf, len, -- "checked_phase1: "LPU64"\n" -- "checked_phase2: "LPU64"\n" -- "run_time_phase1: %u seconds\n" -- "run_time_phase2: %u seconds\n" -- "average_speed_phase1: "LPU64" items/sec\n" -- "average_speed_phase2: "LPU64" objs/sec\n" -- "real-time_speed_phase1: N/A\n" -- "real-time_speed_phase2: N/A\n" -- "current_position: N/A\n", -- lo->ll_objs_checked_phase1, -- lo->ll_objs_checked_phase2, -- lo->ll_run_time_phase1, -- lo->ll_run_time_phase2, -- speed1, -- speed2); -- if (rc <= 0) -- goto out; -- -- buf += rc; -- len -= rc; -+ seq_printf(m, "checked_phase1: "LPU64"\n" -+ "checked_phase2: "LPU64"\n" -+ "run_time_phase1: %u seconds\n" -+ "run_time_phase2: %u seconds\n" -+ "average_speed_phase1: "LPU64" items/sec\n" -+ "average_speed_phase2: "LPU64" objs/sec\n" -+ "real-time_speed_phase1: N/A\n" -+ "real-time_speed_phase2: N/A\n" -+ "current_position: N/A\n", -+ lo->ll_objs_checked_phase1, -+ lo->ll_objs_checked_phase2, -+ lo->ll_run_time_phase1, -+ lo->ll_run_time_phase2, -+ speed1, -+ speed2); - } -- ret = save - len; -- - out: - up_read(&com->lc_sem); - -- return ret; -+ return rc; - } - - static int lfsck_layout_master_double_scan(const struct lu_env *env, -diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c -index db73616..f6f1cce 100644 ---- a/lustre/lfsck/lfsck_lib.c -+++ b/lustre/lfsck/lfsck_lib.c -@@ -900,21 +900,15 @@ static inline int lfsck_instance_add(struct lfsck_instance *lfsck) - return 0; - } - --int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[], -+int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[], - const char *prefix) - { -- int save = *len; - int flag; -- int rc; - int i; - bool newline = (bits != 0 ? false : true); - -- rc = snprintf(*buf, *len, "%s:%c", prefix, newline ? '\n' : ' '); -- if (rc <= 0) -- return -ENOSPC; -+ seq_printf(m, "%s:%c", prefix, bits != 0 ? ' ' : '\n'); - -- *buf += rc; -- *len -= rc; - for (i = 0, flag = 1; bits != 0; i++, flag = 1 << i) { - if (flag & bits) { - bits &= ~flag; -@@ -922,69 +916,43 @@ int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[], - if (bits == 0) - newline = true; - -- rc = snprintf(*buf, *len, "%s%c", names[i], -- newline ? '\n' : ','); -- if (rc <= 0) -- return -ENOSPC; -- -- *buf += rc; -- *len -= rc; -+ seq_printf(m, "%s%c", names[i], -+ newline ? '\n' : ','); - } - } - } - -- if (!newline) { -- rc = snprintf(*buf, *len, "\n"); -- if (rc <= 0) -- return -ENOSPC; -- -- *buf += rc; -- *len -= rc; -- } -- -- return save - *len; -+ if (!newline) -+ seq_printf(m, "\n"); -+ return 0; - } - --int lfsck_time_dump(char **buf, int *len, __u64 time, const char *prefix) -+int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix) - { -- int rc; -- - if (time != 0) -- rc = snprintf(*buf, *len, "%s: "LPU64" seconds\n", prefix, -- cfs_time_current_sec() - time); -+ seq_printf(m, "%s: "LPU64" seconds\n", prefix, -+ cfs_time_current_sec() - time); - else -- rc = snprintf(*buf, *len, "%s: N/A\n", prefix); -- if (rc <= 0) -- return -ENOSPC; -- -- *buf += rc; -- *len -= rc; -- return rc; -+ seq_printf(m, "%s: N/A\n", prefix); -+ return 0; - } - --int lfsck_pos_dump(char **buf, int *len, struct lfsck_position *pos, -+int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos, - const char *prefix) - { -- int rc; -- - if (fid_is_zero(&pos->lp_dir_parent)) { - if (pos->lp_oit_cookie == 0) -- rc = snprintf(*buf, *len, "%s: N/A, N/A, N/A\n", -- prefix); -+ seq_printf(m, "%s: N/A, N/A, N/A\n", -+ prefix); - else -- rc = snprintf(*buf, *len, "%s: "LPU64", N/A, N/A\n", -- prefix, pos->lp_oit_cookie); -+ seq_printf(m, "%s: "LPU64", N/A, N/A\n", -+ prefix, pos->lp_oit_cookie); - } else { -- rc = snprintf(*buf, *len, "%s: "LPU64", "DFID", "LPU64"\n", -- prefix, pos->lp_oit_cookie, -- PFID(&pos->lp_dir_parent), pos->lp_dir_cookie); -+ seq_printf(m, "%s: "LPU64", "DFID", "LPU64"\n", -+ prefix, pos->lp_oit_cookie, -+ PFID(&pos->lp_dir_parent), pos->lp_dir_cookie); - } -- if (rc <= 0) -- return -ENOSPC; -- -- *buf += rc; -- *len -= rc; -- return rc; -+ return 0; - } - - void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck, -@@ -1670,7 +1638,7 @@ int lfsck_async_request(const struct lu_env *env, struct obd_export *exp, - - /* external interfaces */ - --int lfsck_get_speed(struct dt_device *key, void *buf, int len) -+int lfsck_get_speed(struct seq_file *m, struct dt_device *key) - { - struct lu_env env; - struct lfsck_instance *lfsck; -@@ -1683,8 +1651,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len) - - lfsck = lfsck_instance_find(key, true, false); - if (likely(lfsck != NULL)) { -- rc = snprintf(buf, len, "%u\n", -- lfsck->li_bookmark_ram.lb_speed_limit); -+ seq_printf(m, "%u\n", lfsck->li_bookmark_ram.lb_speed_limit); - lfsck_instance_put(&env, lfsck); - } else { - rc = -ENXIO; -@@ -1724,7 +1691,7 @@ int lfsck_set_speed(struct dt_device *key, int val) - } - EXPORT_SYMBOL(lfsck_set_speed); - --int lfsck_get_windows(struct dt_device *key, void *buf, int len) -+int lfsck_get_windows(struct seq_file *m, struct dt_device *key) - { - struct lu_env env; - struct lfsck_instance *lfsck; -@@ -1737,8 +1704,7 @@ int lfsck_get_windows(struct dt_device *key, void *buf, int len) - - lfsck = lfsck_instance_find(key, true, false); - if (likely(lfsck != NULL)) { -- rc = snprintf(buf, len, "%u\n", -- lfsck->li_bookmark_ram.lb_async_windows); -+ seq_printf(m, "%u\n", lfsck->li_bookmark_ram.lb_async_windows); - lfsck_instance_put(&env, lfsck); - } else { - rc = -ENXIO; -@@ -1788,7 +1754,7 @@ int lfsck_set_windows(struct dt_device *key, int val) - } - EXPORT_SYMBOL(lfsck_set_windows); - --int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type) -+int lfsck_dump(struct seq_file *m, struct dt_device *key, enum lfsck_type type) - { - struct lu_env env; - struct lfsck_instance *lfsck; -@@ -1804,7 +1770,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type) - if (likely(lfsck != NULL)) { - com = lfsck_component_find(lfsck, type); - if (likely(com != NULL)) { -- rc = com->lc_ops->lfsck_dump(&env, com, buf, len); -+ rc = com->lc_ops->lfsck_dump(&env, com, m); - lfsck_component_put(&env, com); - } else { - rc = -ENOTSUPP; -diff --git a/lustre/lfsck/lfsck_namespace.c b/lustre/lfsck/lfsck_namespace.c -index 4dccb70..fc9a0dc 100644 ---- a/lustre/lfsck/lfsck_namespace.c -+++ b/lustre/lfsck/lfsck_namespace.c -@@ -1099,65 +1099,56 @@ static int lfsck_namespace_post(const struct lu_env *env, - - static int - lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com, -- char *buf, int len) -+ struct seq_file *m) - { - struct lfsck_instance *lfsck = com->lc_lfsck; - struct lfsck_bookmark *bk = &lfsck->li_bookmark_ram; - struct lfsck_namespace *ns = com->lc_file_ram; -- int save = len; -- int ret = -ENOSPC; - int rc; - - down_read(&com->lc_sem); -- rc = snprintf(buf, len, -- "name: lfsck_namespace\n" -- "magic: %#x\n" -- "version: %d\n" -- "status: %s\n", -- ns->ln_magic, -- bk->lb_version, -- lfsck_status2names(ns->ln_status)); -- if (rc <= 0) -- goto out; -- -- buf += rc; -- len -= rc; -- rc = lfsck_bits_dump(&buf, &len, ns->ln_flags, lfsck_flags_names, -- "flags"); -+ seq_printf(m, "name: lfsck_namespace\n" -+ "magic: %#x\n" -+ "version: %d\n" -+ "status: %s\n", -+ ns->ln_magic, -+ bk->lb_version, -+ lfsck_status2names(ns->ln_status)); -+ -+ rc = lfsck_bits_dump(m, ns->ln_flags, lfsck_flags_names, "flags"); - if (rc < 0) - goto out; - -- rc = lfsck_bits_dump(&buf, &len, bk->lb_param, lfsck_param_names, -- "param"); -+ rc = lfsck_bits_dump(m, bk->lb_param, lfsck_param_names, "param"); - if (rc < 0) - goto out; - -- rc = lfsck_time_dump(&buf, &len, ns->ln_time_last_complete, -+ rc = lfsck_time_dump(m, ns->ln_time_last_complete, - "time_since_last_completed"); - if (rc < 0) - goto out; - -- rc = lfsck_time_dump(&buf, &len, ns->ln_time_latest_start, -+ rc = lfsck_time_dump(m, ns->ln_time_latest_start, - "time_since_latest_start"); - if (rc < 0) - goto out; - -- rc = lfsck_time_dump(&buf, &len, ns->ln_time_last_checkpoint, -+ rc = lfsck_time_dump(m, ns->ln_time_last_checkpoint, - "time_since_last_checkpoint"); - if (rc < 0) - goto out; - -- rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_latest_start, -+ rc = lfsck_pos_dump(m, &ns->ln_pos_latest_start, - "latest_start_position"); - if (rc < 0) - goto out; - -- rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_last_checkpoint, -+ rc = lfsck_pos_dump(m, &ns->ln_pos_last_checkpoint, - "last_checkpoint_position"); - if (rc < 0) - goto out; - -- rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_first_inconsistent, -+ rc = lfsck_pos_dump(m, &ns->ln_pos_first_inconsistent, - "first_failure_position"); - if (rc < 0) - goto out; -@@ -1177,8 +1168,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com, - do_div(new_checked, duration); - if (rtime != 0) - do_div(speed, rtime); -- rc = snprintf(buf, len, -- "checked_phase1: "LPU64"\n" -+ seq_printf(m, "checked_phase1: "LPU64"\n" - "checked_phase2: "LPU64"\n" - "updated_phase1: "LPU64"\n" - "updated_phase2: "LPU64"\n" -@@ -1214,11 +1204,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com, - ns->ln_run_time_phase2, - speed, - new_checked); -- if (rc <= 0) -- goto out; -- -- buf += rc; -- len -= rc; - - LASSERT(lfsck->li_di_oit != NULL); - -@@ -1247,9 +1232,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com, - pos.lp_dir_cookie = 0; - } - spin_unlock(&lfsck->li_lock); -- rc = lfsck_pos_dump(&buf, &len, &pos, "current_position"); -- if (rc <= 0) -- goto out; -+ lfsck_pos_dump(m, &pos, "current_position"); - } else if (ns->ln_status == LS_SCANNING_PHASE2) { - cfs_duration_t duration = cfs_time_current() - - lfsck->li_time_last_checkpoint; -@@ -1267,8 +1250,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com, - do_div(speed1, ns->ln_run_time_phase1); - if (rtime != 0) - do_div(speed2, rtime); -- rc = snprintf(buf, len, -- "checked_phase1: "LPU64"\n" -+ seq_printf(m, "checked_phase1: "LPU64"\n" - "checked_phase2: "LPU64"\n" - "updated_phase1: "LPU64"\n" - "updated_phase2: "LPU64"\n" -@@ -1307,11 +1289,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com, - speed2, - new_checked, - PFID(&ns->ln_fid_latest_scanned_phase2)); -- if (rc <= 0) -- goto out; -- -- buf += rc; -- len -= rc; - } else { - __u64 speed1 = ns->ln_items_checked; - __u64 speed2 = ns->ln_objs_checked_phase2; -@@ -1320,8 +1297,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com, - do_div(speed1, ns->ln_run_time_phase1); - if (ns->ln_run_time_phase2 != 0) - do_div(speed2, ns->ln_run_time_phase2); -- rc = snprintf(buf, len, -- "checked_phase1: "LPU64"\n" -+ seq_printf(m, "checked_phase1: "LPU64"\n" - "checked_phase2: "LPU64"\n" - "updated_phase1: "LPU64"\n" - "updated_phase2: "LPU64"\n" -@@ -1358,17 +1334,10 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com, - ns->ln_run_time_phase2, - speed1, - speed2); -- if (rc <= 0) -- goto out; -- -- buf += rc; -- len -= rc; - } -- ret = save - len; -- - out: - up_read(&com->lc_sem); -- return ret; -+ return 0; - } - - static int lfsck_namespace_double_scan_main(void *args) -diff --git a/lustre/mdd/mdd_device.c b/lustre/mdd/mdd_device.c -index 4f0baa4..f6deaca 100644 ---- a/lustre/mdd/mdd_device.c -+++ b/lustre/mdd/mdd_device.c -@@ -889,16 +889,16 @@ static int mdd_process_config(const struct lu_env *env, - ENTRY; - - switch (cfg->lcfg_command) { -- case LCFG_PARAM: { -- struct lprocfs_static_vars lvars; -- -- lprocfs_mdd_init_vars(&lvars); -- rc = class_process_proc_param(PARAM_MDD, lvars.obd_vars, cfg,m); -- if (rc > 0 || rc == -ENOSYS) -- /* we don't understand; pass it on */ -- rc = next->ld_ops->ldo_process_config(env, next, cfg); -- break; -- } -+ case LCFG_PARAM: { -+ struct obd_device *obd = mdd2obd_dev(m); -+ -+ rc = class_process_proc_seq_param(PARAM_MDD, obd->obd_vars, -+ cfg, m); -+ if (rc > 0 || rc == -ENOSYS) -+ /* we don't understand; pass it on */ -+ rc = next->ld_ops->ldo_process_config(env, next, cfg); -+ break; -+ } - case LCFG_SETUP: - rc = next->ld_ops->ldo_process_config(env, next, cfg); - if (rc) -@@ -1566,11 +1566,8 @@ LU_CONTEXT_KEY_DEFINE(mdd, LCT_MD_THREAD); - - static int __init mdd_mod_init(void) - { -- struct lprocfs_static_vars lvars; - int rc; - -- lprocfs_mdd_init_vars(&lvars); -- - rc = lu_kmem_init(mdd_caches); - if (rc) - return rc; -@@ -1586,7 +1583,7 @@ static int __init mdd_mod_init(void) - - rc = class_register_type(&mdd_obd_device_ops, NULL, true, NULL, - #ifndef HAVE_ONLY_PROCFS_SEQ -- lvars.module_vars, -+ NULL, - #endif - LUSTRE_MDD_NAME, &mdd_device_type); - if (rc) -diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h -index 4411892..37698f8 100644 ---- a/lustre/mdd/mdd_internal.h -+++ b/lustre/mdd/mdd_internal.h -@@ -248,7 +248,6 @@ int orph_declare_index_delete(const struct lu_env *, struct mdd_object *, - struct thandle *); - - /* mdd_lproc.c */ --void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars); - int mdd_procfs_init(struct mdd_device *mdd, const char *name); - int mdd_procfs_fini(struct mdd_device *mdd); - -diff --git a/lustre/mdd/mdd_lproc.c b/lustre/mdd/mdd_lproc.c -index de379b3..7ac4afa 100644 ---- a/lustre/mdd/mdd_lproc.c -+++ b/lustre/mdd/mdd_lproc.c -@@ -49,56 +49,14 @@ - #include <libcfs/libcfs_string.h> - #include "mdd_internal.h" - --int mdd_procfs_init(struct mdd_device *mdd, const char *name) --{ -- struct lprocfs_static_vars lvars; -- struct obd_type *type; -- int rc; -- ENTRY; -- -- /* at the moment there is no linkage between lu_type -- * and obd_type, so we lookup obd_type this way */ -- type = class_search_type(LUSTRE_MDD_NAME); -- -- LASSERT(name != NULL); -- LASSERT(type != NULL); -- -- /* Find the type procroot and add the proc entry for this device */ -- lprocfs_mdd_init_vars(&lvars); -- mdd->mdd_proc_entry = lprocfs_register(name, type->typ_procroot, -- lvars.obd_vars, mdd); -- if (IS_ERR(mdd->mdd_proc_entry)) { -- rc = PTR_ERR(mdd->mdd_proc_entry); -- CERROR("Error %d setting up lprocfs for %s\n", -- rc, name); -- mdd->mdd_proc_entry = NULL; -- GOTO(out, rc); -- } -- -- rc = 0; -- -- EXIT; --out: -- if (rc) -- mdd_procfs_fini(mdd); -- return rc; --} -- --int mdd_procfs_fini(struct mdd_device *mdd) --{ -- if (mdd->mdd_proc_entry) { -- lprocfs_remove(&mdd->mdd_proc_entry); -- mdd->mdd_proc_entry = NULL; -- } -- RETURN(0); --} -- --static int lprocfs_wr_atime_diff(struct file *file, const char *buffer, -- unsigned long count, void *data) -+static ssize_t -+mdd_atime_diff_seq_write(struct file *file, const char *buffer, -+ size_t count, loff_t *off) - { -- struct mdd_device *mdd = data; -- char kernbuf[20], *end; -- unsigned long diff = 0; -+ struct seq_file *m = file->private_data; -+ struct mdd_device *mdd = m->private; -+ char kernbuf[20], *end; -+ unsigned long diff = 0; - - if (count > (sizeof(kernbuf) - 1)) - return -EINVAL; -@@ -116,37 +74,35 @@ static int lprocfs_wr_atime_diff(struct file *file, const char *buffer, - return count; - } - --static int lprocfs_rd_atime_diff(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int mdd_atime_diff_seq_show(struct seq_file *m, void *data) - { -- struct mdd_device *mdd = data; -+ struct mdd_device *mdd = m->private; - -- *eof = 1; -- return snprintf(page, count, "%lu\n", mdd->mdd_atime_diff); -+ return seq_printf(m, "%lu\n", mdd->mdd_atime_diff); - } -- -+LPROC_SEQ_FOPS(mdd_atime_diff); - - /**** changelogs ****/ --static int lprocfs_rd_changelog_mask(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int mdd_changelog_mask_seq_show(struct seq_file *m, void *data) - { -- struct mdd_device *mdd = data; -- int i = 0, rc = 0; -- -- *eof = 1; -- while (i < CL_LAST) { -- if (mdd->mdd_cl.mc_mask & (1 << i)) -- rc += snprintf(page + rc, count - rc, "%s ", -- changelog_type2str(i)); -- i++; -- } -- return rc; -+ struct mdd_device *mdd = m->private; -+ int i = 0; -+ -+ while (i < CL_LAST) { -+ if (mdd->mdd_cl.mc_mask & (1 << i)) -+ seq_printf(m, "%s ", changelog_type2str(i)); -+ i++; -+ } -+ seq_printf(m, "\n"); -+ return 0; - } - --static int lprocfs_wr_changelog_mask(struct file *file, const char *buffer, -- unsigned long count, void *data) -+static ssize_t -+mdd_changelog_mask_seq_write(struct file *file, const char *buffer, -+ size_t count, loff_t *off) - { -- struct mdd_device *mdd = data; -+ struct seq_file *m = file->private_data; -+ struct mdd_device *mdd = m->private; - char *kernbuf; - int rc; - ENTRY; -@@ -168,45 +124,32 @@ out: - OBD_FREE(kernbuf, PAGE_CACHE_SIZE); - return rc; - } -- --struct cucb_data { -- char *page; -- int count; -- int idx; --}; -+LPROC_SEQ_FOPS(mdd_changelog_mask); - - static int lprocfs_changelog_users_cb(const struct lu_env *env, - struct llog_handle *llh, - struct llog_rec_hdr *hdr, void *data) - { -- struct llog_changelog_user_rec *rec; -- struct cucb_data *cucb = (struct cucb_data *)data; -+ struct llog_changelog_user_rec *rec; -+ struct seq_file *m = data; - -- LASSERT(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN); -+ LASSERT(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN); - -- rec = (struct llog_changelog_user_rec *)hdr; -+ rec = (struct llog_changelog_user_rec *)hdr; - -- cucb->idx += snprintf(cucb->page + cucb->idx, cucb->count - cucb->idx, -- CHANGELOG_USER_PREFIX"%-3d "LPU64"\n", -- rec->cur_id, rec->cur_endrec); -- if (cucb->idx >= cucb->count) -- return -ENOSPC; -- -- return 0; -+ seq_printf(m, CHANGELOG_USER_PREFIX"%-3d "LPU64"\n", -+ rec->cur_id, rec->cur_endrec); -+ return 0; - } - --static int lprocfs_rd_changelog_users(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int mdd_changelog_users_seq_show(struct seq_file *m, void *data) - { - struct lu_env env; -- struct mdd_device *mdd = data; -+ struct mdd_device *mdd = m->private; - struct llog_ctxt *ctxt; -- struct cucb_data cucb; - __u64 cur; - int rc; - -- *eof = 1; -- - ctxt = llog_get_context(mdd2obd_dev(mdd), - LLOG_CHANGELOG_USER_ORIG_CTXT); - if (ctxt == NULL) -@@ -223,37 +166,32 @@ static int lprocfs_rd_changelog_users(char *page, char **start, off_t off, - cur = mdd->mdd_cl.mc_index; - spin_unlock(&mdd->mdd_cl.mc_lock); - -- cucb.count = count; -- cucb.page = page; -- cucb.idx = 0; -- -- cucb.idx += snprintf(cucb.page + cucb.idx, cucb.count - cucb.idx, -- "current index: "LPU64"\n", cur); -- -- cucb.idx += snprintf(cucb.page + cucb.idx, cucb.count - cucb.idx, -- "%-5s %s\n", "ID", "index"); -+ seq_printf(m, "current index: "LPU64"\n", cur); -+ seq_printf(m, "%-5s %s\n", "ID", "index"); - - llog_cat_process(&env, ctxt->loc_handle, lprocfs_changelog_users_cb, -- &cucb, 0, 0); -+ m, 0, 0); - - lu_env_fini(&env); - llog_ctxt_put(ctxt); -- return cucb.idx; -+ return 0; - } -+LPROC_SEQ_FOPS_RO(mdd_changelog_users); - --static int lprocfs_rd_sync_perm(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int mdd_sync_perm_seq_show(struct seq_file *m, void *data) - { -- struct mdd_device *mdd = data; -+ struct mdd_device *mdd = m->private; - -- LASSERT(mdd != NULL); -- return snprintf(page, count, "%d\n", mdd->mdd_sync_permission); -+ LASSERT(mdd != NULL); -+ return seq_printf(m, "%d\n", mdd->mdd_sync_permission); - } - --static int lprocfs_wr_sync_perm(struct file *file, const char *buffer, -- unsigned long count, void *data) -+static ssize_t -+mdd_sync_perm_seq_write(struct file *file, const char *buffer, -+ size_t count, loff_t *off) - { -- struct mdd_device *mdd = data; -+ struct seq_file *m = file->private_data; -+ struct mdd_device *mdd = m->private; - int val, rc; - - LASSERT(mdd != NULL); -@@ -264,22 +202,22 @@ static int lprocfs_wr_sync_perm(struct file *file, const char *buffer, - mdd->mdd_sync_permission = !!val; - return count; - } -+LPROC_SEQ_FOPS(mdd_sync_perm); - --static int lprocfs_rd_lfsck_speed_limit(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int mdd_lfsck_speed_limit_seq_show(struct seq_file *m, void *data) - { -- struct mdd_device *mdd = data; -+ struct mdd_device *mdd = m->private; - - LASSERT(mdd != NULL); -- *eof = 1; -- -- return lfsck_get_speed(mdd->mdd_bottom, page, count); -+ return lfsck_get_speed(m, mdd->mdd_bottom); - } - --static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer, -- unsigned long count, void *data) -+static ssize_t -+mdd_lfsck_speed_limit_seq_write(struct file *file, const char *buffer, -+ size_t count, loff_t *off) - { -- struct mdd_device *mdd = data; -+ struct seq_file *m = file->private_data; -+ struct mdd_device *mdd = m->private; - __u32 val; - int rc; - -@@ -291,25 +229,22 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer, - rc = lfsck_set_speed(mdd->mdd_bottom, val); - return rc != 0 ? rc : count; - } -+LPROC_SEQ_FOPS(mdd_lfsck_speed_limit); - --static int lprocfs_rd_lfsck_async_windows(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int mdd_lfsck_async_windows_seq_show(struct seq_file *m, void *data) - { -- struct mdd_device *mdd = data; -- int rc; -+ struct mdd_device *mdd = m->private; - - LASSERT(mdd != NULL); -- *eof = 1; -- -- rc = lfsck_get_windows(mdd->mdd_bottom, page, count); -- -- return rc != 0 ? rc : count; -+ return lfsck_get_windows(m, mdd->mdd_bottom); - } - --static int lprocfs_wr_lfsck_async_windows(struct file *file, const char *buffer, -- unsigned long count, void *data) -+static ssize_t -+mdd_lfsck_async_windows_seq_write(struct file *file, const char *buffer, -+ size_t count, loff_t *off) - { -- struct mdd_device *mdd = data; -+ struct seq_file *m = file->private_data; -+ struct mdd_device *mdd = m->private; - __u32 val; - int rc; - -@@ -320,54 +255,87 @@ static int lprocfs_wr_lfsck_async_windows(struct file *file, const char *buffer, - - return rc != 0 ? rc : count; - } -+LPROC_SEQ_FOPS(mdd_lfsck_async_windows); - --static int lprocfs_rd_lfsck_namespace(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int mdd_lfsck_namespace_seq_show(struct seq_file *m, void *data) - { -- struct mdd_device *mdd = data; -- int rc; -+ struct mdd_device *mdd = m->private; - - LASSERT(mdd != NULL); -- *eof = 1; - -- rc = lfsck_dump(mdd->mdd_bottom, page, count, LT_NAMESPACE); -- return rc; -+ return lfsck_dump(m, mdd->mdd_bottom, LT_NAMESPACE); - } -+LPROC_SEQ_FOPS_RO(mdd_lfsck_namespace); - --static int lprocfs_rd_lfsck_layout(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int mdd_lfsck_layout_seq_show(struct seq_file *m, void *data) - { -- struct mdd_device *mdd = data; -+ struct mdd_device *mdd = m->private; - - LASSERT(mdd != NULL); -- *eof = 1; - -- return lfsck_dump(mdd->mdd_bottom, page, count, LT_LAYOUT); -+ return lfsck_dump(m, mdd->mdd_bottom, LT_LAYOUT); - } -- --static struct lprocfs_vars lprocfs_mdd_obd_vars[] = { -- { "atime_diff", lprocfs_rd_atime_diff, lprocfs_wr_atime_diff, 0 }, -- { "changelog_mask", lprocfs_rd_changelog_mask, -- lprocfs_wr_changelog_mask, 0 }, -- { "changelog_users", lprocfs_rd_changelog_users, 0, 0}, -- { "sync_permission", lprocfs_rd_sync_perm, lprocfs_wr_sync_perm, 0 }, -- { "lfsck_speed_limit", lprocfs_rd_lfsck_speed_limit, -- lprocfs_wr_lfsck_speed_limit, 0 }, -- { "lfsck_async_windows", lprocfs_rd_lfsck_async_windows, -- lprocfs_wr_lfsck_async_windows, 0 }, -- { "lfsck_namespace", lprocfs_rd_lfsck_namespace, 0, 0 }, -- { "lfsck_layout", lprocfs_rd_lfsck_layout, 0, 0 }, -+LPROC_SEQ_FOPS_RO(mdd_lfsck_layout); -+ -+static struct lprocfs_seq_vars lprocfs_mdd_obd_vars[] = { -+ { .name = "atime_diff", -+ .fops = &mdd_atime_diff_fops }, -+ { .name = "changelog_mask", -+ .fops = &mdd_changelog_mask_fops }, -+ { .name = "changelog_users", -+ .fops = &mdd_changelog_users_fops }, -+ { .name = "sync_permission", -+ .fops = &mdd_sync_perm_fops }, -+ { .name = "lfsck_speed_limit", -+ .fops = &mdd_lfsck_speed_limit_fops }, -+ { .name = "lfsck_async_windows", -+ .fops = &mdd_lfsck_async_windows_fops }, -+ { .name = "lfsck_namespace", -+ .fops = &mdd_lfsck_namespace_fops }, -+ { .name = "lfsck_layout", -+ .fops = &mdd_lfsck_layout_fops }, - { 0 } - }; - --static struct lprocfs_vars lprocfs_mdd_module_vars[] = { -- { "num_refs", lprocfs_rd_numrefs, 0, 0 }, -- { 0 } --}; -- --void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars) -+int mdd_procfs_init(struct mdd_device *mdd, const char *name) - { -- lvars->module_vars = lprocfs_mdd_module_vars; -- lvars->obd_vars = lprocfs_mdd_obd_vars; -+ struct obd_device *obd = class_name2obd(name); -+ struct obd_type *type; -+ int rc; -+ ENTRY; -+ -+ /* at the moment there is no linkage between lu_type -+ * and obd_type, so we lookup obd_type this way */ -+ type = class_search_type(LUSTRE_MDD_NAME); -+ -+ LASSERT(name != NULL); -+ LASSERT(type != NULL); -+ LASSERT(obd != NULL); -+ -+ /* Find the type procroot and add the proc entry for this device */ -+ obd->obd_vars = lprocfs_mdd_obd_vars; -+ mdd->mdd_proc_entry = lprocfs_seq_register(name, type->typ_procroot, -+ obd->obd_vars, mdd); -+ if (IS_ERR(mdd->mdd_proc_entry)) { -+ rc = PTR_ERR(mdd->mdd_proc_entry); -+ CERROR("Error %d setting up lprocfs for %s\n", -+ rc, name); -+ mdd->mdd_proc_entry = NULL; -+ GOTO(out, rc); -+ } -+ rc = 0; -+ EXIT; -+out: -+ if (rc) -+ mdd_procfs_fini(mdd); -+ return rc; - } - -+int mdd_procfs_fini(struct mdd_device *mdd) -+{ -+ if (mdd->mdd_proc_entry) { -+ lprocfs_remove(&mdd->mdd_proc_entry); -+ mdd->mdd_proc_entry = NULL; -+ } -+ RETURN(0); -+} -diff --git a/lustre/ofd/lproc_ofd.c b/lustre/ofd/lproc_ofd.c -index 359b373..fcde82a 100644 ---- a/lustre/ofd/lproc_ofd.c -+++ b/lustre/ofd/lproc_ofd.c -@@ -47,81 +47,75 @@ - - #ifdef LPROCFS - --static int lprocfs_ofd_rd_seqs(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_seqs_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = (struct obd_device *)data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - -- *eof = 1; -- return snprintf(page, count, "%u\n", ofd->ofd_seq_count); -+ return seq_printf(m, "%u\n", ofd->ofd_seq_count); - } -+LPROC_SEQ_FOPS_RO(ofd_seqs); - --static int lprocfs_ofd_rd_tot_dirty(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_tot_dirty_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = (struct obd_device *)data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd; - - LASSERT(obd != NULL); - ofd = ofd_dev(obd->obd_lu_dev); -- *eof = 1; -- return snprintf(page, count, LPU64"\n", ofd->ofd_tot_dirty); -+ return seq_printf(m, LPU64"\n", ofd->ofd_tot_dirty); - } -+LPROC_SEQ_FOPS_RO(ofd_tot_dirty); - --static int lprocfs_ofd_rd_tot_granted(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_tot_granted_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = (struct obd_device *)data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd; - - LASSERT(obd != NULL); - ofd = ofd_dev(obd->obd_lu_dev); -- *eof = 1; -- return snprintf(page, count, LPU64"\n", ofd->ofd_tot_granted); -+ return seq_printf(m, LPU64"\n", ofd->ofd_tot_granted); - } -+LPROC_SEQ_FOPS_RO(ofd_tot_granted); - --static int lprocfs_ofd_rd_tot_pending(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_tot_pending_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = (struct obd_device *)data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd; - - LASSERT(obd != NULL); - ofd = ofd_dev(obd->obd_lu_dev); -- *eof = 1; -- return snprintf(page, count, LPU64"\n", ofd->ofd_tot_pending); -+ return seq_printf(m, LPU64"\n", ofd->ofd_tot_pending); - } -+LPROC_SEQ_FOPS_RO(ofd_tot_pending); - --static int lprocfs_ofd_rd_grant_precreate(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_grant_precreate_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = (struct obd_device *)data; -+ struct obd_device *obd = m->private; - - LASSERT(obd != NULL); -- *eof = 1; -- return snprintf(page, count, "%ld\n", -- obd->obd_self_export->exp_filter_data.fed_grant); -+ return seq_printf(m, "%ld\n", -+ obd->obd_self_export->exp_filter_data.fed_grant); - } -+LPROC_SEQ_FOPS_RO(ofd_grant_precreate); - --static int lprocfs_ofd_rd_grant_ratio(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_grant_ratio_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = (struct obd_device *)data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd; - - LASSERT(obd != NULL); - ofd = ofd_dev(obd->obd_lu_dev); -- *eof = 1; -- return snprintf(page, count, "%d%%\n", -- (int) ofd_grant_reserved(ofd, 100)); -+ return seq_printf(m, "%d%%\n", -+ (int) ofd_grant_reserved(ofd, 100)); - } - --static int lprocfs_ofd_wr_grant_ratio(struct file *file, -- const char __user *buffer, -- unsigned long count, void *data) -+static ssize_t -+ofd_grant_ratio_seq_write(struct file *file, const char __user *buffer, -+ size_t count, loff_t *off) - { -- struct obd_device *obd = (struct obd_device *)data; -+ struct seq_file *m = file->private_data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - int val; - int rc; -@@ -145,24 +139,24 @@ static int lprocfs_ofd_wr_grant_ratio(struct file *file, - spin_unlock(&ofd->ofd_grant_lock); - return count; - } -+LPROC_SEQ_FOPS(ofd_grant_ratio); - --static int lprocfs_ofd_rd_precreate_batch(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_precreate_batch_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = (struct obd_device *)data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd; - - LASSERT(obd != NULL); - ofd = ofd_dev(obd->obd_lu_dev); -- *eof = 1; -- return snprintf(page, count, "%d\n", ofd->ofd_precreate_batch); -+ return seq_printf(m, "%d\n", ofd->ofd_precreate_batch); - } - --static int lprocfs_ofd_wr_precreate_batch(struct file *file, -- const char __user *buffer, -- unsigned long count, void *data) -+static ssize_t -+ofd_precreate_batch_seq_write(struct file *file, const char __user *buffer, -+ size_t count, loff_t *off) - { -- struct obd_device *obd = (struct obd_device *)data; -+ struct seq_file *m = file->private_data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - int val; - int rc; -@@ -179,11 +173,11 @@ static int lprocfs_ofd_wr_precreate_batch(struct file *file, - spin_unlock(&ofd->ofd_batch_lock); - return count; - } -+LPROC_SEQ_FOPS(ofd_precreate_batch); - --static int lprocfs_ofd_rd_last_id(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_last_id_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd; - struct ofd_seq *oseq = NULL; - int retval = 0, rc; -@@ -201,35 +195,32 @@ static int lprocfs_ofd_rd_last_id(char *page, char **start, off_t off, - fid_idif_seq(ostid_id(&oseq->os_oi), - ofd->ofd_lut.lut_lsd.lsd_osd_index) : - ostid_seq(&oseq->os_oi); -- rc = snprintf(page, count, DOSTID"\n", seq, -- ostid_id(&oseq->os_oi)); -+ rc = seq_printf(m, DOSTID"\n", seq, ostid_id(&oseq->os_oi)); - if (rc < 0) { - retval = rc; - break; - } -- page += rc; -- count -= rc; - retval += rc; - } - read_unlock(&ofd->ofd_seq_list_lock); - return retval; - } -+LPROC_SEQ_FOPS_RO(ofd_last_id); - --int lprocfs_ofd_rd_fmd_max_num(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_fmd_max_num_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = data; -- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); -- int rc; -+ struct obd_device *obd = m->private; -+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - -- rc = snprintf(page, count, "%u\n", ofd->ofd_fmd_max_num); -- return rc; -+ return seq_printf(m, "%u\n", ofd->ofd_fmd_max_num); - } - --int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char __user *buffer, -- unsigned long count, void *data) -+static ssize_t -+ofd_fmd_max_num_seq_write(struct file *file, const char __user *buffer, -+ size_t count, loff_t *off) - { -- struct obd_device *obd = data; -+ struct seq_file *m = file->private_data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - int val; - int rc; -@@ -244,22 +235,22 @@ int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char __user *buffer, - ofd->ofd_fmd_max_num = val; - return count; - } -+LPROC_SEQ_FOPS(ofd_fmd_max_num); - --int lprocfs_ofd_rd_fmd_max_age(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_fmd_max_age_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = data; -- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); -- int rc; -+ struct obd_device *obd = m->private; -+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - -- rc = snprintf(page, count, "%ld\n", ofd->ofd_fmd_max_age / HZ); -- return rc; -+ return seq_printf(m, "%ld\n", ofd->ofd_fmd_max_age / HZ); - } - --int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char __user *buffer, -- unsigned long count, void *data) -+static ssize_t -+ofd_fmd_max_age_seq_write(struct file *file, const char __user *buffer, -+ size_t count, loff_t *off) - { -- struct obd_device *obd = data; -+ struct seq_file *m = file->private_data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - int val; - int rc; -@@ -274,22 +265,22 @@ int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char __user *buffer, - ofd->ofd_fmd_max_age = val * HZ; - return count; - } -+LPROC_SEQ_FOPS(ofd_fmd_max_age); - --static int lprocfs_ofd_rd_capa(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_capa_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = data; -- int rc; -+ struct obd_device *obd = m->private; - -- rc = snprintf(page, count, "capability on: %s\n", -- obd->u.filter.fo_fl_oss_capa ? "oss" : ""); -- return rc; -+ return seq_printf(m, "capability on: %s\n", -+ obd->u.filter.fo_fl_oss_capa ? "oss" : ""); - } - --static int lprocfs_ofd_wr_capa(struct file *file, const char __user *buffer, -- unsigned long count, void *data) -+static ssize_t -+ofd_capa_seq_write(struct file *file, const char *__user buffer, size_t count, -+ loff_t *off) - { -- struct obd_device *obd = data; -+ struct seq_file *m = file->private_data; -+ struct obd_device *obd = m->private; - int val, rc; - - rc = lprocfs_write_helper(buffer, count, &val); -@@ -308,28 +299,29 @@ static int lprocfs_ofd_wr_capa(struct file *file, const char __user *buffer, - val ? "enabled" : "disabled"); - return count; - } -+LPROC_SEQ_FOPS(ofd_capa); - --static int lprocfs_ofd_rd_capa_count(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_capa_count_seq_show(struct seq_file *m, void *data) - { -- return snprintf(page, count, "%d %d\n", -- capa_count[CAPA_SITE_CLIENT], -- capa_count[CAPA_SITE_SERVER]); -+ return seq_printf(m, "%d %d\n", capa_count[CAPA_SITE_CLIENT], -+ capa_count[CAPA_SITE_SERVER]); - } -+LPROC_SEQ_FOPS_RO(ofd_capa_count); - --int lprocfs_ofd_rd_degraded(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_degraded_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - -- return snprintf(page, count, "%u\n", ofd->ofd_raid_degraded); -+ return seq_printf(m, "%u\n", ofd->ofd_raid_degraded); - } - --int lprocfs_ofd_wr_degraded(struct file *file, const char __user *buffer, -- unsigned long count, void *data) -+static ssize_t -+ofd_degraded_seq_write(struct file *file, const char __user *buffer, -+ size_t count, loff_t *off) - { -- struct obd_device *obd = data; -+ struct seq_file *m = file->private_data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - int val, rc; - -@@ -340,38 +332,37 @@ int lprocfs_ofd_wr_degraded(struct file *file, const char __user *buffer, - spin_lock(&ofd->ofd_flags_lock); - ofd->ofd_raid_degraded = !!val; - spin_unlock(&ofd->ofd_flags_lock); -- - return count; - } -+LPROC_SEQ_FOPS(ofd_degraded); - --int lprocfs_ofd_rd_fstype(char *page, char **start, off_t off, int count, -- int *eof, void *data) -+static int ofd_fstype_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - struct lu_device *d; - - LASSERT(ofd->ofd_osd); - d = &ofd->ofd_osd->dd_lu_dev; - LASSERT(d->ld_type); -- return snprintf(page, count, "%s\n", d->ld_type->ldt_name); -+ return seq_printf(m, "%s\n", d->ld_type->ldt_name); - } -+LPROC_SEQ_FOPS_RO(ofd_fstype); - --int lprocfs_ofd_rd_syncjournal(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_syncjournal_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); -- int rc; - -- rc = snprintf(page, count, "%u\n", ofd->ofd_syncjournal); -- return rc; -+ return seq_printf(m, "%u\n", ofd->ofd_syncjournal); - } - --int lprocfs_ofd_wr_syncjournal(struct file *file, const char __user *buffer, -- unsigned long count, void *data) -+static ssize_t -+ofd_syncjournal_seq_write(struct file *file, const char __user *buffer, -+ size_t count, loff_t *off) - { -- struct obd_device *obd = data; -+ struct seq_file *m = file->private_data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - int val; - int rc; -@@ -390,6 +381,7 @@ int lprocfs_ofd_wr_syncjournal(struct file *file, const char __user *buffer, - - return count; - } -+LPROC_SEQ_FOPS(ofd_syncjournal); - - /* This must be longer than the longest string below */ - #define SYNC_STATES_MAXLEN 16 -@@ -397,23 +389,21 @@ static char *sync_on_cancel_states[] = {"never", - "blocking", - "always" }; - --int lprocfs_ofd_rd_sync_lock_cancel(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_sync_lock_cancel_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = data; -+ struct obd_device *obd = m->private; - struct lu_target *tgt = obd->u.obt.obt_lut; -- int rc; - -- rc = snprintf(page, count, "%s\n", -- sync_on_cancel_states[tgt->lut_sync_lock_cancel]); -- return rc; -+ return seq_printf(m, "%s\n", -+ sync_on_cancel_states[tgt->lut_sync_lock_cancel]); - } - --int lprocfs_ofd_wr_sync_lock_cancel(struct file *file, -- const char __user *buffer, -- unsigned long count, void *data) -+static ssize_t -+ofd_sync_lock_cancel_seq_write(struct file *file, const char __user *buffer, -+ size_t count, loff_t *off) - { -- struct obd_device *obd = data; -+ struct seq_file *m = file->private_data; -+ struct obd_device *obd = m->private; - struct lu_target *tgt = obd->u.obt.obt_lut; - char kernbuf[SYNC_STATES_MAXLEN]; - int val = -1; -@@ -455,23 +445,23 @@ int lprocfs_ofd_wr_sync_lock_cancel(struct file *file, - spin_unlock(&tgt->lut_flags_lock); - return count; - } -+LPROC_SEQ_FOPS(ofd_sync_lock_cancel); - --int lprocfs_ofd_rd_grant_compat_disable(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_grant_compat_disable_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = data; -- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); -- int rc; -+ struct obd_device *obd = m->private; -+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - -- rc = snprintf(page, count, "%u\n", ofd->ofd_grant_compat_disable); -- return rc; -+ return seq_printf(m, "%u\n", ofd->ofd_grant_compat_disable); - } - --int lprocfs_ofd_wr_grant_compat_disable(struct file *file, -- const char __user *buffer, -- unsigned long count, void *data) -+static ssize_t -+ofd_grant_compat_disable_seq_write(struct file *file, -+ const char __user *buffer, -+ size_t count, loff_t *off) - { -- struct obd_device *obd = data; -+ struct seq_file *m = file->private_data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - int val; - int rc; -@@ -489,42 +479,43 @@ int lprocfs_ofd_wr_grant_compat_disable(struct file *file, - - return count; - } -+LPROC_SEQ_FOPS(ofd_grant_compat_disable); - --int lprocfs_ofd_rd_soft_sync_limit(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_soft_sync_limit_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - -- return lprocfs_rd_uint(page, start, off, count, eof, -- &ofd->ofd_soft_sync_limit); -+ return lprocfs_uint_seq_show(m, &ofd->ofd_soft_sync_limit); - } - --int lprocfs_ofd_wr_soft_sync_limit(struct file *file, const char __user *buffer, -- unsigned long count, void *data) -+static ssize_t -+ofd_soft_sync_limit_seq_write(struct file *file, const char __user *buffer, -+ size_t count, loff_t *off) - { -- struct obd_device *obd = data; -- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); -+ struct seq_file *m = file->private_data; -+ struct obd_device *obd = m->private; -+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - -- return lprocfs_wr_uint(file, buffer, count, &ofd->ofd_soft_sync_limit); -+ return lprocfs_uint_seq_write(file, buffer, count, -+ (loff_t *) &ofd->ofd_soft_sync_limit); - } -+LPROC_SEQ_FOPS(ofd_soft_sync_limit); - --static int lprocfs_rd_lfsck_speed_limit(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_lfsck_speed_limit_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - -- *eof = 1; -- -- return lfsck_get_speed(ofd->ofd_osd, page, count); -+ return lfsck_get_speed(m, ofd->ofd_osd); - } - --static int lprocfs_wr_lfsck_speed_limit(struct file *file, -- const char __user *buffer, -- unsigned long count, void *data) -+static ssize_t -+ofd_lfsck_speed_limit_seq_write(struct file *file, const char __user *buffer, -+ size_t count, loff_t *off) - { -- struct obd_device *obd = data; -+ struct seq_file *m = file->private_data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - __u32 val; - int rc; -@@ -537,38 +528,35 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file, - - return rc != 0 ? rc : count; - } -+LPROC_SEQ_FOPS(ofd_lfsck_speed_limit); - --static int lprocfs_rd_lfsck_layout(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_lfsck_layout_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = data; -- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); -- -- *eof = 1; -+ struct obd_device *obd = m->private; -+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - -- return lfsck_dump(ofd->ofd_osd, page, count, LT_LAYOUT); -+ return lfsck_dump(m, ofd->ofd_osd, LT_LAYOUT); - } -+LPROC_SEQ_FOPS_RO(ofd_lfsck_layout); - --static int lprocfs_rd_lfsck_verify_pfid(char *page, char **start, off_t off, -- int count, int *eof, void *data) -+static int ofd_lfsck_verify_pfid_seq_show(struct seq_file *m, void *data) - { -- struct obd_device *obd = data; -- struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); -- -- *eof = 1; -+ struct obd_device *obd = m->private; -+ struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - -- return snprintf(page, count, -- "switch: %s\ndetected: "LPU64"\nrepaired: "LPU64"\n", -- ofd->ofd_lfsck_verify_pfid ? "on" : "off", -- ofd->ofd_inconsistency_self_detected, -- ofd->ofd_inconsistency_self_repaired); -+ return seq_printf(m, -+ "switch: %s\ndetected: "LPU64"\nrepaired: "LPU64"\n", -+ ofd->ofd_lfsck_verify_pfid ? "on" : "off", -+ ofd->ofd_inconsistency_self_detected, -+ ofd->ofd_inconsistency_self_repaired); - } - --static int lprocfs_wr_lfsck_verify_pfid(struct file *file, -- const char __user *buffer, -- unsigned long count, void *data) -+static ssize_t -+ofd_lfsck_verify_pfid_seq_write(struct file *file, const char __user *buffer, -+ size_t count, loff_t *off) - { -- struct obd_device *obd = data; -+ struct seq_file *m = file->private_data; -+ struct obd_device *obd = m->private; - struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - __u32 val; - int rc; -@@ -581,75 +569,101 @@ static int lprocfs_wr_lfsck_verify_pfid(struct file *file, - - return count; - } -- --static struct lprocfs_vars lprocfs_ofd_obd_vars[] = { -- { "uuid", lprocfs_rd_uuid, 0, 0 }, -- { "blocksize", lprocfs_rd_blksize, 0, 0 }, -- { "kbytestotal", lprocfs_rd_kbytestotal, 0, 0 }, -- { "kbytesfree", lprocfs_rd_kbytesfree, 0, 0 }, -- { "kbytesavail", lprocfs_rd_kbytesavail, 0, 0 }, -- { "filestotal", lprocfs_rd_filestotal, 0, 0 }, -- { "filesfree", lprocfs_rd_filesfree, 0, 0 }, -- { "seqs_allocated", lprocfs_ofd_rd_seqs, 0, 0 }, -- { "fstype", lprocfs_ofd_rd_fstype, 0, 0 }, -- { "last_id", lprocfs_ofd_rd_last_id, 0, 0 }, -- { "tot_dirty", lprocfs_ofd_rd_tot_dirty, 0, 0 }, -- { "tot_pending", lprocfs_ofd_rd_tot_pending, 0, 0 }, -- { "tot_granted", lprocfs_ofd_rd_tot_granted, 0, 0 }, -- { "grant_precreate", lprocfs_ofd_rd_grant_precreate, 0, 0 }, -- { "grant_ratio", lprocfs_ofd_rd_grant_ratio, -- lprocfs_ofd_wr_grant_ratio, 0, 0 }, -- { "precreate_batch", lprocfs_ofd_rd_precreate_batch, -- lprocfs_ofd_wr_precreate_batch, 0 }, -- { "recovery_status", lprocfs_obd_rd_recovery_status, 0, 0 }, -- { "recovery_time_soft", lprocfs_obd_rd_recovery_time_soft, -- lprocfs_obd_wr_recovery_time_soft, 0}, -- { "recovery_time_hard", lprocfs_obd_rd_recovery_time_hard, -- lprocfs_obd_wr_recovery_time_hard, 0}, -- { "evict_client", 0, lprocfs_wr_evict_client, 0, -- &lprocfs_evict_client_fops}, -- { "num_exports", lprocfs_rd_num_exports, 0, 0 }, -- { "degraded", lprocfs_ofd_rd_degraded, -- lprocfs_ofd_wr_degraded, 0}, -- { "sync_journal", lprocfs_ofd_rd_syncjournal, -- lprocfs_ofd_wr_syncjournal, 0 }, -- { "sync_on_lock_cancel", lprocfs_ofd_rd_sync_lock_cancel, -- lprocfs_ofd_wr_sync_lock_cancel, 0 }, -- { "instance", lprocfs_target_rd_instance, 0 }, -- { "ir_factor", lprocfs_obd_rd_ir_factor, -- lprocfs_obd_wr_ir_factor, 0}, -- { "grant_compat_disable", lprocfs_ofd_rd_grant_compat_disable, -- lprocfs_ofd_wr_grant_compat_disable, 0 }, -- { "client_cache_count", lprocfs_ofd_rd_fmd_max_num, -- lprocfs_ofd_wr_fmd_max_num, 0 }, -- { "client_cache_seconds", lprocfs_ofd_rd_fmd_max_age, -- lprocfs_ofd_wr_fmd_max_age, 0 }, -- { "capa", lprocfs_ofd_rd_capa, -- lprocfs_ofd_wr_capa, 0 }, -- { "capa_count", lprocfs_ofd_rd_capa_count, 0, 0 }, -- { "job_cleanup_interval", lprocfs_rd_job_interval, -- lprocfs_wr_job_interval, 0}, -- { "soft_sync_limit", lprocfs_ofd_rd_soft_sync_limit, -- lprocfs_ofd_wr_soft_sync_limit, 0}, -- { "lfsck_speed_limit", lprocfs_rd_lfsck_speed_limit, -- lprocfs_wr_lfsck_speed_limit, 0 }, -- { "lfsck_layout", lprocfs_rd_lfsck_layout, 0, 0 }, -- { "lfsck_verify_pfid", lprocfs_rd_lfsck_verify_pfid, -- lprocfs_wr_lfsck_verify_pfid, 0 }, -- { 0 } --}; -- --static struct lprocfs_vars lprocfs_ofd_module_vars[] = { -- { "num_refs", lprocfs_rd_numrefs, 0, 0 }, -+LPROC_SEQ_FOPS(ofd_lfsck_verify_pfid); -+ -+LPROC_SEQ_FOPS_RO_TYPE(ofd, uuid); -+LPROC_SEQ_FOPS_RO_TYPE(ofd, blksize); -+LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytestotal); -+LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytesfree); -+LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytesavail); -+LPROC_SEQ_FOPS_RO_TYPE(ofd, filestotal); -+LPROC_SEQ_FOPS_RO_TYPE(ofd, filesfree); -+ -+LPROC_SEQ_FOPS_RO_TYPE(ofd, recovery_status); -+LPROC_SEQ_FOPS_RW_TYPE(ofd, recovery_time_soft); -+LPROC_SEQ_FOPS_RW_TYPE(ofd, recovery_time_hard); -+LPROC_SEQ_FOPS_WO_TYPE(ofd, evict_client); -+LPROC_SEQ_FOPS_RO_TYPE(ofd, num_exports); -+LPROC_SEQ_FOPS_RO_TYPE(ofd, target_instance); -+LPROC_SEQ_FOPS_RW_TYPE(ofd, ir_factor); -+LPROC_SEQ_FOPS_RW_TYPE(ofd, job_interval); -+ -+struct lprocfs_seq_vars lprocfs_ofd_obd_vars[] = { -+ { .name = "uuid", -+ .fops = &ofd_uuid_fops }, -+ { .name = "blocksize", -+ .fops = &ofd_blksize_fops }, -+ { .name = "kbytestotal", -+ .fops = &ofd_kbytestotal_fops }, -+ { .name = "kbytesfree", -+ .fops = &ofd_kbytesfree_fops }, -+ { .name = "kbytesavail", -+ .fops = &ofd_kbytesavail_fops }, -+ { .name = "filestotal", -+ .fops = &ofd_filestotal_fops }, -+ { .name = "filesfree", -+ .fops = &ofd_filesfree_fops }, -+ { .name = "seqs_allocated", -+ .fops = &ofd_seqs_fops }, -+ { .name = "fstype", -+ .fops = &ofd_fstype_fops }, -+ { .name = "last_id", -+ .fops = &ofd_last_id_fops }, -+ { .name = "tot_dirty", -+ .fops = &ofd_tot_dirty_fops }, -+ { .name = "tot_pending", -+ .fops = &ofd_tot_pending_fops }, -+ { .name = "tot_granted", -+ .fops = &ofd_tot_granted_fops }, -+ { .name = "grant_precreate", -+ .fops = &ofd_grant_precreate_fops }, -+ { .name = "grant_ratio", -+ .fops = &ofd_grant_ratio_fops }, -+ { .name = "precreate_batch", -+ .fops = &ofd_precreate_batch_fops }, -+ { .name = "recovery_status", -+ .fops = &ofd_recovery_status_fops }, -+ { .name = "recovery_time_soft", -+ .fops = &ofd_recovery_time_soft_fops }, -+ { .name = "recovery_time_hard", -+ .fops = &ofd_recovery_time_hard_fops }, -+ { .name = "evict_client", -+ .fops = &ofd_evict_client_fops }, -+ { .name = "num_exports", -+ .fops = &ofd_num_exports_fops }, -+ { .name = "degraded", -+ .fops = &ofd_degraded_fops }, -+ { .name = "sync_journal", -+ .fops = &ofd_syncjournal_fops }, -+ { .name = "sync_on_lock_cancel", -+ .fops = &ofd_sync_lock_cancel_fops }, -+ { .name = "instance", -+ .fops = &ofd_target_instance_fops }, -+ { .name = "ir_factor", -+ .fops = &ofd_ir_factor_fops }, -+ { .name = "grant_compat_disable", -+ .fops = &ofd_grant_compat_disable_fops }, -+ { .name = "client_cache_count", -+ .fops = &ofd_fmd_max_num_fops }, -+ { .name = "client_cache_seconds", -+ .fops = &ofd_fmd_max_age_fops }, -+ { .name = "capa", -+ .fops = &ofd_capa_fops }, -+ { .name = "capa_count", -+ .fops = &ofd_capa_count_fops }, -+ { .name = "job_cleanup_interval", -+ .fops = &ofd_job_interval_fops }, -+ { .name = "soft_sync_limit", -+ .fops = &ofd_soft_sync_limit_fops }, -+ { .name = "lfsck_speed_limit", -+ .fops = &ofd_lfsck_speed_limit_fops }, -+ { .name = "lfsck_layout", -+ .fops = &ofd_lfsck_layout_fops }, -+ { .name = "lfsck_verify_pfid", -+ .fops = &ofd_lfsck_verify_pfid_fops }, - { 0 } - }; - --void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars) --{ -- lvars->module_vars = lprocfs_ofd_module_vars; -- lvars->obd_vars = lprocfs_ofd_obd_vars; --} -- - void ofd_stats_counter_init(struct lprocfs_stats *stats) - { - LASSERT(stats && stats->ls_num >= LPROC_OFD_STATS_LAST); -diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c -index 0f0d51a..6172913 100644 ---- a/lustre/ofd/ofd_dev.c -+++ b/lustre/ofd/ofd_dev.c -@@ -239,8 +239,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d, - - switch (cfg->lcfg_command) { - case LCFG_PARAM: { -- struct lprocfs_static_vars lvars; -- -+ struct obd_device *obd = ofd_obd(m); - /* For interoperability */ - struct cfg_interop_param *ptr = NULL; - struct lustre_cfg *old_cfg = NULL; -@@ -278,8 +277,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d, - break; - } - -- lprocfs_ofd_init_vars(&lvars); -- rc = class_process_proc_param(PARAM_OST, lvars.obd_vars, cfg, -+ rc = class_process_proc_seq_param(PARAM_OST, obd->obd_vars, cfg, - d->ld_obd); - if (rc > 0 || rc == -ENOSYS) { - CDEBUG(D_CONFIG, "pass param %s down the stack.\n", -@@ -485,9 +483,10 @@ static struct lu_device_operations ofd_lu_ops = { - .ldo_prepare = ofd_prepare, - }; - -+LPROC_SEQ_FOPS(lprocfs_nid_stats_clear); -+ - static int ofd_procfs_init(struct ofd_device *ofd) - { -- struct lprocfs_static_vars lvars; - struct obd_device *obd = ofd_obd(ofd); - cfs_proc_dir_entry_t *entry; - int rc = 0; -@@ -496,8 +495,8 @@ static int ofd_procfs_init(struct ofd_device *ofd) - - /* lprocfs must be setup before the ofd so state can be safely added - * to /proc incrementally as the ofd is setup */ -- lprocfs_ofd_init_vars(&lvars); -- rc = lprocfs_obd_setup(obd, lvars.obd_vars); -+ obd->obd_vars = lprocfs_ofd_obd_vars; -+ rc = lprocfs_seq_obd_setup(obd); - if (rc) { - CERROR("%s: lprocfs_obd_setup failed: %d.\n", - obd->obd_name, rc); -@@ -513,7 +512,8 @@ static int ofd_procfs_init(struct ofd_device *ofd) - - obd->obd_uses_nid_stats = 1; - -- entry = lprocfs_register("exports", obd->obd_proc_entry, NULL, NULL); -+ entry = lprocfs_seq_register("exports", obd->obd_proc_entry, NULL, -+ NULL); - if (IS_ERR(entry)) { - rc = PTR_ERR(entry); - CERROR("%s: error %d setting up lprocfs for %s\n", -@@ -523,8 +523,10 @@ static int ofd_procfs_init(struct ofd_device *ofd) - obd->obd_proc_exports_entry = entry; - - entry = lprocfs_add_simple(obd->obd_proc_exports_entry, "clear", -- lprocfs_nid_stats_clear_read, -- lprocfs_nid_stats_clear_write, obd, NULL); -+#ifndef HAVE_ONLY_PROCFS_SEQ -+ NULL, NULL, -+#endif -+ obd, &lprocfs_nid_stats_clear_fops); - if (IS_ERR(entry)) { - rc = PTR_ERR(entry); - CERROR("%s: add proc entry 'clear' failed: %d.\n", -@@ -540,7 +542,7 @@ static int ofd_procfs_init(struct ofd_device *ofd) - GOTO(remove_entry_clear, rc); - RETURN(0); - remove_entry_clear: -- lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry); -+ lprocfs_remove(&obd->obd_proc_exports_entry); - obd_cleanup: - lprocfs_obd_cleanup(obd); - lprocfs_free_obd_stats(obd); -@@ -548,51 +550,48 @@ obd_cleanup: - return rc; - } - -+/** -+ * ofd_procfs_add_brw_stats_symlink - expose osd stats to ofd layer -+ * -+ * The osd interfaces to the backend file system exposes useful data -+ * such as brw_stats and read or write cache states. This same data -+ * needs to be exposed into the obdfilter (ofd) layer to maintain -+ * backwards compatibility. This function creates the symlinks in the -+ * proc layer to enable this. -+ */ - static void ofd_procfs_add_brw_stats_symlink(struct ofd_device *ofd) - { - struct obd_device *obd = ofd_obd(ofd); - struct obd_device *osd_obd = ofd->ofd_osd_exp->exp_obd; -- cfs_proc_dir_entry_t *osd_root = osd_obd->obd_type->typ_procroot; -- cfs_proc_dir_entry_t *osd_dir; - -- osd_dir = lprocfs_srch(osd_root, obd->obd_name); -- if (osd_dir == NULL) -+ if (obd->obd_proc_entry == NULL) - return; - -- if (lprocfs_srch(osd_dir, "brw_stats") != NULL) -- lprocfs_add_symlink("brw_stats", obd->obd_proc_entry, -- "../../%s/%s/brw_stats", -- osd_root->name, osd_dir->name); -- -- if (lprocfs_srch(osd_dir, "read_cache_enable") != NULL) -- lprocfs_add_symlink("read_cache_enable", obd->obd_proc_entry, -- "../../%s/%s/read_cache_enable", -- osd_root->name, osd_dir->name); -- -- if (lprocfs_srch(osd_dir, "readcache_max_filesize") != NULL) -- lprocfs_add_symlink("readcache_max_filesize", -- obd->obd_proc_entry, -- "../../%s/%s/readcache_max_filesize", -- osd_root->name, osd_dir->name); -- -- if (lprocfs_srch(osd_dir, "writethrough_cache_enable") != NULL) -- lprocfs_add_symlink("writethrough_cache_enable", -- obd->obd_proc_entry, -- "../../%s/%s/writethrough_cache_enable", -- osd_root->name, osd_dir->name); -+ lprocfs_add_symlink("brw_stats", obd->obd_proc_entry, -+ "../../%s/%s/brw_stats", -+ osd_obd->obd_type->typ_name, obd->obd_name); -+ -+ lprocfs_add_symlink("read_cache_enable", obd->obd_proc_entry, -+ "../../%s/%s/read_cache_enable", -+ osd_obd->obd_type->typ_name, obd->obd_name); -+ -+ lprocfs_add_symlink("readcache_max_filesize", -+ obd->obd_proc_entry, -+ "../../%s/%s/readcache_max_filesize", -+ osd_obd->obd_type->typ_name, obd->obd_name); -+ -+ lprocfs_add_symlink("writethrough_cache_enable", -+ obd->obd_proc_entry, -+ "../../%s/%s/writethrough_cache_enable", -+ osd_obd->obd_type->typ_name, obd->obd_name); - } - - static void ofd_procfs_fini(struct ofd_device *ofd) - { - struct obd_device *obd = ofd_obd(ofd); - -- lprocfs_remove_proc_entry("writethrough_cache_enable", -- obd->obd_proc_entry); -- lprocfs_remove_proc_entry("readcache_max_filesize", -- obd->obd_proc_entry); -- lprocfs_remove_proc_entry("read_cache_enable", obd->obd_proc_entry); -- lprocfs_remove_proc_entry("brw_stats", obd->obd_proc_entry); -- lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry); -+ lprocfs_remove(&obd->obd_proc_exports_entry); -+ lprocfs_remove(&obd->obd_proc_entry); - lprocfs_free_per_client_stats(obd); - lprocfs_obd_cleanup(obd); - lprocfs_free_obd_stats(obd); -@@ -2377,7 +2376,6 @@ static struct lu_device_type ofd_device_type = { - - int __init ofd_init(void) - { -- struct lprocfs_static_vars lvars; - int rc; - - rc = lu_kmem_init(ofd_caches); -@@ -2390,11 +2388,9 @@ int __init ofd_init(void) - return(rc); - } - -- lprocfs_ofd_init_vars(&lvars); -- - rc = class_register_type(&ofd_obd_ops, NULL, true, NULL, - #ifndef HAVE_ONLY_PROCFS_SEQ -- lvars.module_vars, -+ NULL, - #endif - LUSTRE_OST_NAME, &ofd_device_type); - return rc; -diff --git a/lustre/ofd/ofd_internal.h b/lustre/ofd/ofd_internal.h -index 4f12506..2e75de5 100644 ---- a/lustre/ofd/ofd_internal.h -+++ b/lustre/ofd/ofd_internal.h -@@ -403,13 +403,9 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn, - - /* lproc_ofd.c */ - #ifdef LPROCFS --void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars); -+extern struct lprocfs_seq_vars lprocfs_ofd_obd_vars[]; - void ofd_stats_counter_init(struct lprocfs_stats *stats); - #else --static void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars) --{ -- memset(lvars, 0, sizeof(*lvars)); --} - static inline void ofd_stats_counter_init(struct lprocfs_stats *stats) {} - #endif - --- -1.9.3 - diff --git a/patches/07_doxygen.patch b/patches/07_doxygen.patch deleted file mode 100644 index 6df24ea2e..000000000 --- a/patches/07_doxygen.patch +++ /dev/null @@ -1,1804 +0,0 @@ -Index: dcmtk-3.6.0/doxygen/htmldocs.cfg -=================================================================== ---- dcmtk-3.6.0.orig/doxygen/htmldocs.cfg 2011-11-23 15:49:41.000000000 +0100 -+++ dcmtk-3.6.0/doxygen/htmldocs.cfg 2011-11-23 15:50:00.000000000 +0100 -@@ -1,4 +1,4 @@ --# Doxyfile 1.5.1 -+# Doxyfile 1.7.1 - - # This file describes the settings to be used by the documentation system - # doxygen (www.doxygen.org) for a project -@@ -14,438 +14,560 @@ - # Project related configuration options - #--------------------------------------------------------------------------- - --# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -+# This tag specifies the encoding used for all characters in the config file -+# that follow. The default is UTF-8 which is also the encoding used for all -+# text before the first occurrence of this tag. Doxygen uses libiconv (or the -+# iconv built into libc) for the transcoding. See -+# http://www.gnu.org/software/libiconv for the list of possible encodings. -+ -+DOXYFILE_ENCODING = UTF-8 -+ -+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded - # by quotes) that should identify the project. - - PROJECT_NAME = "OFFIS DCMTK" - --# The PROJECT_NUMBER tag can be used to enter a project or revision number. --# This could be handy for archiving the generated documentation or -+# The PROJECT_NUMBER tag can be used to enter a project or revision number. -+# This could be handy for archiving the generated documentation or - # if some version control system is used. - - PROJECT_NUMBER = "Version @DCMTK_VERSION@" - --# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) --# base path where the generated documentation will be put. --# If a relative path is entered, it will be relative to the location -+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -+# base path where the generated documentation will be put. -+# If a relative path is entered, it will be relative to the location - # where doxygen was started. If left blank the current directory will be used. - --OUTPUT_DIRECTORY = -+OUTPUT_DIRECTORY = - --# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create --# 4096 sub-directories (in 2 levels) under the output directory of each output --# format and will distribute the generated files over these directories. --# Enabling this option can be useful when feeding doxygen a huge amount of --# source files, where putting all generated files in the same directory would -+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -+# 4096 sub-directories (in 2 levels) under the output directory of each output -+# format and will distribute the generated files over these directories. -+# Enabling this option can be useful when feeding doxygen a huge amount of -+# source files, where putting all generated files in the same directory would - # otherwise cause performance problems for the file system. - - CREATE_SUBDIRS = NO - --# The OUTPUT_LANGUAGE tag is used to specify the language in which all --# documentation generated by doxygen is written. Doxygen will use this --# information to generate all constant output in the proper language. --# The default language is English, other supported languages are: --# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, --# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, --# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, --# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, --# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. -+# The OUTPUT_LANGUAGE tag is used to specify the language in which all -+# documentation generated by doxygen is written. Doxygen will use this -+# information to generate all constant output in the proper language. -+# The default language is English, other supported languages are: -+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, -+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - - OUTPUT_LANGUAGE = English - --# This tag can be used to specify the encoding used in the generated output. --# The encoding is not always determined by the language that is chosen, --# but also whether or not the output is meant for Windows or non-Windows users. --# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES --# forces the Windows encoding (this is the default for the Windows binary), --# whereas setting the tag to NO uses a Unix-style encoding (the default for --# all platforms other than Windows). -- --USE_WINDOWS_ENCODING = NO -- --# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will --# include brief member descriptions after the members that are listed in --# the file and class documentation (similar to JavaDoc). -+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -+# include brief member descriptions after the members that are listed in -+# the file and class documentation (similar to JavaDoc). - # Set to NO to disable this. - - BRIEF_MEMBER_DESC = YES - --# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend --# the brief description of a member or function before the detailed description. --# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -+# the brief description of a member or function before the detailed description. -+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the - # brief descriptions will be completely suppressed. - - REPEAT_BRIEF = YES - --# This tag implements a quasi-intelligent brief description abbreviator --# that is used to form the text in various listings. Each string --# in this list, if found as the leading text of the brief description, will be --# stripped from the text and the result after processing the whole list, is --# used as the annotated text. Otherwise, the brief description is used as-is. --# If left blank, the following values are used ("$name" is automatically --# replaced with the name of the entity): "The $name class" "The $name widget" --# "The $name file" "is" "provides" "specifies" "contains" -+# This tag implements a quasi-intelligent brief description abbreviator -+# that is used to form the text in various listings. Each string -+# in this list, if found as the leading text of the brief description, will be -+# stripped from the text and the result after processing the whole list, is -+# used as the annotated text. Otherwise, the brief description is used as-is. -+# If left blank, the following values are used ("$name" is automatically -+# replaced with the name of the entity): "The $name class" "The $name widget" -+# "The $name file" "is" "provides" "specifies" "contains" - # "represents" "a" "an" "the" - --ABBREVIATE_BRIEF = -+ABBREVIATE_BRIEF = - --# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then --# Doxygen will generate a detailed section even if there is only a brief -+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -+# Doxygen will generate a detailed section even if there is only a brief - # description. - - ALWAYS_DETAILED_SEC = NO - --# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all --# inherited members of a class in the documentation of that class as if those --# members were ordinary class members. Constructors, destructors and assignment -+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -+# inherited members of a class in the documentation of that class as if those -+# members were ordinary class members. Constructors, destructors and assignment - # operators of the base classes will not be shown. - - INLINE_INHERITED_MEMB = NO - --# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full --# path before files name in the file list and in the header files. If set -+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -+# path before files name in the file list and in the header files. If set - # to NO the shortest path that makes the file name unique will be used. - - FULL_PATH_NAMES = YES - --# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag --# can be used to strip a user-defined part of the path. Stripping is --# only done if one of the specified strings matches the left-hand part of --# the path. The tag can be used to show relative paths in the file list. --# If left blank the directory from which doxygen is run is used as the -+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -+# can be used to strip a user-defined part of the path. Stripping is -+# only done if one of the specified strings matches the left-hand part of -+# the path. The tag can be used to show relative paths in the file list. -+# If left blank the directory from which doxygen is run is used as the - # path to strip. - - STRIP_FROM_PATH = .. - --# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of --# the path mentioned in the documentation of a class, which tells --# the reader which header file to include in order to use a class. --# If left blank only the name of the header file containing the class --# definition is used. Otherwise one should specify the include paths that -+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -+# the path mentioned in the documentation of a class, which tells -+# the reader which header file to include in order to use a class. -+# If left blank only the name of the header file containing the class -+# definition is used. Otherwise one should specify the include paths that - # are normally passed to the compiler using the -I flag. - --STRIP_FROM_INC_PATH = -+STRIP_FROM_INC_PATH = - --# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter --# (but less readable) file names. This can be useful is your file systems -+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -+# (but less readable) file names. This can be useful is your file systems - # doesn't support long names like on DOS, Mac, or CD-ROM. - - SHORT_NAMES = NO - --# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen --# will interpret the first line (until the first dot) of a JavaDoc-style --# comment as the brief description. If set to NO, the JavaDoc --# comments will behave just like the Qt-style comments (thus requiring an --# explicit @brief command for a brief description. -+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -+# will interpret the first line (until the first dot) of a JavaDoc-style -+# comment as the brief description. If set to NO, the JavaDoc -+# comments will behave just like regular Qt-style comments -+# (thus requiring an explicit @brief command for a brief description.) - - JAVADOC_AUTOBRIEF = YES - --# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen --# treat a multi-line C++ special comment block (i.e. a block of //! or /// --# comments) as a brief description. This used to be the default behaviour. --# The new default is to treat a multi-line C++ comment block as a detailed -+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -+# interpret the first line (until the first dot) of a Qt-style -+# comment as the brief description. If set to NO, the comments -+# will behave just like regular Qt-style comments (thus requiring -+# an explicit \brief command for a brief description.) -+ -+QT_AUTOBRIEF = NO -+ -+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -+# treat a multi-line C++ special comment block (i.e. a block of //! or /// -+# comments) as a brief description. This used to be the default behaviour. -+# The new default is to treat a multi-line C++ comment block as a detailed - # description. Set this tag to YES if you prefer the old behaviour instead. - - MULTILINE_CPP_IS_BRIEF = NO - --# If the DETAILS_AT_TOP tag is set to YES then Doxygen --# will output the detailed description near the top, like JavaDoc. --# If set to NO, the detailed description appears after the member --# documentation. -- --DETAILS_AT_TOP = NO -- --# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented --# member inherits the documentation from any documented member that it -+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -+# member inherits the documentation from any documented member that it - # re-implements. - - INHERIT_DOCS = NO - --# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce --# a new page for each member. If set to NO, the documentation of a member will -+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -+# a new page for each member. If set to NO, the documentation of a member will - # be part of the file/class/namespace that contains it. - - SEPARATE_MEMBER_PAGES = NO - --# The TAB_SIZE tag can be used to set the number of spaces in a tab. -+# The TAB_SIZE tag can be used to set the number of spaces in a tab. - # Doxygen uses this value to replace tabs by spaces in code fragments. - - TAB_SIZE = 4 - --# This tag can be used to specify a number of aliases that acts --# as commands in the documentation. An alias has the form "name=value". --# For example adding "sideeffect=\par Side Effects:\n" will allow you to --# put the command \sideeffect (or @sideeffect) in the documentation, which --# will result in a user-defined paragraph with heading "Side Effects:". -+# This tag can be used to specify a number of aliases that acts -+# as commands in the documentation. An alias has the form "name=value". -+# For example adding "sideeffect=\par Side Effects:\n" will allow you to -+# put the command \sideeffect (or @sideeffect) in the documentation, which -+# will result in a user-defined paragraph with heading "Side Effects:". - # You can put \n's in the value part of an alias to insert newlines. - --ALIASES = -+ALIASES = - --# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C --# sources only. Doxygen will then generate output that is more tailored for C. --# For instance, some of the names that are used will be different. The list -+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -+# sources only. Doxygen will then generate output that is more tailored for C. -+# For instance, some of the names that are used will be different. The list - # of all members will be omitted, etc. - - OPTIMIZE_OUTPUT_FOR_C = NO - --# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java --# sources only. Doxygen will then generate output that is more tailored for Java. --# For instance, namespaces will be presented as packages, qualified scopes --# will look different, etc. -+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -+# sources only. Doxygen will then generate output that is more tailored for -+# Java. For instance, namespaces will be presented as packages, qualified -+# scopes will look different, etc. - - OPTIMIZE_OUTPUT_JAVA = NO - --# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to --# include (a tag file for) the STL sources as input, then you should --# set this tag to YES in order to let doxygen match functions declarations and --# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. --# func(std::string) {}). This also make the inheritance and collaboration -+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -+# sources only. Doxygen will then generate output that is more tailored for -+# Fortran. -+ -+OPTIMIZE_FOR_FORTRAN = NO -+ -+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -+# sources. Doxygen will then generate output that is tailored for -+# VHDL. -+ -+OPTIMIZE_OUTPUT_VHDL = NO -+ -+# Doxygen selects the parser to use depending on the extension of the files it -+# parses. With this tag you can assign which parser to use for a given extension. -+# Doxygen has a built-in mapping, but you can override or extend it using this -+# tag. The format is ext=language, where ext is a file extension, and language -+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, -+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make -+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions -+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. -+ -+EXTENSION_MAPPING = -+ -+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -+# to include (a tag file for) the STL sources as input, then you should -+# set this tag to YES in order to let doxygen match functions declarations and -+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -+# func(std::string) {}). This also make the inheritance and collaboration - # diagrams that involve STL classes more complete and accurate. - - BUILTIN_STL_SUPPORT = NO - --# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC --# tag is set to YES, then doxygen will reuse the documentation of the first --# member in the group (if any) for the other members of the group. By default -+# If you use Microsoft's C++/CLI language, you should set this option to YES to -+# enable parsing support. -+ -+CPP_CLI_SUPPORT = NO -+ -+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -+# Doxygen will parse them like normal C++ but will assume all classes use public -+# instead of private inheritance when no explicit protection keyword is present. -+ -+SIP_SUPPORT = NO -+ -+# For Microsoft's IDL there are propget and propput attributes to indicate getter -+# and setter methods for a property. Setting this option to YES (the default) -+# will make doxygen to replace the get and set methods by a property in the -+# documentation. This will only work if the methods are indeed getting or -+# setting a simple type. If this is not the case, or you want to show the -+# methods anyway, you should set this option to NO. -+ -+IDL_PROPERTY_SUPPORT = YES -+ -+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -+# tag is set to YES, then doxygen will reuse the documentation of the first -+# member in the group (if any) for the other members of the group. By default - # all members of a group must be documented explicitly. - - DISTRIBUTE_GROUP_DOC = NO - --# Set the SUBGROUPING tag to YES (the default) to allow class member groups of --# the same type (for instance a group of public functions) to be put as a --# subgroup of that type (e.g. under the Public Functions section). Set it to --# NO to prevent subgrouping. Alternatively, this can be done per class using -+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -+# the same type (for instance a group of public functions) to be put as a -+# subgroup of that type (e.g. under the Public Functions section). Set it to -+# NO to prevent subgrouping. Alternatively, this can be done per class using - # the \nosubgrouping command. - - SUBGROUPING = YES - -+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -+# is documented as struct, union, or enum with the name of the typedef. So -+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -+# with name TypeT. When disabled the typedef will appear as a member of a file, -+# namespace, or class. And the struct will be named TypeS. This can typically -+# be useful for C code in case the coding convention dictates that all compound -+# types are typedef'ed and only the typedef is referenced, never the tag name. -+ -+TYPEDEF_HIDES_STRUCT = NO -+ -+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -+# determine which symbols to keep in memory and which to flush to disk. -+# When the cache is full, less often used symbols will be written to disk. -+# For small to medium size projects (<1000 input files) the default value is -+# probably good enough. For larger projects a too small cache size can cause -+# doxygen to be busy swapping symbols to and from disk most of the time -+# causing a significant performance penality. -+# If the system has enough physical memory increasing the cache will improve the -+# performance by keeping more symbols in memory. Note that the value works on -+# a logarithmic scale so increasing the size by one will rougly double the -+# memory usage. The cache size is given by this formula: -+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -+# corresponding to a cache size of 2^16 = 65536 symbols -+ -+SYMBOL_CACHE_SIZE = 0 -+ - #--------------------------------------------------------------------------- - # Build related configuration options - #--------------------------------------------------------------------------- - --# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in --# documentation are documented, even if no documentation was available. --# Private class members and static file members will be hidden unless -+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -+# documentation are documented, even if no documentation was available. -+# Private class members and static file members will be hidden unless - # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - - EXTRACT_ALL = NO - --# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class - # will be included in the documentation. - - EXTRACT_PRIVATE = YES - --# If the EXTRACT_STATIC tag is set to YES all static members of a file -+# If the EXTRACT_STATIC tag is set to YES all static members of a file - # will be included in the documentation. - - EXTRACT_STATIC = YES - --# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) --# defined locally in source files will be included in the documentation. -+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -+# defined locally in source files will be included in the documentation. - # If set to NO only classes defined in header files are included. - - EXTRACT_LOCAL_CLASSES = YES - --# This flag is only useful for Objective-C code. When set to YES local --# methods, which are defined in the implementation section but not in --# the interface are included in the documentation. -+# This flag is only useful for Objective-C code. When set to YES local -+# methods, which are defined in the implementation section but not in -+# the interface are included in the documentation. - # If set to NO (the default) only methods in the interface are included. - - EXTRACT_LOCAL_METHODS = NO - --# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all --# undocumented members of documented classes, files or namespaces. --# If set to NO (the default) these members will be included in the --# various overviews, but no documentation section is generated. -+# If this flag is set to YES, the members of anonymous namespaces will be -+# extracted and appear in the documentation as a namespace called -+# 'anonymous_namespace{file}', where file will be replaced with the base -+# name of the file that contains the anonymous namespace. By default -+# anonymous namespace are hidden. -+ -+EXTRACT_ANON_NSPACES = NO -+ -+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -+# undocumented members of documented classes, files or namespaces. -+# If set to NO (the default) these members will be included in the -+# various overviews, but no documentation section is generated. - # This option has no effect if EXTRACT_ALL is enabled. - - HIDE_UNDOC_MEMBERS = NO - --# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all --# undocumented classes that are normally visible in the class hierarchy. --# If set to NO (the default) these classes will be included in the various -+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -+# undocumented classes that are normally visible in the class hierarchy. -+# If set to NO (the default) these classes will be included in the various - # overviews. This option has no effect if EXTRACT_ALL is enabled. - - HIDE_UNDOC_CLASSES = NO - --# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all --# friend (class|struct|union) declarations. --# If set to NO (the default) these declarations will be included in the -+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -+# friend (class|struct|union) declarations. -+# If set to NO (the default) these declarations will be included in the - # documentation. - - HIDE_FRIEND_COMPOUNDS = NO - --# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any --# documentation blocks found inside the body of a function. --# If set to NO (the default) these blocks will be appended to the -+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -+# documentation blocks found inside the body of a function. -+# If set to NO (the default) these blocks will be appended to the - # function's detailed documentation block. - - HIDE_IN_BODY_DOCS = NO - --# The INTERNAL_DOCS tag determines if documentation --# that is typed after a \internal command is included. If the tag is set --# to NO (the default) then the documentation will be excluded. -+# The INTERNAL_DOCS tag determines if documentation -+# that is typed after a \internal command is included. If the tag is set -+# to NO (the default) then the documentation will be excluded. - # Set it to YES to include the internal documentation. - - INTERNAL_DOCS = NO - --# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate --# file names in lower-case letters. If set to YES upper-case letters are also --# allowed. This is useful if you have classes or files whose names only differ --# in case and if your file system supports case sensitive file names. Windows -+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -+# file names in lower-case letters. If set to YES upper-case letters are also -+# allowed. This is useful if you have classes or files whose names only differ -+# in case and if your file system supports case sensitive file names. Windows - # and Mac users are advised to set this option to NO. - - CASE_SENSE_NAMES = YES - --# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen --# will show members with their full class and namespace scopes in the -+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -+# will show members with their full class and namespace scopes in the - # documentation. If set to YES the scope will be hidden. - - HIDE_SCOPE_NAMES = NO - --# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen --# will put a list of the files that are included by a file in the documentation -+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -+# will put a list of the files that are included by a file in the documentation - # of that file. - - SHOW_INCLUDE_FILES = NO - --# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -+# will list include files with double quotes in the documentation -+# rather than with sharp brackets. -+ -+FORCE_LOCAL_INCLUDES = NO -+ -+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] - # is inserted in the documentation for inline members. - - INLINE_INFO = YES - --# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen --# will sort the (detailed) documentation of file and class members --# alphabetically by member name. If set to NO the members will appear in -+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -+# will sort the (detailed) documentation of file and class members -+# alphabetically by member name. If set to NO the members will appear in - # declaration order. - - SORT_MEMBER_DOCS = YES - --# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the --# brief documentation of file, namespace and class members alphabetically --# by member name. If set to NO (the default) the members will appear in -+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -+# brief documentation of file, namespace and class members alphabetically -+# by member name. If set to NO (the default) the members will appear in - # declaration order. - - SORT_BRIEF_DOCS = NO - --# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be --# sorted by fully-qualified names, including namespaces. If set to --# NO (the default), the class list will be sorted only by class name, --# not including the namespace part. -+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -+# will sort the (brief and detailed) documentation of class members so that -+# constructors and destructors are listed first. If set to NO (the default) -+# the constructors will appear in the respective orders defined by -+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. -+ -+SORT_MEMBERS_CTORS_1ST = NO -+ -+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -+# hierarchy of group names into alphabetical order. If set to NO (the default) -+# the group names will appear in their defined order. -+ -+SORT_GROUP_NAMES = NO -+ -+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -+# sorted by fully-qualified names, including namespaces. If set to -+# NO (the default), the class list will be sorted only by class name, -+# not including the namespace part. - # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. --# Note: This option applies only to the class list, not to the -+# Note: This option applies only to the class list, not to the - # alphabetical list. - - SORT_BY_SCOPE_NAME = NO - --# The GENERATE_TODOLIST tag can be used to enable (YES) or --# disable (NO) the todo list. This list is created by putting \todo -+# The GENERATE_TODOLIST tag can be used to enable (YES) or -+# disable (NO) the todo list. This list is created by putting \todo - # commands in the documentation. - - GENERATE_TODOLIST = NO - --# The GENERATE_TESTLIST tag can be used to enable (YES) or --# disable (NO) the test list. This list is created by putting \test -+# The GENERATE_TESTLIST tag can be used to enable (YES) or -+# disable (NO) the test list. This list is created by putting \test - # commands in the documentation. - - GENERATE_TESTLIST = NO - --# The GENERATE_BUGLIST tag can be used to enable (YES) or --# disable (NO) the bug list. This list is created by putting \bug -+# The GENERATE_BUGLIST tag can be used to enable (YES) or -+# disable (NO) the bug list. This list is created by putting \bug - # commands in the documentation. - - GENERATE_BUGLIST = NO - --# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or --# disable (NO) the deprecated list. This list is created by putting -+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -+# disable (NO) the deprecated list. This list is created by putting - # \deprecated commands in the documentation. - - GENERATE_DEPRECATEDLIST= YES - --# The ENABLED_SECTIONS tag can be used to enable conditional -+# The ENABLED_SECTIONS tag can be used to enable conditional - # documentation sections, marked by \if sectionname ... \endif. - --ENABLED_SECTIONS = # MODULE_DCMJP2K MODULE_DCMPPS MODULE_DCMSTCOM MODULE_DCMRT -+ENABLED_SECTIONS = - --# The MAX_INITIALIZER_LINES tag determines the maximum number of lines --# the initial value of a variable or define consists of for it to appear in --# the documentation. If the initializer consists of more lines than specified --# here it will be hidden. Use a value of 0 to hide initializers completely. --# The appearance of the initializer of individual variables and defines in the --# documentation can be controlled using \showinitializer or \hideinitializer -+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -+# the initial value of a variable or define consists of for it to appear in -+# the documentation. If the initializer consists of more lines than specified -+# here it will be hidden. Use a value of 0 to hide initializers completely. -+# The appearance of the initializer of individual variables and defines in the -+# documentation can be controlled using \showinitializer or \hideinitializer - # command in the documentation regardless of this setting. - - MAX_INITIALIZER_LINES = 30 - --# Set the SHOW_USED_FILES tag to NO to disable the list of files generated --# at the bottom of the documentation of classes and structs. If set to YES the -+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -+# at the bottom of the documentation of classes and structs. If set to YES the - # list will mention the files that were used to generate the documentation. - - SHOW_USED_FILES = YES - --# If the sources in your project are distributed over multiple directories --# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -+# If the sources in your project are distributed over multiple directories -+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy - # in the documentation. The default is NO. - - SHOW_DIRECTORIES = NO - --# The FILE_VERSION_FILTER tag can be used to specify a program or script that --# doxygen should invoke to get the current version for each file (typically from the --# version control system). Doxygen will invoke the program by executing (via --# popen()) the command <command> <input-file>, where <command> is the value of --# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file --# provided by doxygen. Whatever the program writes to standard output -+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -+# This will remove the Files entry from the Quick Index and from the -+# Folder Tree View (if specified). The default is YES. -+ -+SHOW_FILES = YES -+ -+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -+# Namespaces page. -+# This will remove the Namespaces entry from the Quick Index -+# and from the Folder Tree View (if specified). The default is YES. -+ -+SHOW_NAMESPACES = YES -+ -+# The FILE_VERSION_FILTER tag can be used to specify a program or script that -+# doxygen should invoke to get the current version for each file (typically from -+# the version control system). Doxygen will invoke the program by executing (via -+# popen()) the command <command> <input-file>, where <command> is the value of -+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file -+# provided by doxygen. Whatever the program writes to standard output - # is used as the file version. See the manual for examples. - --FILE_VERSION_FILTER = -+FILE_VERSION_FILTER = -+ -+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -+# by doxygen. The layout file controls the global structure of the generated -+# output files in an output format independent way. The create the layout file -+# that represents doxygen's defaults, run doxygen with the -l option. -+# You can optionally specify a file name after the option, if omitted -+# DoxygenLayout.xml will be used as the name of the layout file. -+ -+LAYOUT_FILE = - - #--------------------------------------------------------------------------- - # configuration options related to warning and progress messages - #--------------------------------------------------------------------------- - --# The QUIET tag can be used to turn on/off the messages that are generated -+# The QUIET tag can be used to turn on/off the messages that are generated - # by doxygen. Possible values are YES and NO. If left blank NO is used. - - QUIET = NO - --# The WARNINGS tag can be used to turn on/off the warning messages that are --# generated by doxygen. Possible values are YES and NO. If left blank -+# The WARNINGS tag can be used to turn on/off the warning messages that are -+# generated by doxygen. Possible values are YES and NO. If left blank - # NO is used. - - WARNINGS = YES - --# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings --# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will - # automatically be disabled. - - WARN_IF_UNDOCUMENTED = YES - --# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for --# potential errors in the documentation, such as not documenting some --# parameters in a documented function, or documenting parameters that -+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -+# potential errors in the documentation, such as not documenting some -+# parameters in a documented function, or documenting parameters that - # don't exist or using markup commands wrongly. - - WARN_IF_DOC_ERROR = YES - --# This WARN_NO_PARAMDOC option can be abled to get warnings for --# functions that are documented, but have no documentation for their parameters --# or return value. If set to NO (the default) doxygen will only warn about --# wrong or incomplete parameter documentation, but not about the absence of -+# This WARN_NO_PARAMDOC option can be abled to get warnings for -+# functions that are documented, but have no documentation for their parameters -+# or return value. If set to NO (the default) doxygen will only warn about -+# wrong or incomplete parameter documentation, but not about the absence of - # documentation. - - WARN_NO_PARAMDOC = NO - --# The WARN_FORMAT tag determines the format of the warning messages that --# doxygen can produce. The string should contain the $file, $line, and $text --# tags, which will be replaced by the file and line number from which the --# warning originated and the warning text. Optionally the format may contain --# $version, which will be replaced by the version of the file (if it could -+# The WARN_FORMAT tag determines the format of the warning messages that -+# doxygen can produce. The string should contain the $file, $line, and $text -+# tags, which will be replaced by the file and line number from which the -+# warning originated and the warning text. Optionally the format may contain -+# $version, which will be replaced by the version of the file (if it could - # be obtained via FILE_VERSION_FILTER) - - WARN_FORMAT = "$file:$line: $text" - --# The WARN_LOGFILE tag can be used to specify a file to which warning --# and error messages should be written. If left blank the output is written -+# The WARN_LOGFILE tag can be used to specify a file to which warning -+# and error messages should be written. If left blank the output is written - # to stderr. - - WARN_LOGFILE = htmldocs.log -@@ -454,98 +576,117 @@ - # configuration options related to the input files - #--------------------------------------------------------------------------- - --# The INPUT tag can be used to specify the files and/or directories that contain --# documented source files. You may enter file names like "myfile.cpp" or --# directories like "/usr/src/myproject". Separate the files or directories -+# The INPUT tag can be used to specify the files and/or directories that contain -+# documented source files. You may enter file names like "myfile.cpp" or -+# directories like "/usr/src/myproject". Separate the files or directories - # with spaces. - - INPUT = @DOXYGEN_INPUT_DIR@ - --# If the value of the INPUT tag contains directories, you can use the --# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp --# and *.h) to filter out the source-files in the directories. If left --# blank the following patterns are tested: --# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx --# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py -+# This tag can be used to specify the character encoding of the source files -+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -+# also the default input encoding. Doxygen uses libiconv (or the iconv built -+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -+# the list of possible encodings. -+ -+INPUT_ENCODING = UTF-8 -+ -+# If the value of the INPUT tag contains directories, you can use the -+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -+# and *.h) to filter out the source-files in the directories. If left -+# blank the following patterns are tested: -+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 - - FILE_PATTERNS = *.h \ - *.man \ - *.dox - --# The RECURSIVE tag can be used to turn specify whether or not subdirectories --# should be searched for input files as well. Possible values are YES and NO. -+# The RECURSIVE tag can be used to turn specify whether or not subdirectories -+# should be searched for input files as well. Possible values are YES and NO. - # If left blank NO is used. - - RECURSIVE = YES - --# The EXCLUDE tag can be used to specify files and/or directories that should --# excluded from the INPUT source files. This way you can easily exclude a -+# The EXCLUDE tag can be used to specify files and/or directories that should -+# excluded from the INPUT source files. This way you can easily exclude a - # subdirectory from a directory tree whose root is specified with the INPUT tag. - - EXCLUDE = @DOXYGEN_INPUT_DIR@/config/include \ - @DOXYGEN_INPUT_DIR@/docs - --# The EXCLUDE_SYMLINKS tag can be used select whether or not files or --# directories that are symbolic links (a Unix filesystem feature) are excluded -+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -+# directories that are symbolic links (a Unix filesystem feature) are excluded - # from the input. - - EXCLUDE_SYMLINKS = NO - --# If the value of the INPUT tag contains directories, you can use the --# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude --# certain files from those directories. Note that the wildcards are matched --# against the file with absolute path, so to exclude all test directories -+# If the value of the INPUT tag contains directories, you can use the -+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -+# certain files from those directories. Note that the wildcards are matched -+# against the file with absolute path, so to exclude all test directories - # for example use the pattern */test/* - --EXCLUDE_PATTERNS = -+EXCLUDE_PATTERNS = -+ -+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -+# (namespaces, classes, functions, etc.) that should be excluded from the -+# output. The symbol name can be a fully qualified name, a word, or if the -+# wildcard * is used, a substring. Examples: ANamespace, AClass, -+# AClass::ANamespace, ANamespace::*Test -+ -+EXCLUDE_SYMBOLS = - --# The EXAMPLE_PATH tag can be used to specify one or more files or --# directories that contain example code fragments that are included (see -+# The EXAMPLE_PATH tag can be used to specify one or more files or -+# directories that contain example code fragments that are included (see - # the \include command). - - EXAMPLE_PATH = @DOXYGEN_INPUT_DIR@ - --# If the value of the EXAMPLE_PATH tag contains directories, you can use the --# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp --# and *.h) to filter out the source-files in the directories. If left -+# If the value of the EXAMPLE_PATH tag contains directories, you can use the -+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -+# and *.h) to filter out the source-files in the directories. If left - # blank all files are included. - --EXAMPLE_PATTERNS = -+EXAMPLE_PATTERNS = - --# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be --# searched for input files to be used with the \include or \dontinclude --# commands irrespective of the value of the RECURSIVE tag. -+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -+# searched for input files to be used with the \include or \dontinclude -+# commands irrespective of the value of the RECURSIVE tag. - # Possible values are YES and NO. If left blank NO is used. - - EXAMPLE_RECURSIVE = YES - --# The IMAGE_PATH tag can be used to specify one or more files or --# directories that contain image that are included in the documentation (see -+# The IMAGE_PATH tag can be used to specify one or more files or -+# directories that contain image that are included in the documentation (see - # the \image command). - --IMAGE_PATH = -+IMAGE_PATH = - --# The INPUT_FILTER tag can be used to specify a program that doxygen should --# invoke to filter for each input file. Doxygen will invoke the filter program --# by executing (via popen()) the command <filter> <input-file>, where <filter> --# is the value of the INPUT_FILTER tag, and <input-file> is the name of an --# input file. Doxygen will then use the output that the filter program writes --# to standard output. If FILTER_PATTERNS is specified, this tag will be -+# The INPUT_FILTER tag can be used to specify a program that doxygen should -+# invoke to filter for each input file. Doxygen will invoke the filter program -+# by executing (via popen()) the command <filter> <input-file>, where <filter> -+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -+# input file. Doxygen will then use the output that the filter program writes -+# to standard output. -+# If FILTER_PATTERNS is specified, this tag will be - # ignored. - --INPUT_FILTER = -+INPUT_FILTER = - --# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern --# basis. Doxygen will compare the file name with each pattern and apply the --# filter if there is a match. The filters are a list of the form: --# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further --# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -+# basis. -+# Doxygen will compare the file name with each pattern and apply the -+# filter if there is a match. -+# The filters are a list of the form: -+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER - # is applied to all files. - --FILTER_PATTERNS = -+FILTER_PATTERNS = - --# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using --# INPUT_FILTER) will be used to filter the input files when producing source -+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -+# INPUT_FILTER) will be used to filter the input files when producing source - # files to browse (i.e. when SOURCE_BROWSER is set to YES). - - FILTER_SOURCE_FILES = NO -@@ -554,32 +695,32 @@ - # configuration options related to source browsing - #--------------------------------------------------------------------------- - --# If the SOURCE_BROWSER tag is set to YES then a list of source files will --# be generated. Documented entities will be cross-referenced with these sources. --# Note: To get rid of all source code in the generated output, make sure also -+# If the SOURCE_BROWSER tag is set to YES then a list of source files will -+# be generated. Documented entities will be cross-referenced with these sources. -+# Note: To get rid of all source code in the generated output, make sure also - # VERBATIM_HEADERS is set to NO. - - SOURCE_BROWSER = YES - --# Setting the INLINE_SOURCES tag to YES will include the body -+# Setting the INLINE_SOURCES tag to YES will include the body - # of functions and classes directly in the documentation. - - INLINE_SOURCES = NO - --# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct --# doxygen to hide any special comment blocks from generated source code -+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -+# doxygen to hide any special comment blocks from generated source code - # fragments. Normal C and C++ comments will always remain visible. - - STRIP_CODE_COMMENTS = YES - --# If the REFERENCED_BY_RELATION tag is set to YES (the default) --# then for each documented function all documented -+# If the REFERENCED_BY_RELATION tag is set to YES -+# then for each documented function all documented - # functions referencing it will be listed. - - REFERENCED_BY_RELATION = YES - --# If the REFERENCES_RELATION tag is set to YES (the default) --# then for each documented function all documented entities -+# If the REFERENCES_RELATION tag is set to YES -+# then for each documented function all documented entities - # called/used by that function will be listed. - - REFERENCES_RELATION = YES -@@ -587,20 +728,21 @@ - # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) - # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from - # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will --# link to the source code. Otherwise they will link to the documentation. -+# link to the source code. -+# Otherwise they will link to the documentation. - - REFERENCES_LINK_SOURCE = YES - --# If the USE_HTAGS tag is set to YES then the references to source code --# will point to the HTML generated by the htags(1) tool instead of doxygen --# built-in source browser. The htags tool is part of GNU's global source --# tagging system (see http://www.gnu.org/software/global/global.html). You -+# If the USE_HTAGS tag is set to YES then the references to source code -+# will point to the HTML generated by the htags(1) tool instead of doxygen -+# built-in source browser. The htags tool is part of GNU's global source -+# tagging system (see http://www.gnu.org/software/global/global.html). You - # will need version 4.8.6 or higher. - - USE_HTAGS = NO - --# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen --# will generate a verbatim copy of the header file for each class for -+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -+# will generate a verbatim copy of the header file for each class for - # which an include is specified. Set to NO to disable this. - - VERBATIM_HEADERS = YES -@@ -609,279 +751,488 @@ - # configuration options related to the alphabetical class index - #--------------------------------------------------------------------------- - --# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index --# of all compounds will be generated. Enable this if the project -+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -+# of all compounds will be generated. Enable this if the project - # contains a lot of classes, structs, unions or interfaces. - - ALPHABETICAL_INDEX = YES - --# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then --# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns - # in which this list will be split (can be a number in the range [1..20]) - - COLS_IN_ALPHA_INDEX = 3 - --# In case all classes in a project start with a common prefix, all --# classes will be put under the same header in the alphabetical index. --# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -+# In case all classes in a project start with a common prefix, all -+# classes will be put under the same header in the alphabetical index. -+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that - # should be ignored while generating the index headers. - --IGNORE_PREFIX = -+IGNORE_PREFIX = - - #--------------------------------------------------------------------------- - # configuration options related to the HTML output - #--------------------------------------------------------------------------- - --# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will - # generate HTML output. - - GENERATE_HTML = YES - --# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. --# If a relative path is entered the value of OUTPUT_DIRECTORY will be -+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -+# If a relative path is entered the value of OUTPUT_DIRECTORY will be - # put in front of it. If left blank `html' will be used as the default path. - - HTML_OUTPUT = htmldocs - --# The HTML_FILE_EXTENSION tag can be used to specify the file extension for --# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank - # doxygen will generate files with .html extension. - - HTML_FILE_EXTENSION = .html - --# The HTML_HEADER tag can be used to specify a personal HTML header for --# each generated HTML page. If it is left blank doxygen will generate a -+# The HTML_HEADER tag can be used to specify a personal HTML header for -+# each generated HTML page. If it is left blank doxygen will generate a - # standard header. - --HTML_HEADER = -+HTML_HEADER = - --# The HTML_FOOTER tag can be used to specify a personal HTML footer for --# each generated HTML page. If it is left blank doxygen will generate a -+# The HTML_FOOTER tag can be used to specify a personal HTML footer for -+# each generated HTML page. If it is left blank doxygen will generate a - # standard footer. - - HTML_FOOTER = @DOXYGEN_DATA_DIR@/footer.html - --# The HTML_STYLESHEET tag can be used to specify a user-defined cascading --# style sheet that is used by each HTML page. It can be used to --# fine-tune the look of the HTML output. If the tag is left blank doxygen --# will generate a default style sheet. Note that doxygen will try to copy --# the style sheet file to the HTML output directory, so don't put your own -+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -+# style sheet that is used by each HTML page. It can be used to -+# fine-tune the look of the HTML output. If the tag is left blank doxygen -+# will generate a default style sheet. Note that doxygen will try to copy -+# the style sheet file to the HTML output directory, so don't put your own - # stylesheet in the HTML output directory as well, or it will be erased! - --HTML_STYLESHEET = -+HTML_STYLESHEET = -+ -+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. -+# Doxygen will adjust the colors in the stylesheet and background images -+# according to this color. Hue is specified as an angle on a colorwheel, -+# see http://en.wikipedia.org/wiki/Hue for more information. -+# For instance the value 0 represents red, 60 is yellow, 120 is green, -+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. -+# The allowed range is 0 to 359. -+ -+HTML_COLORSTYLE_HUE = 220 -+ -+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of -+# the colors in the HTML output. For a value of 0 the output will use -+# grayscales only. A value of 255 will produce the most vivid colors. - --# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, --# files or namespaces will be aligned in HTML using tables. If set to -+HTML_COLORSTYLE_SAT = 100 -+ -+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to -+# the luminance component of the colors in the HTML output. Values below -+# 100 gradually make the output lighter, whereas values above 100 make -+# the output darker. The value divided by 100 is the actual gamma applied, -+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, -+# and 100 does not change the gamma. -+ -+HTML_COLORSTYLE_GAMMA = 80 -+ -+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -+# page will contain the date and time when the page was generated. Setting -+# this to NO can help when comparing the output of multiple runs. -+ -+HTML_TIMESTAMP = YES -+ -+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -+# files or namespaces will be aligned in HTML using tables. If set to - # NO a bullet list will be used. - - HTML_ALIGN_MEMBERS = YES - --# If the GENERATE_HTMLHELP tag is set to YES, additional index files --# will be generated that can be used as input for tools like the --# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -+# documentation will contain sections that can be hidden and shown after the -+# page has loaded. For this to work a browser that supports -+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). -+ -+HTML_DYNAMIC_SECTIONS = NO -+ -+# If the GENERATE_DOCSET tag is set to YES, additional index files -+# will be generated that can be used as input for Apple's Xcode 3 -+# integrated development environment, introduced with OSX 10.5 (Leopard). -+# To create a documentation set, doxygen will generate a Makefile in the -+# HTML output directory. Running make will produce the docset in that -+# directory and running "make install" will install the docset in -+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -+# it at startup. -+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -+# for more information. -+ -+GENERATE_DOCSET = NO -+ -+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -+# feed. A documentation feed provides an umbrella under which multiple -+# documentation sets from a single provider (such as a company or product suite) -+# can be grouped. -+ -+DOCSET_FEEDNAME = "Doxygen generated docs" -+ -+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -+# should uniquely identify the documentation set bundle. This should be a -+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -+# will append .docset to the name. -+ -+DOCSET_BUNDLE_ID = org.doxygen.Project -+ -+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify -+# the documentation publisher. This should be a reverse domain-name style -+# string, e.g. com.mycompany.MyDocSet.documentation. -+ -+DOCSET_PUBLISHER_ID = org.doxygen.Publisher -+ -+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. -+ -+DOCSET_PUBLISHER_NAME = Publisher -+ -+# If the GENERATE_HTMLHELP tag is set to YES, additional index files -+# will be generated that can be used as input for tools like the -+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) - # of the generated HTML documentation. - - GENERATE_HTMLHELP = NO - --# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can --# be used to specify the file name of the resulting .chm file. You --# can add a path in front of the file if the result should not be -+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -+# be used to specify the file name of the resulting .chm file. You -+# can add a path in front of the file if the result should not be - # written to the html output directory. - - CHM_FILE = dcmtk354.chm - --# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can --# be used to specify the location (absolute path including file name) of --# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -+# be used to specify the location (absolute path including file name) of -+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run - # the HTML help compiler on the generated index.hhp. - --HHC_LOCATION = -+HHC_LOCATION = - --# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag --# controls if a separate .chi index file is generated (YES) or that -+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -+# controls if a separate .chi index file is generated (YES) or that - # it should be included in the master .chm file (NO). - - GENERATE_CHI = NO - --# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag --# controls whether a binary table of contents is generated (YES) or a -+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -+# is used to encode HtmlHelp index (hhk), content (hhc) and project file -+# content. -+ -+CHM_INDEX_ENCODING = -+ -+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -+# controls whether a binary table of contents is generated (YES) or a - # normal table of contents (NO) in the .chm file. - - BINARY_TOC = NO - --# The TOC_EXPAND flag can be set to YES to add extra items for group members -+# The TOC_EXPAND flag can be set to YES to add extra items for group members - # to the contents of the HTML help documentation and to the tree view. - - TOC_EXPAND = YES - --# The DISABLE_INDEX tag can be used to turn on/off the condensed index at --# top of each HTML page. The value NO (the default) enables the index and -+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated -+# that can be used as input for Qt's qhelpgenerator to generate a -+# Qt Compressed Help (.qch) of the generated HTML documentation. -+ -+GENERATE_QHP = NO -+ -+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -+# be used to specify the file name of the resulting .qch file. -+# The path specified is relative to the HTML output folder. -+ -+QCH_FILE = -+ -+# The QHP_NAMESPACE tag specifies the namespace to use when generating -+# Qt Help Project output. For more information please see -+# http://doc.trolltech.com/qthelpproject.html#namespace -+ -+QHP_NAMESPACE = org.doxygen.Project -+ -+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -+# Qt Help Project output. For more information please see -+# http://doc.trolltech.com/qthelpproject.html#virtual-folders -+ -+QHP_VIRTUAL_FOLDER = doc -+ -+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to -+# add. For more information please see -+# http://doc.trolltech.com/qthelpproject.html#custom-filters -+ -+QHP_CUST_FILTER_NAME = -+ -+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the -+# custom filter to add. For more information please see -+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> -+# Qt Help Project / Custom Filters</a>. -+ -+QHP_CUST_FILTER_ATTRS = -+ -+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -+# project's -+# filter section matches. -+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> -+# Qt Help Project / Filter Attributes</a>. -+ -+QHP_SECT_FILTER_ATTRS = -+ -+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -+# be used to specify the location of Qt's qhelpgenerator. -+# If non-empty doxygen will try to run qhelpgenerator on the generated -+# .qhp file. -+ -+QHG_LOCATION = -+ -+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -+# will be generated, which together with the HTML files, form an Eclipse help -+# plugin. To install this plugin and make it available under the help contents -+# menu in Eclipse, the contents of the directory containing the HTML and XML -+# files needs to be copied into the plugins directory of eclipse. The name of -+# the directory within the plugins directory should be the same as -+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -+# the help appears. -+ -+GENERATE_ECLIPSEHELP = NO -+ -+# A unique identifier for the eclipse help plugin. When installing the plugin -+# the directory name containing the HTML and XML files should also have -+# this name. -+ -+ECLIPSE_DOC_ID = org.doxygen.Project -+ -+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -+# top of each HTML page. The value NO (the default) enables the index and - # the value YES disables it. - - DISABLE_INDEX = NO - --# This tag can be used to set the number of enum values (range [1..20]) -+# This tag can be used to set the number of enum values (range [1..20]) - # that doxygen will group on one line in the generated HTML documentation. - - ENUM_VALUES_PER_LINE = 4 - --# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be --# generated containing a tree-like index structure (just like the one that --# is generated for HTML Help). For this to work a browser that supports --# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, --# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are --# probably better off using the HTML help feature. -+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -+# structure should be generated to display hierarchical information. -+# If the tag value is set to YES, a side panel will be generated -+# containing a tree-like index structure (just like the one that -+# is generated for HTML Help). For this to work a browser that supports -+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -+# Windows users are probably better off using the HTML help feature. - - GENERATE_TREEVIEW = NO - --# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be --# used to set the initial width (in pixels) of the frame in which the tree -+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, -+# and Class Hierarchy pages using a tree view instead of an ordered list. -+ -+USE_INLINE_TREES = NO -+ -+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -+# used to set the initial width (in pixels) of the frame in which the tree - # is shown. - - TREEVIEW_WIDTH = 250 - -+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open -+# links to external symbols imported via tag files in a separate window. -+ -+EXT_LINKS_IN_WINDOW = NO -+ -+# Use this tag to change the font size of Latex formulas included -+# as images in the HTML documentation. The default is 10. Note that -+# when you change the font size after a successful doxygen run you need -+# to manually remove any form_*.png images from the HTML output directory -+# to force them to be regenerated. -+ -+FORMULA_FONTSIZE = 10 -+ -+# Use the FORMULA_TRANPARENT tag to determine whether or not the images -+# generated for formulas are transparent PNGs. Transparent PNGs are -+# not supported properly for IE 6.0, but are supported on all modern browsers. -+# Note that when changing this option you need to delete any form_*.png files -+# in the HTML output before the changes have effect. -+ -+FORMULA_TRANSPARENT = YES -+ -+# When the SEARCHENGINE tag is enabled doxygen will generate a search box -+# for the HTML output. The underlying search engine uses javascript -+# and DHTML and should work on any modern browser. Note that when using -+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -+# (GENERATE_DOCSET) there is already a search function so this one should -+# typically be disabled. For large projects the javascript based search engine -+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. -+ -+SEARCHENGINE = NO -+ -+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -+# implemented using a PHP enabled web server instead of at the web client -+# using Javascript. Doxygen will generate the search PHP script and index -+# file to put on the web server. The advantage of the server -+# based approach is that it scales better to large projects and allows -+# full text search. The disadvances is that it is more difficult to setup -+# and does not have live searching capabilities. -+ -+SERVER_BASED_SEARCH = NO -+ - #--------------------------------------------------------------------------- - # configuration options related to the LaTeX output - #--------------------------------------------------------------------------- - --# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will - # generate Latex output. - - GENERATE_LATEX = NO - --# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. --# If a relative path is entered the value of OUTPUT_DIRECTORY will be -+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -+# If a relative path is entered the value of OUTPUT_DIRECTORY will be - # put in front of it. If left blank `latex' will be used as the default path. - - LATEX_OUTPUT = latex - --# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be - # invoked. If left blank `latex' will be used as the default command name. -+# Note that when enabling USE_PDFLATEX this option is only used for -+# generating bitmaps for formulas in the HTML output, but not in the -+# Makefile that is written to the output directory. - - LATEX_CMD_NAME = latex - --# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to --# generate index for LaTeX. If left blank `makeindex' will be used as the -+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -+# generate index for LaTeX. If left blank `makeindex' will be used as the - # default command name. - - MAKEINDEX_CMD_NAME = makeindex - --# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact --# LaTeX documents. This may be useful for small projects and may help to -+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -+# LaTeX documents. This may be useful for small projects and may help to - # save some trees in general. - - COMPACT_LATEX = NO - --# The PAPER_TYPE tag can be used to set the paper type that is used --# by the printer. Possible values are: a4, a4wide, letter, legal and -+# The PAPER_TYPE tag can be used to set the paper type that is used -+# by the printer. Possible values are: a4, a4wide, letter, legal and - # executive. If left blank a4wide will be used. - - PAPER_TYPE = a4wide - --# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX - # packages that should be included in the LaTeX output. - --EXTRA_PACKAGES = -+EXTRA_PACKAGES = - --# The LATEX_HEADER tag can be used to specify a personal LaTeX header for --# the generated latex document. The header should contain everything until --# the first chapter. If it is left blank doxygen will generate a -+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -+# the generated latex document. The header should contain everything until -+# the first chapter. If it is left blank doxygen will generate a - # standard header. Notice: only use this tag if you know what you are doing! - --LATEX_HEADER = -+LATEX_HEADER = - --# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated --# is prepared for conversion to pdf (using ps2pdf). The pdf file will --# contain links (just like the HTML output) instead of page references -+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -+# is prepared for conversion to pdf (using ps2pdf). The pdf file will -+# contain links (just like the HTML output) instead of page references - # This makes the output suitable for online browsing using a pdf viewer. - - PDF_HYPERLINKS = YES - --# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of --# plain latex in the generated Makefile. Set this option to YES to get a -+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -+# plain latex in the generated Makefile. Set this option to YES to get a - # higher quality PDF documentation. - - USE_PDFLATEX = NO - --# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. --# command to the generated LaTeX files. This will instruct LaTeX to keep --# running if errors occur, instead of asking the user for help. -+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -+# command to the generated LaTeX files. This will instruct LaTeX to keep -+# running if errors occur, instead of asking the user for help. - # This option is also used when generating formulas in HTML. - - LATEX_BATCHMODE = YES - --# If LATEX_HIDE_INDICES is set to YES then doxygen will not --# include the index chapters (such as File Index, Compound Index, etc.) -+# If LATEX_HIDE_INDICES is set to YES then doxygen will not -+# include the index chapters (such as File Index, Compound Index, etc.) - # in the output. - - LATEX_HIDE_INDICES = NO - -+# If LATEX_SOURCE_CODE is set to YES then doxygen will include -+# source code with syntax highlighting in the LaTeX output. -+# Note that which sources are shown also depends on other settings -+# such as SOURCE_BROWSER. -+ -+LATEX_SOURCE_CODE = NO -+ - #--------------------------------------------------------------------------- - # configuration options related to the RTF output - #--------------------------------------------------------------------------- - --# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output --# The RTF output is optimized for Word 97 and may not look very pretty with -+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -+# The RTF output is optimized for Word 97 and may not look very pretty with - # other RTF readers or editors. - - GENERATE_RTF = NO - --# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. --# If a relative path is entered the value of OUTPUT_DIRECTORY will be -+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -+# If a relative path is entered the value of OUTPUT_DIRECTORY will be - # put in front of it. If left blank `rtf' will be used as the default path. - - RTF_OUTPUT = rtf - --# If the COMPACT_RTF tag is set to YES Doxygen generates more compact --# RTF documents. This may be useful for small projects and may help to -+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -+# RTF documents. This may be useful for small projects and may help to - # save some trees in general. - - COMPACT_RTF = NO - --# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated --# will contain hyperlink fields. The RTF file will --# contain links (just like the HTML output) instead of page references. --# This makes the output suitable for online browsing using WORD or other --# programs which support those fields. -+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -+# will contain hyperlink fields. The RTF file will -+# contain links (just like the HTML output) instead of page references. -+# This makes the output suitable for online browsing using WORD or other -+# programs which support those fields. - # Note: wordpad (write) and others do not support links. - - RTF_HYPERLINKS = NO - --# Load stylesheet definitions from file. Syntax is similar to doxygen's --# config file, i.e. a series of assignments. You only have to provide -+# Load stylesheet definitions from file. Syntax is similar to doxygen's -+# config file, i.e. a series of assignments. You only have to provide - # replacements, missing definitions are set to their default value. - --RTF_STYLESHEET_FILE = -+RTF_STYLESHEET_FILE = - --# Set optional variables used in the generation of an rtf document. -+# Set optional variables used in the generation of an rtf document. - # Syntax is similar to doxygen's config file. - --RTF_EXTENSIONS_FILE = -+RTF_EXTENSIONS_FILE = - - #--------------------------------------------------------------------------- - # configuration options related to the man page output - #--------------------------------------------------------------------------- - --# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will - # generate man pages - - GENERATE_MAN = NO - --# The MAN_OUTPUT tag is used to specify where the man pages will be put. --# If a relative path is entered the value of OUTPUT_DIRECTORY will be -+# The MAN_OUTPUT tag is used to specify where the man pages will be put. -+# If a relative path is entered the value of OUTPUT_DIRECTORY will be - # put in front of it. If left blank `man' will be used as the default path. - - MAN_OUTPUT = man - --# The MAN_EXTENSION tag determines the extension that is added to -+# The MAN_EXTENSION tag determines the extension that is added to - # the generated man pages (default is the subroutine's section .3) - - MAN_EXTENSION = .3 - --# If the MAN_LINKS tag is set to YES and Doxygen generates man output, --# then it will generate one additional man file for each entity --# documented in the real man page(s). These additional files --# only source the real man page, but without them the man command -+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -+# then it will generate one additional man file for each entity -+# documented in the real man page(s). These additional files -+# only source the real man page, but without them the man command - # would be unable to find the correct page. The default is NO. - - MAN_LINKS = NO -@@ -890,33 +1241,33 @@ - # configuration options related to the XML output - #--------------------------------------------------------------------------- - --# If the GENERATE_XML tag is set to YES Doxygen will --# generate an XML file that captures the structure of -+# If the GENERATE_XML tag is set to YES Doxygen will -+# generate an XML file that captures the structure of - # the code including all documentation. - - GENERATE_XML = NO - --# The XML_OUTPUT tag is used to specify where the XML pages will be put. --# If a relative path is entered the value of OUTPUT_DIRECTORY will be -+# The XML_OUTPUT tag is used to specify where the XML pages will be put. -+# If a relative path is entered the value of OUTPUT_DIRECTORY will be - # put in front of it. If left blank `xml' will be used as the default path. - - XML_OUTPUT = xml - --# The XML_SCHEMA tag can be used to specify an XML schema, --# which can be used by a validating XML parser to check the -+# The XML_SCHEMA tag can be used to specify an XML schema, -+# which can be used by a validating XML parser to check the - # syntax of the XML files. - --XML_SCHEMA = -+XML_SCHEMA = - --# The XML_DTD tag can be used to specify an XML DTD, --# which can be used by a validating XML parser to check the -+# The XML_DTD tag can be used to specify an XML DTD, -+# which can be used by a validating XML parser to check the - # syntax of the XML files. - --XML_DTD = -+XML_DTD = - --# If the XML_PROGRAMLISTING tag is set to YES Doxygen will --# dump the program listings (including syntax highlighting --# and cross-referencing information) to the XML output. Note that -+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -+# dump the program listings (including syntax highlighting -+# and cross-referencing information) to the XML output. Note that - # enabling this will significantly increase the size of the XML output. - - XML_PROGRAMLISTING = YES -@@ -925,10 +1276,10 @@ - # configuration options for the AutoGen Definitions output - #--------------------------------------------------------------------------- - --# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will --# generate an AutoGen Definitions (see autogen.sf.net) file --# that captures the structure of the code including all --# documentation. Note that this feature is still experimental -+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -+# generate an AutoGen Definitions (see autogen.sf.net) file -+# that captures the structure of the code including all -+# documentation. Note that this feature is still experimental - # and incomplete at the moment. - - GENERATE_AUTOGEN_DEF = NO -@@ -937,82 +1288,84 @@ - # configuration options related to the Perl module output - #--------------------------------------------------------------------------- - --# If the GENERATE_PERLMOD tag is set to YES Doxygen will --# generate a Perl module file that captures the structure of --# the code including all documentation. Note that this --# feature is still experimental and incomplete at the -+# If the GENERATE_PERLMOD tag is set to YES Doxygen will -+# generate a Perl module file that captures the structure of -+# the code including all documentation. Note that this -+# feature is still experimental and incomplete at the - # moment. - - GENERATE_PERLMOD = NO - --# If the PERLMOD_LATEX tag is set to YES Doxygen will generate --# the necessary Makefile rules, Perl scripts and LaTeX code to be able -+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -+# the necessary Makefile rules, Perl scripts and LaTeX code to be able - # to generate PDF and DVI output from the Perl module output. - - PERLMOD_LATEX = NO - --# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be --# nicely formatted so it can be parsed by a human reader. This is useful --# if you want to understand what is going on. On the other hand, if this --# tag is set to NO the size of the Perl module output will be much smaller -+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -+# nicely formatted so it can be parsed by a human reader. -+# This is useful -+# if you want to understand what is going on. -+# On the other hand, if this -+# tag is set to NO the size of the Perl module output will be much smaller - # and Perl will parse it just the same. - - PERLMOD_PRETTY = YES - --# The names of the make variables in the generated doxyrules.make file --# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. --# This is useful so different doxyrules.make files included by the same -+# The names of the make variables in the generated doxyrules.make file -+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -+# This is useful so different doxyrules.make files included by the same - # Makefile don't overwrite each other's variables. - --PERLMOD_MAKEVAR_PREFIX = -+PERLMOD_MAKEVAR_PREFIX = - - #--------------------------------------------------------------------------- --# Configuration options related to the preprocessor -+# Configuration options related to the preprocessor - #--------------------------------------------------------------------------- - --# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will --# evaluate all C-preprocessor directives found in the sources and include -+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -+# evaluate all C-preprocessor directives found in the sources and include - # files. - - ENABLE_PREPROCESSING = YES - --# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro --# names in the source code. If set to NO (the default) only conditional --# compilation will be performed. Macro expansion can be done in a controlled -+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -+# names in the source code. If set to NO (the default) only conditional -+# compilation will be performed. Macro expansion can be done in a controlled - # way by setting EXPAND_ONLY_PREDEF to YES. - - MACRO_EXPANSION = NO - --# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES --# then the macro expansion is limited to the macros specified with the -+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -+# then the macro expansion is limited to the macros specified with the - # PREDEFINED and EXPAND_AS_DEFINED tags. - - EXPAND_ONLY_PREDEF = NO - --# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files - # in the INCLUDE_PATH (see below) will be search if a #include is found. - - SEARCH_INCLUDES = YES - --# The INCLUDE_PATH tag can be used to specify one or more directories that --# contain include files that are not input files but should be processed by -+# The INCLUDE_PATH tag can be used to specify one or more directories that -+# contain include files that are not input files but should be processed by - # the preprocessor. - --INCLUDE_PATH = -+INCLUDE_PATH = - --# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard --# patterns (like *.h and *.hpp) to filter out the header-files in the --# directories. If left blank, the patterns specified with FILE_PATTERNS will -+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -+# patterns (like *.h and *.hpp) to filter out the header-files in the -+# directories. If left blank, the patterns specified with FILE_PATTERNS will - # be used. - --INCLUDE_FILE_PATTERNS = -+INCLUDE_FILE_PATTERNS = - --# The PREDEFINED tag can be used to specify one or more macro names that --# are defined before the preprocessor is started (similar to the -D option of --# gcc). The argument of the tag is a list of macros of the form: name --# or name=definition (no spaces). If the definition and the = are --# omitted =1 is assumed. To prevent a macro definition from being --# undefined via #undef or recursively expanded use the := operator -+# The PREDEFINED tag can be used to specify one or more macro names that -+# are defined before the preprocessor is started (similar to the -D option of -+# gcc). The argument of the tag is a list of macros of the form: name -+# or name=definition (no spaces). If the definition and the = are -+# omitted =1 is assumed. To prevent a macro definition from being -+# undefined via #undef or recursively expanded use the := operator - # instead of the = operator. - - PREDEFINED = WITH_OPENSSL \ -@@ -1104,7 +1457,7 @@ - # toolkit from AT&T and Lucent Bell Labs. The other options in this section - # have no effect if this option is set to NO (the default) - --HAVE_DOT = NO -+HAVE_DOT = YES - - # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen - # will generate a graph for each documented class showing the direct and -@@ -1182,7 +1535,7 @@ - # generated by dot. Possible values are png, jpg, or gif - # If left blank png will be used. - --DOT_IMAGE_FORMAT = png -+DOT_IMAGE_FORMAT = svg - - # The tag DOT_PATH can be used to specify the path where the dot tool can be - # found. If left blank, it is assumed the dot tool can be found in the path. |