[ofa-general] [PATCH] complib/nodenamemap: merge file parsers
Sasha Khapyorsky
sashak at voltaire.com
Sun Mar 30 07:27:51 PDT 2008
Merge nodenamemap style format parsers.
Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
---
opensm/complib/cl_nodenamemap.c | 100 +++++++++++++-----------------
opensm/include/complib/cl_nodenamemap.h | 6 +-
2 files changed, 45 insertions(+), 61 deletions(-)
diff --git a/opensm/complib/cl_nodenamemap.c b/opensm/complib/cl_nodenamemap.c
index d09863a..bafaf5c 100644
--- a/opensm/complib/cl_nodenamemap.c
+++ b/opensm/complib/cl_nodenamemap.c
@@ -38,73 +38,61 @@
#include <stdlib.h>
#include <stdarg.h>
#include <sys/types.h>
+#include <sys/stat.h>
#include <unistd.h>
#include <ctype.h>
#include <config.h>
#include <complib/cl_nodenamemap.h>
-static void
-read_names(nn_map_t *map)
+static int map_name(void *cxt, uint64_t guid, char *p)
{
- char *line = NULL;
- size_t len = 0;
+ cl_qmap_t *map = cxt;
name_map_item_t *item;
- rewind(map->fp);
- while (getline(&line, &len, map->fp) != -1) {
- char *guid_str = NULL;
- char *name = NULL;
- line[len-1] = '\0';
- if (line[0] == '#')
- continue;
-
- guid_str = strtok(line, "\"#");
- name = strtok(NULL, "\"#");
- if (!guid_str || !name)
- continue;
-
- item = malloc(sizeof(*item));
- if (!item) {
- goto error;
- }
- item->guid = strtoull(guid_str, NULL, 0);
- item->name = strdup(name);
- cl_qmap_insert(&(map->map), item->guid, (cl_map_item_t *)item);
- }
+ p = strtok(p, "\"#");
+ if (!p)
+ return 0;
-error:
- free (line);
+ item = malloc(sizeof(*item));
+ if (!item)
+ return -1;
+ item->guid = guid;
+ item->name = strdup(p);
+ cl_qmap_insert(map, item->guid, (cl_map_item_t *)item);
+ return 0;
}
nn_map_t *
open_node_name_map(char *node_name_map)
{
- FILE *tmp_fp = NULL;
- nn_map_t *rc = NULL;
-
- if (node_name_map != NULL) {
- tmp_fp = fopen(node_name_map, "r");
- if (tmp_fp == NULL) {
- fprintf(stderr,
- "WARNING failed to open switch map \"%s\" (%s)\n",
- node_name_map, strerror(errno));
- }
+ nn_map_t *map;
+
+ if (!node_name_map) {
#ifdef HAVE_DEFAULT_NODENAME_MAP
- } else {
- tmp_fp = fopen(HAVE_DEFAULT_NODENAME_MAP, "r");
+ struct stat buf;
+ node_name_map = HAVE_DEFAULT_NODENAME_MAP;
+ if (stat(node_name_map, &buf))
+ return NULL;
+#else
+ return NULL;
#endif /* HAVE_DEFAULT_NODENAME_MAP */
}
- if (!tmp_fp)
- return (NULL);
-
- rc = malloc(sizeof(*rc));
- if (!rc)
- return (NULL);
- rc->fp = tmp_fp;
- cl_qmap_init(&(rc->map));
- read_names(rc);
- return (rc);
+
+ map = malloc(sizeof(*map));
+ if (!map)
+ return NULL;
+ cl_qmap_init(map);
+
+ if (parse_node_map(node_name_map, map_name, map)) {
+ fprintf(stderr,
+ "WARNING failed to open node name map \"%s\" (%s)\n",
+ node_name_map, strerror(errno));
+ close_node_name_map(map);
+ return NULL;
+ }
+
+ return map;
}
void
@@ -115,15 +103,13 @@ close_node_name_map(nn_map_t *map)
if (!map)
return;
- item = (name_map_item_t *)cl_qmap_head(&(map->map));
- while (item != (name_map_item_t *)cl_qmap_end(&(map->map))) {
- item = (name_map_item_t *)cl_qmap_remove(&(map->map), item->guid);
+ item = (name_map_item_t *)cl_qmap_head(map);
+ while (item != (name_map_item_t *)cl_qmap_end(map)) {
+ item = (name_map_item_t *)cl_qmap_remove(map, item->guid);
free(item->name);
free(item);
- item = (name_map_item_t *)cl_qmap_head(&(map->map));
+ item = (name_map_item_t *)cl_qmap_head(map);
}
- if (map->fp)
- fclose(map->fp);
free(map);
}
@@ -136,8 +122,8 @@ remap_node_name(nn_map_t *map, uint64_t target_guid, char *nodedesc)
if (!map)
goto done;
- item = (name_map_item_t *)cl_qmap_get(&(map->map), target_guid);
- if (item != (name_map_item_t *)cl_qmap_end(&(map->map)))
+ item = (name_map_item_t *)cl_qmap_get(map, target_guid);
+ if (item != (name_map_item_t *)cl_qmap_end(map))
rc = strdup(item->name);
done:
diff --git a/opensm/include/complib/cl_nodenamemap.h b/opensm/include/complib/cl_nodenamemap.h
index 5f4a026..9b2ada4 100644
--- a/opensm/include/complib/cl_nodenamemap.h
+++ b/opensm/include/complib/cl_nodenamemap.h
@@ -47,10 +47,8 @@ typedef struct _name_map_item {
uint64_t guid;
char *name;
} name_map_item_t;
-typedef struct _node_name_map {
- FILE *fp;
- cl_qmap_t map;
-} nn_map_t;
+
+typedef cl_qmap_t nn_map_t;
/**
* Node name map interface.
--
1.5.4.1.122.gaa8d
More information about the general
mailing list