예제 #1
0
int node2str(spConfigNode*node,str*string)
{
	int i;
	ENTRY;
	
	if(node->text)
		text2str(node->text,string);
	putStr(string,'<');
	for(i=0;i<(int)strlen(node->name);++i)
	{
		switch(node->name[i])
		{
			case '[':case '>': case '\\':
			case '"':case '/':
				putStr(string,'\\');
			default:
				putStr(string,node->name[i]);
		}
	}
	putStr(string,' ');
	for(i=0;i<node->numAttributes;++i)
	{
		attr2str(node->attributes[i],string);
	}
	if(node->numChildren)
	{
		putStr(string,'>');
		
		for(i=0;i<node->numChildren;++i)
		{
			node2str(node->children[i],string);
		}
		
		putStr(string,'<');
		putStr(string,'/');
		for(i=0;i<(int)strlen(node->name);++i)
		{
			switch(node->name[i])
			{
				case '[':case '>': case '\\':
				case '"':case '/':
					putStr(string,'\\');
				default:
					putStr(string,node->name[i]);
			}
		}		
		putStr(string,'>');
	}
	else
	{
		putStr(string,'/');
		putStr(string,'>');
	}
	
	return(0);
}
예제 #2
0
unsigned StringData::sweepAll() {
  auto& head = MM().getStringList();
  auto count = 0;
  for (StringDataNode *next, *n = head.next; n != &head; n = next) {
    count++;
    next = n->next;
    assert(next && uintptr_t(next) != kSmallFreeWord);
    assert(next && uintptr_t(next) != kMallocFreeWord);
    auto const s = node2str(n);
    assert(s->isShared());
    s->sharedPayload()->shared->getHandle()->unreference();
  }
  head.next = head.prev = &head;
  return count;
}
예제 #3
0
/* starts with an arbitrary 256 byte buffer.  as more junk is added, it
 * is realloc'd to be 2x larger
 * buffer is whole thing, location is current position offset
 */
char *spConfigSaveStr(spConfigNode*root)
{
	str *string;
	char *saved;
	ENTRY;
	
	string=(str*)malloc(sizeof(str));
	string->size=256;
	string->offset=0;
	string->string=(char*)malloc(sizeof(char)*256);		// 不足したら内部でreallocされる
	
	node2str(root,string);
	
	saved=string->string;
	free(string);
	
	return(saved);
	
/*	buffer=(char*)malloc(256);
	if(!buffer)
	{
		return NULL;
	}	

	if(root->text)
		ravsnprintf(buffer,&bufsize,&offset,"%s",root->text);
	if(root->values)
	{
		//warning, no vals in root
	}
	for(i=0;i<root->children;++i)
	{
		node2str(buffer,&bufsize,&offset,root->child[i],0);
	}
	return buffer;*/
}