|  | @@ -146,24 +146,47 @@ char *cJSONUtils_FindPointerFromObjectTo(cJSON *object, cJSON *target)
 | 
	
		
			
				|  |  |      return 0;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -cJSON *cJSONUtils_GetPointer(cJSON *object,const char *pointer)
 | 
	
		
			
				|  |  | +cJSON *cJSONUtils_GetPointer(cJSON *object, const char *pointer)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -	while (*pointer++=='/' && object)
 | 
	
		
			
				|  |  | -	{
 | 
	
		
			
				|  |  | -		if (object->type==cJSON_Array)
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			int which=0; while (*pointer>='0' && *pointer<='9') which=(10*which) + *pointer++ - '0';
 | 
	
		
			
				|  |  | -			if (*pointer && *pointer!='/') return 0;
 | 
	
		
			
				|  |  | -			object=cJSON_GetArrayItem(object,which);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		else if (object->type==cJSON_Object)
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			object=object->child;	while (object && cJSONUtils_Pstrcasecmp(object->string,pointer)) object=object->next;	/* GetObjectItem. */
 | 
	
		
			
				|  |  | -			while (*pointer && *pointer!='/') pointer++;
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		else return 0;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -	return object;
 | 
	
		
			
				|  |  | +    /* follow path of the pointer */
 | 
	
		
			
				|  |  | +    while ((*pointer++ == '/') && object)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        if (object->type == cJSON_Array)
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            int which = 0;
 | 
	
		
			
				|  |  | +            /* parse array index */
 | 
	
		
			
				|  |  | +            while ((*pointer >= '0') && (*pointer <= '9'))
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                which = (10 * which) + (*pointer++ - '0');
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (*pointer && (*pointer != '/'))
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                /* not end of string or new path token */
 | 
	
		
			
				|  |  | +                return 0;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            object = cJSON_GetArrayItem(object, which);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else if (object->type == cJSON_Object)
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            object = object->child;
 | 
	
		
			
				|  |  | +            /* GetObjectItem. */
 | 
	
		
			
				|  |  | +            while (object && cJSONUtils_Pstrcasecmp(object->string, pointer))
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                object = object->next;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            /* skip to the next path token or end of string */
 | 
	
		
			
				|  |  | +            while (*pointer && (*pointer != '/'))
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                pointer++;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            return 0;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    return object;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /* JSON Patch implementation. */
 |