diff options
| author | 2010-01-22 13:03:45 +0100 | |
|---|---|---|
| committer | 2010-01-22 13:03:45 +0100 | |
| commit | 808d461fea2c1b028e8fbb232eb09a94555856e8 (patch) | |
| tree | 4047ff7be8b40a2d972dc35443eb553b026c6e4e /tools | |
| parent | 647f1722c60fd7275e246b79f21aeeec819f35a5 (diff) | |
| download | libimobiledevice-808d461fea2c1b028e8fbb232eb09a94555856e8.tar.gz libimobiledevice-808d461fea2c1b028e8fbb232eb09a94555856e8.tar.bz2 | |
Support array nodes and add array index to key/value output in iphoneinfo
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/iphoneinfo.c | 72 | 
1 files changed, 50 insertions, 22 deletions
| diff --git a/tools/iphoneinfo.c b/tools/iphoneinfo.c index 4414b14..5ee92f5 100644 --- a/tools/iphoneinfo.c +++ b/tools/iphoneinfo.c @@ -71,7 +71,23 @@ static int is_domain_known(char *domain)  static void plist_node_to_string(plist_t node); -static void plist_children_to_string(plist_t node) +static void plist_array_to_string(plist_t node) +{ +	/* iterate over items */ +	int i, count; +	plist_t subnode = NULL; + +	count = plist_array_get_size(node); + +	for (i = 0; i < count; i++) { +		subnode = plist_array_get_item(node, i); +		printf("%*s", indent_level, ""); +		printf("%d: ", i); +		plist_node_to_string(subnode); +	} +} + +static void plist_dict_to_string(plist_t node)  {  	/* iterate over key/value pairs */  	plist_dict_iter it = NULL; @@ -83,7 +99,11 @@ static void plist_children_to_string(plist_t node)  	while (subnode)  	{  		printf("%*s", indent_level, ""); -		printf("%s: ", key); +		printf("%s", key); +		if (plist_get_node_type(subnode) == PLIST_ARRAY) +			printf("[%d]: ", plist_array_get_size(subnode)); +		else +			printf(": ");  		free(key);  		key = NULL;  		plist_node_to_string(subnode); @@ -152,10 +172,16 @@ static void plist_node_to_string(plist_t node)  		break;  	case PLIST_ARRAY: +		printf("\n"); +		indent_level++; +		plist_array_to_string(node); +		indent_level--; +		break; +  	case PLIST_DICT:  		printf("\n");  		indent_level++; -		plist_children_to_string(node); +		plist_dict_to_string(node);  		indent_level--;  		break; @@ -199,6 +225,7 @@ int main(int argc, char *argv[])  	char *xml_doc = NULL;  	uint32_t xml_length;  	plist_t node = NULL; +	plist_type node_type;  	uuid[0] = 0;  	/* parse cmdline args */ @@ -273,29 +300,30 @@ int main(int argc, char *argv[])  	}  	/* run query and output information */ -	if(lockdownd_get_value(client, domain, key, &node) == LOCKDOWN_E_SUCCESS) -	{ -		if (plist_get_node_type(node) == PLIST_DICT) { -			if (plist_dict_get_size(node)) -			{ -				switch (format) { -				case FORMAT_XML: -					plist_to_xml(node, &xml_doc, &xml_length); -					printf("%s", xml_doc); -					free(xml_doc); -					break; -				case FORMAT_KEY_VALUE: -				default: -					plist_children_to_string(node); +	if(lockdownd_get_value(client, domain, key, &node) == LOCKDOWN_E_SUCCESS) { +		if (node) { +			switch (format) { +			case FORMAT_XML: +				plist_to_xml(node, &xml_doc, &xml_length); +				printf("%s", xml_doc); +				free(xml_doc); +				break; +			case FORMAT_KEY_VALUE: +				node_type = plist_get_node_type(node); +				if (node_type == PLIST_DICT) { +					plist_dict_to_string(node); +				} else if (node_type == PLIST_ARRAY) { +					plist_array_to_string(node);  					break;  				} +			default: +				if (key != NULL) +					plist_node_to_string(node); +			break;  			} -		} -		else if(node && (key != NULL)) -			plist_node_to_string(node); -		if (node)  			plist_free(node); -		node = NULL; +			node = NULL; +		}  	}  	if (domain != NULL) | 
