|  | @@ -1709,9 +1709,38 @@ void cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *it
 | 
	
		
			
				|  |  |      cJSON_AddItemToObject(object, string, create_reference(item));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +cJSON *cJSON_DetachItemFromArray(cJSON *array, int which)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    cJSON *c = array->child;
 | 
	
		
			
				|  |  | +    while (c && (which > 0))
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        c = c->next;
 | 
	
		
			
				|  |  | +        which--;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if (!c)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        /* item doesn't exist */
 | 
	
		
			
				|  |  | +        return 0;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +	if (c->prev)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        /* not the first element */
 | 
	
		
			
				|  |  | +        c->prev->next = c->next;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if (c->next)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        c->next->prev = c->prev;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if (c==array->child)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        array->child = c->next;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    /* make sure the detached item doesn't point anywhere anymore */
 | 
	
		
			
				|  |  | +    c->prev = c->next = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    return c;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -cJSON *cJSON_DetachItemFromArray(cJSON *array,int which)			{cJSON *c=array->child;while (c && which>0) c=c->next,which--;if (!c) return 0;
 | 
	
		
			
				|  |  | -	if (c->prev) c->prev->next=c->next;if (c->next) c->next->prev=c->prev;if (c==array->child) array->child=c->next;c->prev=c->next=0;return c;}
 | 
	
		
			
				|  |  |  void   cJSON_DeleteItemFromArray(cJSON *array,int which)			{cJSON_Delete(cJSON_DetachItemFromArray(array,which));}
 | 
	
		
			
				|  |  |  cJSON *cJSON_DetachItemFromObject(cJSON *object,const char *string) {int i=0;cJSON *c=object->child;while (c && cJSON_strcasecmp(c->string,string)) i++,c=c->next;if (c) return cJSON_DetachItemFromArray(object,i);return 0;}
 | 
	
		
			
				|  |  |  void   cJSON_DeleteItemFromObject(cJSON *object,const char *string) {cJSON_Delete(cJSON_DetachItemFromObject(object,string));}
 |