示例#1
0
/****** 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;

}
示例#2
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);
            }
        }
    }