- printf("PI %s\n", xmlGetNodePath(node));
-
- /* if right PI name, continue parsing PI */
- if (0 == strcmp(zebra_pi_name, (const char *)node->name)){
- xmlChar *pi_p = node->content;
- xmlChar *look = pi_p;
-
- xmlChar *bval;
- xmlChar *eval;
-
- /* parsing PI record instructions */
- if (0 == strncmp((const char *)look, "record", 6)){
- xmlChar id[256];
- xmlChar rank[256];
- xmlChar action[256];
-
- *id = '\0';
- *rank = '\0';
- *action = '\0';
-
- look += 6;
-
- /* eat whitespace */
- while (*look && ' ' == *look && *(look+1))
- look++;
-
- /* parse possible id */
- if (*look && 0 == strncmp((const char *)look, "id=", 3)){
- look += 3;
- bval = look;
- while (*look && ' ' != *look)
- look++;
- eval = look;
- strncpy((char *)id, (const char *)bval, eval - bval);
- id[eval - bval] = '\0';
- }
-
- /* eat whitespace */
- while (*look && ' ' == *look && *(look+1))
- look++;
-
- /* parse possible rank */
- if (*look && 0 == strncmp((const char *)look, "rank=", 5)){
- look += 6;
- bval = look;
- while (*look && ' ' != *look)
- look++;
- eval = look;
- strncpy((char *)rank, (const char *)bval, eval - bval);
- rank[eval - bval] = '\0';
- }
-
- /* eat whitespace */
- while (*look && ' ' == *look && *(look+1))
- look++;
-
- if (look && '\0' != *look){
- printf ("ERROR %s: content '%s'; can not parse '%s'\n",
- xmlGetNodePath(node), pi_p, look);
- } else {
- /* set_record_info(id, rank, action); */
- set_record_info(id, rank, 0);
- }
-
- }
-
- /* parsing index instruction */
- else if (0 == strncmp((const char *)look, "index", 5)){
- look += 5;
-
- /* eat whitespace */
- while (*look && ' ' == *look && *(look+1))
- look++;
-
- /* export index instructions to outside */
- *index_pp = look;
-
- /* nor record, neither index */
- } else {
-
- printf ("ERROR %s: content '%s'; can not parse '%s'\n",
- xmlGetNodePath(node), pi_p, look);
- }
- }
+ /* if right PI name, continue parsing PI */
+ if (0 == strcmp(zebra_pi_name, (const char *)node->name))
+ {
+ xmlChar *pi_p = node->content;
+ const char *look = (const char *) node->content;
+
+ /* parsing PI record instructions */
+ if (0 == strncmp((const char *)look, "record", 6))
+ {
+ char id[256];
+ char rank[256];
+ char type[256];
+
+ *id = '\0';
+ *rank = '\0';
+ *type = '\0';
+ look += 6;
+ for (;;)
+ {
+ /* eat whitespace */
+ while (' ' == *look)
+ look++;
+ if (*look == '\0')
+ break;
+ if (attr_content_pi(&look, "id", id, sizeof(id)))
+ ;
+ else if (attr_content_pi(&look, "rank", rank, sizeof(rank)))
+ ;
+ else if (attr_content_pi(&look, "type", type, sizeof(type)))
+ ;
+ else
+ {
+ dom_log(YLOG_WARN, tinfo, node,
+ "content '%s', can not parse '%s'",
+ pi_p, look);
+ break;
+ }
+ }
+ set_record_info(tinfo, extctr, node, id, rank, type);
+ }
+ /* parsing index instruction */
+ else if (0 == strncmp((const char *)look, "index", 5))
+ {
+ look += 5;
+
+ /* eat whitespace */
+ while (*look && ' ' == *look)
+ look++;
+
+ /* export index instructions to outside */
+ *index_pp = look;
+ }
+ else
+ {
+ dom_log(YLOG_WARN, tinfo, node,
+ "content '%s', can not parse '%s'",
+ pi_p, look);
+ }
+ }