json: fix PRId64 on Win32
OK we are fooled by the json lexer and parser. As we use %I64d to print 'long long' variables in Win32, but lexer and parser only deal with %lld but not %I64d, this patch add support for %I64d and solve 'info pci', 'powser_reset' and 'power_powerdown' assert failure in Win32. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
		
							parent
							
								
									2198a62eb2
								
							
						
					
					
						commit
						2c0d4b36e7
					
				
							
								
								
									
										16
									
								
								json-lexer.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								json-lexer.c
									
									
									
									
									
								
							| @ -54,6 +54,9 @@ enum json_lexer_state { | ||||
|     IN_ESCAPE, | ||||
|     IN_ESCAPE_L, | ||||
|     IN_ESCAPE_LL, | ||||
|     IN_ESCAPE_I, | ||||
|     IN_ESCAPE_I6, | ||||
|     IN_ESCAPE_I64, | ||||
|     IN_ESCAPE_DONE, | ||||
|     IN_WHITESPACE, | ||||
|     IN_OPERATOR_DONE, | ||||
| @ -223,6 +226,18 @@ static const uint8_t json_lexer[][256] =  { | ||||
|         ['l'] = IN_ESCAPE_LL, | ||||
|     }, | ||||
| 
 | ||||
|     [IN_ESCAPE_I64] = { | ||||
|         ['d'] = IN_ESCAPE_DONE, | ||||
|     }, | ||||
| 
 | ||||
|     [IN_ESCAPE_I6] = { | ||||
|         ['4'] = IN_ESCAPE_I64, | ||||
|     }, | ||||
| 
 | ||||
|     [IN_ESCAPE_I] = { | ||||
|         ['6'] = IN_ESCAPE_I6, | ||||
|     }, | ||||
| 
 | ||||
|     [IN_ESCAPE] = { | ||||
|         ['d'] = IN_ESCAPE_DONE, | ||||
|         ['i'] = IN_ESCAPE_DONE, | ||||
| @ -230,6 +245,7 @@ static const uint8_t json_lexer[][256] =  { | ||||
|         ['s'] = IN_ESCAPE_DONE, | ||||
|         ['f'] = IN_ESCAPE_DONE, | ||||
|         ['l'] = IN_ESCAPE_L, | ||||
|         ['I'] = IN_ESCAPE_I, | ||||
|     }, | ||||
| 
 | ||||
|     /* top level rule */ | ||||
|  | ||||
| @ -474,7 +474,8 @@ static QObject *parse_escape(JSONParserContext *ctxt, QList **tokens, va_list *a | ||||
|         obj = QOBJECT(qint_from_int(va_arg(*ap, int))); | ||||
|     } else if (token_is_escape(token, "%ld")) { | ||||
|         obj = QOBJECT(qint_from_int(va_arg(*ap, long))); | ||||
|     } else if (token_is_escape(token, "%lld")) { | ||||
|     } else if (token_is_escape(token, "%lld") || | ||||
|                token_is_escape(token, "%I64d")) { | ||||
|         obj = QOBJECT(qint_from_int(va_arg(*ap, long long))); | ||||
|     } else if (token_is_escape(token, "%s")) { | ||||
|         obj = QOBJECT(qstring_from_str(va_arg(*ap, const char *))); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Roy Tam
						Roy Tam