[ofa-general] Re: [PATCH 1/6] complib/nodenamemap: add generic parse_node_map() function
Ira Weiny
weiny2 at llnl.gov
Wed Mar 26 17:52:28 PDT 2008
Hey Sasha,
On Thu, 27 Mar 2008 00:27:12 +0000
Sasha Khapyorsky <sashak at voltaire.com> wrote:
> This parser is able to parse text file with format similar to nodenamemap
> file:
>
> guid <string> # comment
> ....
I like the idea of using this same format.
>
> It will be used later for unification parsing of root nodes and compute
> nodes guid list files.
>
> Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
> ---
> opensm/complib/cl_nodenamemap.c | 45 +++++++++++++++++++++++++++++++
> opensm/complib/libosmcomp.map | 1 +
> opensm/include/complib/cl_nodenamemap.h | 3 ++
> 3 files changed, 49 insertions(+), 0 deletions(-)
>
> diff --git a/opensm/complib/cl_nodenamemap.c b/opensm/complib/cl_nodenamemap.c
> index af5da39..696d455 100644
> --- a/opensm/complib/cl_nodenamemap.c
> +++ b/opensm/complib/cl_nodenamemap.c
> @@ -160,3 +160,48 @@ clean_nodedesc(char *nodedesc)
>
> return (nodedesc);
> }
> +
> +int parse_node_map(const char *file_name,
> + int (*create)(void *, uint64_t, char *), void *cxt)
Why do you need this new way of parsing the file format? I think passing this
callback makes the code more complicated that it needs to be.
Is there a reason not to use the nn_map_t as the type for root_nodes_list in
the updn_t struct? We could rename nn_map_t to be more generic if necessary.
I worry about maintaining 2 functions which parse the same file format in the
same c file.
Ira
> +{
> + char line[256];
> + FILE *f;
> +
> + if (!(f = fopen(file_name, "r")))
> + return -1;
> +
> + while (fgets(line, sizeof(line),f)) {
> + uint64_t guid;
> + char *p, *e;
> +
> + p = line;
> + while (isspace(*p))
> + p++;
> + if (*p == '\0' || *p == '\n' || *p == '#')
> + continue;
> +
> + guid = strtoull(p, &e, 0);
> + if (e == p || !isspace(*e)) {
> + fclose(f);
> + return -1;
> + }
> +
> + p = e;
> + if (*e)
> + e++;
> + while (isspace(*p))
> + p++;
> +
> + e = strpbrk(p, "# \t\n");
> + if (e)
> + *e = '\0';
> +
> + if (create(cxt, guid, p)) {
> + fclose(f);
> + return -1;
> + }
> + }
> +
> + fclose(f);
> + return 0;
> +}
> diff --git a/opensm/complib/libosmcomp.map b/opensm/complib/libosmcomp.map
> index d0e107e..788eb2a 100644
> --- a/opensm/complib/libosmcomp.map
> +++ b/opensm/complib/libosmcomp.map
> @@ -147,6 +147,7 @@ OSMCOMP_2.3 {
> ib_wc_status_str;
> open_node_name_map;
> close_node_name_map;
> + parse_node_map;
> remap_node_name;
> clean_nodedesc;
> local: *;
> diff --git a/opensm/include/complib/cl_nodenamemap.h b/opensm/include/complib/cl_nodenamemap.h
> index b20ca4e..5f4a026 100644
> --- a/opensm/include/complib/cl_nodenamemap.h
> +++ b/opensm/include/complib/cl_nodenamemap.h
> @@ -1,4 +1,5 @@
> /*
> + * Copyright (c) 2008 Voltaire, Inc. All rights reserved.
> * Copyright (c) 2007 Lawrence Livermore National Lab
> *
> * This software is available to you under a choice of one of two
> @@ -60,5 +61,7 @@ void close_node_name_map(nn_map_t *map);
> char *remap_node_name(nn_map_t *map, uint64_t target_guid,
> char *nodedesc);
> /* NOTE: parameter "nodedesc" may be modified here. */
> +int parse_node_map(const char *file_name,
> + int (*create)(void *, uint64_t, char *), void *cxt);
>
> #endif /* _CL_NODE_NAME_MAP_H_ */
> --
> 1.5.4.1.122.gaa8d
More information about the general
mailing list