/****** cull/dump_scan/lDumpList() ******************************************** * NAME * lDumpList() -- Writes a list to a FILE stream * * SYNOPSIS * int lDumpList(FILE *fp, const lList *lp, int indent) * * FUNCTION * Writes a list to a FILE stream. * * INPUTS * FILE *fp - file stream * const lList *lp - list * int indent - * * RESULT * int - error state * 0 - OK * -1 - Error * * NOTES * MT-NOTE: lDumpList() is not MT safe *******************************************************************************/ int lDumpList(FILE *fp, const lList *lp, int indent) { lListElem *ep; int i, ret = ~EOF; char space[256]; DENTER(CULL_LAYER, "lDumpList"); space[0] = '\0'; for (i = 0; i < indent; i++) strcat(space, INDENT_STRING); if (!fp) { LERROR(LEFILENULL); DEXIT; return -1; } if (!lp) { LERROR(LELISTNULL); DEXIT; return -1; } ret = fprintf(fp, "%s{ /* LIST BEGIN */\n", space); ret = fprintf(fp, "%s/* LISTNAME */ \"%s\"\n", space, lGetListName(lp)); ret = fprintf(fp, "%s/* NUMBER OF ELEMENTS */ %d\n", space, lGetNumberOfElem(lp)); ret = lDumpDescr(fp, lGetListDescr(lp), indent); for (ep = lFirst(lp); ep && ret != EOF; ep = lNext(ep)) ret = lDumpElemFp(fp, ep, indent); ret = fprintf(fp, "%s} /* LIST END */\n", space); DEXIT; return (ret == EOF) ? -1 : 0; }
/****** cull/list/lWriteListXMLTo() ********************************************** * NAME * lWriteListXMLTo() -- Write a list to a file stream * * SYNOPSIS * void lWriteListXMLTo(const lList *lp, FILE *fp) * * FUNCTION * Write a list to a file stream in XML format * * INPUTS * const lList *lp - list * int nesting_level - current nesting level * FILE *fp - file stream * * NOTE: * MT-NOTE: is thread save, works only on the objects which are passed in * *******************************************************************************/ static void lWriteListXML_(const lList *lp, int nesting_level, FILE *fp, int ignore_cull_name) { lListElem *ep; char indent[128]; int i; bool is_XML_elem = false; dstring attr = DSTRING_INIT; bool is_attr = false; DENTER(CULL_LAYER, "lWriteListXML_"); if (!lp) { LERROR(LELISTNULL); DEXIT; return; } { int max = nesting_level * 2; if (max > 128) max = 128; for (i = 0; i < max; i++) indent[i] = ' '; indent[i] = '\0'; } for_each(ep, lp) { is_XML_elem = false; is_attr = false; if (lGetPosViaElem(ep, XMLE_Attribute, SGE_NO_ABORT) != -1) { sge_dstring_clear(&attr); is_attr = lAttributesToString_(lGetList(ep, XMLE_Attribute), &attr); is_XML_elem = true; } if (is_XML_elem && (lGetBool(ep, XMLE_Print))) { lListElem *elem = lGetObject(ep, XMLE_Element); if (!fp) { if (lGetString(elem, XMLA_Value) != NULL) { DPRINTF(("%s<%s%s>", indent, lGetString(elem, XMLA_Name), (is_attr?sge_dstring_get_string(&attr):""))); DPRINTF(("%s", lGetString(elem, XMLA_Value))); lWriteListXML_(lGetList(ep, XMLE_List), nesting_level+1, fp, ignore_cull_name); DPRINTF(("</%s>\n", lGetString(elem, XMLA_Name))); } else { DPRINTF(("%s<%s%s>\n", indent, lGetString(elem, XMLA_Name), (is_attr?sge_dstring_get_string(&attr):""))); lWriteListXML_(lGetList(ep, XMLE_List), nesting_level+1, fp, ignore_cull_name); DPRINTF(("%s</%s>\n", indent,lGetString(elem, XMLA_Name))); } } else { if (lGetString(elem, XMLA_Value) != NULL) { fprintf(fp, "%s<%s%s>", indent, lGetString(elem, XMLA_Name), (is_attr?sge_dstring_get_string(&attr):"")); fprintf(fp, "%s", lGetString(elem, XMLA_Value)); lWriteListXML_(lGetList(ep, XMLE_List), nesting_level+1, fp, ignore_cull_name); fprintf(fp, "</%s>\n", lGetString(elem, XMLA_Name)); } else { fprintf(fp, "%s<%s%s>\n", indent, lGetString(elem, XMLA_Name), (is_attr?sge_dstring_get_string(&attr):"")); lWriteListXML_(lGetList(ep, XMLE_List), nesting_level+1, fp, ignore_cull_name); fprintf(fp, "%s</%s>\n", indent, lGetString(elem, XMLA_Name)); } } } else { const char* listName = lGetListName(lp); if (strcmp (listName, "No list name specified") == 0) { listName = "element"; } if (!fp) { DPRINTF(("%s<%s%s>\n", indent, listName, ((is_attr)?sge_dstring_get_string(&attr):""))); lWriteElemXML_(ep, nesting_level+1, NULL, ignore_cull_name); DPRINTF(("%s</%s>\n", indent, listName)); } else { fprintf(fp, "%s<%s%s>\n", indent, listName, ((is_attr)?sge_dstring_get_string(&attr):"")); lWriteElemXML_(ep, nesting_level+1, fp, ignore_cull_name); fprintf(fp, "%s</%s>\n", indent, listName); } } }