STRING_LIST* SplitStringByWhitespace ( IN CHAR8 *String ) /*++ Routine Description: Creates and returns a 'split' STRING_LIST by splitting the string on whitespace boundaries. Arguments: String The string to 'split' Returns: EFI_STATUS --*/ { CHAR8 *Pos; CHAR8 *EndOfSubString; CHAR8 *EndOfString; STRING_LIST *Output; UINTN Item; String = CloneString (String); if (String == NULL) { return NULL; } EndOfString = String + strlen (String); Output = NewStringList (); for (Pos = String, Item = 0; Pos < EndOfString; Item++) { while (isspace ((int)*Pos)) { Pos++; } for (EndOfSubString=Pos; (*EndOfSubString != '\0') && !isspace ((int)*EndOfSubString); EndOfSubString++ ) { } if (EndOfSubString == Pos) { break; } *EndOfSubString = '\0'; AppendCopyOfStringToList (&Output, Pos); Pos = EndOfSubString + 1; } free (String); return Output; }
//static GTree* CreateTree() static STRINGLISTCOMP* CreateTree() { STRINGLISTCOMP *list = NULL; if ( NewStringList( &list, "", "" ) != 0 ){ list = NULL; goto Err; } Err: return list; }
static void AddKeyAndTextToTree(xmlNodePtr xmlnode, STRINGLISTCOMP* tree) { char *key, *text; STRINGLISTCOMP *list = NULL; //if( !xmlnode->name || g_strcasecmp((const gchar *)xmlnode->name,"Item") != 0 ) if( !xmlnode->name ) return; key = (char *)xmlGetProp(xmlnode,(const xmlChar *)"key"); text = (char *)xmlNodeGetContent(xmlnode); if( key != NULL && text != NULL ) { //g_tree_insert(tree, (gpointer)key, (gpointer)text); NewStringList( &list, key, text ); AppendStringList( tree, list ); } }