From af165d254c89e12b158ee50d76cdf0a992cd551f Mon Sep 17 00:00:00 2001 From: Nguyen Anh Quynh Date: Mon, 9 Jan 2017 16:09:53 +0800 Subject: [PATCH] clean all qobject json code --- qemu/aarch64.h | 25 -- qemu/arm.h | 25 -- qemu/header_gen.py | 25 -- qemu/m68k.h | 25 -- qemu/mips.h | 25 -- qemu/mips64.h | 25 -- qemu/mips64el.h | 25 -- qemu/mipsel.h | 25 -- qemu/powerpc.h | 25 -- qemu/qobject/Makefile.objs | 1 - qemu/qobject/json-lexer.c | 373 ------------------ qemu/qobject/json-parser.c | 713 ----------------------------------- qemu/qobject/json-streamer.c | 122 ------ qemu/qobject/qjson.c | 284 -------------- qemu/sparc.h | 25 -- qemu/sparc64.h | 25 -- qemu/util/Makefile.objs | 2 +- qemu/util/unicode.c | 100 ----- qemu/x86_64.h | 25 -- 19 files changed, 1 insertion(+), 1894 deletions(-) delete mode 100644 qemu/qobject/json-lexer.c delete mode 100644 qemu/qobject/json-parser.c delete mode 100644 qemu/qobject/json-streamer.c delete mode 100644 qemu/qobject/qjson.c delete mode 100644 qemu/util/unicode.c diff --git a/qemu/aarch64.h b/qemu/aarch64.h index ff42e482..77b2c2f5 100644 --- a/qemu/aarch64.h +++ b/qemu/aarch64.h @@ -1960,19 +1960,6 @@ #define iwmmxt_store_reg iwmmxt_store_reg_aarch64 #define __jit_debug_descriptor __jit_debug_descriptor_aarch64 #define __jit_debug_register_code __jit_debug_register_code_aarch64 -#define json_lexer json_lexer_aarch64 -#define json_lexer_destroy json_lexer_destroy_aarch64 -#define json_lexer_feed json_lexer_feed_aarch64 -#define json_lexer_feed_char json_lexer_feed_char_aarch64 -#define json_lexer_flush json_lexer_flush_aarch64 -#define json_lexer_init json_lexer_init_aarch64 -#define json_message_parser_destroy json_message_parser_destroy_aarch64 -#define json_message_parser_feed json_message_parser_feed_aarch64 -#define json_message_parser_flush json_message_parser_flush_aarch64 -#define json_message_parser_init json_message_parser_init_aarch64 -#define json_message_process_token json_message_process_token_aarch64 -#define json_parser_parse json_parser_parse_aarch64 -#define json_parser_parse_err json_parser_parse_err_aarch64 #define kvm_to_cpreg_id kvm_to_cpreg_id_aarch64 #define last_ram_offset last_ram_offset_aarch64 #define ldl_be_p ldl_be_p_aarch64 @@ -2115,7 +2102,6 @@ #define mktimegm mktimegm_aarch64 #define module_call_init module_call_init_aarch64 #define module_load module_load_aarch64 -#define mod_utf8_codepoint mod_utf8_codepoint_aarch64 #define mpidr_cp_reginfo mpidr_cp_reginfo_aarch64 #define mpidr_read mpidr_read_aarch64 #define msr_mask msr_mask_aarch64 @@ -2229,7 +2215,6 @@ #define parse_array parse_array_aarch64 #define parse_error parse_error_aarch64 #define parse_escape parse_escape_aarch64 -#define parse_json parse_json_aarch64 #define parse_keyword parse_keyword_aarch64 #define parse_literal parse_literal_aarch64 #define parse_object parse_object_aarch64 @@ -2538,12 +2523,6 @@ #define qmp_output_visitor_cleanup qmp_output_visitor_cleanup_aarch64 #define qmp_output_visitor_new qmp_output_visitor_new_aarch64 #define qobject_decref qobject_decref_aarch64 -#define qobject_from_json qobject_from_json_aarch64 -#define qobject_from_jsonf qobject_from_jsonf_aarch64 -#define qobject_from_jsonv qobject_from_jsonv_aarch64 -#define qobject_incref qobject_incref_aarch64 -#define qobject_to_json qobject_to_json_aarch64 -#define qobject_to_json_pretty qobject_to_json_pretty_aarch64 #define qobject_to_qbool qobject_to_qbool_aarch64 #define qobject_to_qdict qobject_to_qdict_aarch64 #define qobject_to_qfloat qobject_to_qfloat_aarch64 @@ -3021,9 +3000,6 @@ #define tlb_set_dirty1 tlb_set_dirty1_aarch64 #define tlb_unprotect_code_phys tlb_unprotect_code_phys_aarch64 #define tlb_vaddr_to_host tlb_vaddr_to_host_aarch64 -#define to_json to_json_aarch64 -#define to_json_dict_iter to_json_dict_iter_aarch64 -#define to_json_list_iter to_json_list_iter_aarch64 #define token_get_type token_get_type_aarch64 #define token_get_value token_get_value_aarch64 #define token_is_escape token_is_escape_aarch64 @@ -3104,7 +3080,6 @@ #define vmsa_ttbcr_reset vmsa_ttbcr_reset_aarch64 #define vmsa_ttbcr_write vmsa_ttbcr_write_aarch64 #define vmsa_ttbr_write vmsa_ttbr_write_aarch64 -#define wchar_to_utf8 wchar_to_utf8_aarch64 #define write_cpustate_to_list write_cpustate_to_list_aarch64 #define write_list_to_cpustate write_list_to_cpustate_aarch64 #define write_raw_cp_reg write_raw_cp_reg_aarch64 diff --git a/qemu/arm.h b/qemu/arm.h index a714f217..64171b6c 100644 --- a/qemu/arm.h +++ b/qemu/arm.h @@ -1960,19 +1960,6 @@ #define iwmmxt_store_reg iwmmxt_store_reg_arm #define __jit_debug_descriptor __jit_debug_descriptor_arm #define __jit_debug_register_code __jit_debug_register_code_arm -#define json_lexer json_lexer_arm -#define json_lexer_destroy json_lexer_destroy_arm -#define json_lexer_feed json_lexer_feed_arm -#define json_lexer_feed_char json_lexer_feed_char_arm -#define json_lexer_flush json_lexer_flush_arm -#define json_lexer_init json_lexer_init_arm -#define json_message_parser_destroy json_message_parser_destroy_arm -#define json_message_parser_feed json_message_parser_feed_arm -#define json_message_parser_flush json_message_parser_flush_arm -#define json_message_parser_init json_message_parser_init_arm -#define json_message_process_token json_message_process_token_arm -#define json_parser_parse json_parser_parse_arm -#define json_parser_parse_err json_parser_parse_err_arm #define kvm_to_cpreg_id kvm_to_cpreg_id_arm #define last_ram_offset last_ram_offset_arm #define ldl_be_p ldl_be_p_arm @@ -2115,7 +2102,6 @@ #define mktimegm mktimegm_arm #define module_call_init module_call_init_arm #define module_load module_load_arm -#define mod_utf8_codepoint mod_utf8_codepoint_arm #define mpidr_cp_reginfo mpidr_cp_reginfo_arm #define mpidr_read mpidr_read_arm #define msr_mask msr_mask_arm @@ -2229,7 +2215,6 @@ #define parse_array parse_array_arm #define parse_error parse_error_arm #define parse_escape parse_escape_arm -#define parse_json parse_json_arm #define parse_keyword parse_keyword_arm #define parse_literal parse_literal_arm #define parse_object parse_object_arm @@ -2538,12 +2523,6 @@ #define qmp_output_visitor_cleanup qmp_output_visitor_cleanup_arm #define qmp_output_visitor_new qmp_output_visitor_new_arm #define qobject_decref qobject_decref_arm -#define qobject_from_json qobject_from_json_arm -#define qobject_from_jsonf qobject_from_jsonf_arm -#define qobject_from_jsonv qobject_from_jsonv_arm -#define qobject_incref qobject_incref_arm -#define qobject_to_json qobject_to_json_arm -#define qobject_to_json_pretty qobject_to_json_pretty_arm #define qobject_to_qbool qobject_to_qbool_arm #define qobject_to_qdict qobject_to_qdict_arm #define qobject_to_qfloat qobject_to_qfloat_arm @@ -3021,9 +3000,6 @@ #define tlb_set_dirty1 tlb_set_dirty1_arm #define tlb_unprotect_code_phys tlb_unprotect_code_phys_arm #define tlb_vaddr_to_host tlb_vaddr_to_host_arm -#define to_json to_json_arm -#define to_json_dict_iter to_json_dict_iter_arm -#define to_json_list_iter to_json_list_iter_arm #define token_get_type token_get_type_arm #define token_get_value token_get_value_arm #define token_is_escape token_is_escape_arm @@ -3104,7 +3080,6 @@ #define vmsa_ttbcr_reset vmsa_ttbcr_reset_arm #define vmsa_ttbcr_write vmsa_ttbcr_write_arm #define vmsa_ttbr_write vmsa_ttbr_write_arm -#define wchar_to_utf8 wchar_to_utf8_arm #define write_cpustate_to_list write_cpustate_to_list_arm #define write_list_to_cpustate write_list_to_cpustate_arm #define write_raw_cp_reg write_raw_cp_reg_arm diff --git a/qemu/header_gen.py b/qemu/header_gen.py index 1476fa7e..2185980d 100644 --- a/qemu/header_gen.py +++ b/qemu/header_gen.py @@ -1966,19 +1966,6 @@ symbols = ( 'iwmmxt_store_reg', '__jit_debug_descriptor', '__jit_debug_register_code', - 'json_lexer', - 'json_lexer_destroy', - 'json_lexer_feed', - 'json_lexer_feed_char', - 'json_lexer_flush', - 'json_lexer_init', - 'json_message_parser_destroy', - 'json_message_parser_feed', - 'json_message_parser_flush', - 'json_message_parser_init', - 'json_message_process_token', - 'json_parser_parse', - 'json_parser_parse_err', 'kvm_to_cpreg_id', 'last_ram_offset', 'ldl_be_p', @@ -2121,7 +2108,6 @@ symbols = ( 'mktimegm', 'module_call_init', 'module_load', - 'mod_utf8_codepoint', 'mpidr_cp_reginfo', 'mpidr_read', 'msr_mask', @@ -2235,7 +2221,6 @@ symbols = ( 'parse_array', 'parse_error', 'parse_escape', - 'parse_json', 'parse_keyword', 'parse_literal', 'parse_object', @@ -2544,12 +2529,6 @@ symbols = ( 'qmp_output_visitor_cleanup', 'qmp_output_visitor_new', 'qobject_decref', - 'qobject_from_json', - 'qobject_from_jsonf', - 'qobject_from_jsonv', - 'qobject_incref', - 'qobject_to_json', - 'qobject_to_json_pretty', 'qobject_to_qbool', 'qobject_to_qdict', 'qobject_to_qfloat', @@ -3027,9 +3006,6 @@ symbols = ( 'tlb_set_dirty1', 'tlb_unprotect_code_phys', 'tlb_vaddr_to_host', - 'to_json', - 'to_json_dict_iter', - 'to_json_list_iter', 'token_get_type', 'token_get_value', 'token_is_escape', @@ -3110,7 +3086,6 @@ symbols = ( 'vmsa_ttbcr_reset', 'vmsa_ttbcr_write', 'vmsa_ttbr_write', - 'wchar_to_utf8', 'write_cpustate_to_list', 'write_list_to_cpustate', 'write_raw_cp_reg', diff --git a/qemu/m68k.h b/qemu/m68k.h index c0b104d5..65d49a68 100644 --- a/qemu/m68k.h +++ b/qemu/m68k.h @@ -1960,19 +1960,6 @@ #define iwmmxt_store_reg iwmmxt_store_reg_m68k #define __jit_debug_descriptor __jit_debug_descriptor_m68k #define __jit_debug_register_code __jit_debug_register_code_m68k -#define json_lexer json_lexer_m68k -#define json_lexer_destroy json_lexer_destroy_m68k -#define json_lexer_feed json_lexer_feed_m68k -#define json_lexer_feed_char json_lexer_feed_char_m68k -#define json_lexer_flush json_lexer_flush_m68k -#define json_lexer_init json_lexer_init_m68k -#define json_message_parser_destroy json_message_parser_destroy_m68k -#define json_message_parser_feed json_message_parser_feed_m68k -#define json_message_parser_flush json_message_parser_flush_m68k -#define json_message_parser_init json_message_parser_init_m68k -#define json_message_process_token json_message_process_token_m68k -#define json_parser_parse json_parser_parse_m68k -#define json_parser_parse_err json_parser_parse_err_m68k #define kvm_to_cpreg_id kvm_to_cpreg_id_m68k #define last_ram_offset last_ram_offset_m68k #define ldl_be_p ldl_be_p_m68k @@ -2115,7 +2102,6 @@ #define mktimegm mktimegm_m68k #define module_call_init module_call_init_m68k #define module_load module_load_m68k -#define mod_utf8_codepoint mod_utf8_codepoint_m68k #define mpidr_cp_reginfo mpidr_cp_reginfo_m68k #define mpidr_read mpidr_read_m68k #define msr_mask msr_mask_m68k @@ -2229,7 +2215,6 @@ #define parse_array parse_array_m68k #define parse_error parse_error_m68k #define parse_escape parse_escape_m68k -#define parse_json parse_json_m68k #define parse_keyword parse_keyword_m68k #define parse_literal parse_literal_m68k #define parse_object parse_object_m68k @@ -2538,12 +2523,6 @@ #define qmp_output_visitor_cleanup qmp_output_visitor_cleanup_m68k #define qmp_output_visitor_new qmp_output_visitor_new_m68k #define qobject_decref qobject_decref_m68k -#define qobject_from_json qobject_from_json_m68k -#define qobject_from_jsonf qobject_from_jsonf_m68k -#define qobject_from_jsonv qobject_from_jsonv_m68k -#define qobject_incref qobject_incref_m68k -#define qobject_to_json qobject_to_json_m68k -#define qobject_to_json_pretty qobject_to_json_pretty_m68k #define qobject_to_qbool qobject_to_qbool_m68k #define qobject_to_qdict qobject_to_qdict_m68k #define qobject_to_qfloat qobject_to_qfloat_m68k @@ -3021,9 +3000,6 @@ #define tlb_set_dirty1 tlb_set_dirty1_m68k #define tlb_unprotect_code_phys tlb_unprotect_code_phys_m68k #define tlb_vaddr_to_host tlb_vaddr_to_host_m68k -#define to_json to_json_m68k -#define to_json_dict_iter to_json_dict_iter_m68k -#define to_json_list_iter to_json_list_iter_m68k #define token_get_type token_get_type_m68k #define token_get_value token_get_value_m68k #define token_is_escape token_is_escape_m68k @@ -3104,7 +3080,6 @@ #define vmsa_ttbcr_reset vmsa_ttbcr_reset_m68k #define vmsa_ttbcr_write vmsa_ttbcr_write_m68k #define vmsa_ttbr_write vmsa_ttbr_write_m68k -#define wchar_to_utf8 wchar_to_utf8_m68k #define write_cpustate_to_list write_cpustate_to_list_m68k #define write_list_to_cpustate write_list_to_cpustate_m68k #define write_raw_cp_reg write_raw_cp_reg_m68k diff --git a/qemu/mips.h b/qemu/mips.h index 006e43ba..a28e7e2b 100644 --- a/qemu/mips.h +++ b/qemu/mips.h @@ -1960,19 +1960,6 @@ #define iwmmxt_store_reg iwmmxt_store_reg_mips #define __jit_debug_descriptor __jit_debug_descriptor_mips #define __jit_debug_register_code __jit_debug_register_code_mips -#define json_lexer json_lexer_mips -#define json_lexer_destroy json_lexer_destroy_mips -#define json_lexer_feed json_lexer_feed_mips -#define json_lexer_feed_char json_lexer_feed_char_mips -#define json_lexer_flush json_lexer_flush_mips -#define json_lexer_init json_lexer_init_mips -#define json_message_parser_destroy json_message_parser_destroy_mips -#define json_message_parser_feed json_message_parser_feed_mips -#define json_message_parser_flush json_message_parser_flush_mips -#define json_message_parser_init json_message_parser_init_mips -#define json_message_process_token json_message_process_token_mips -#define json_parser_parse json_parser_parse_mips -#define json_parser_parse_err json_parser_parse_err_mips #define kvm_to_cpreg_id kvm_to_cpreg_id_mips #define last_ram_offset last_ram_offset_mips #define ldl_be_p ldl_be_p_mips @@ -2115,7 +2102,6 @@ #define mktimegm mktimegm_mips #define module_call_init module_call_init_mips #define module_load module_load_mips -#define mod_utf8_codepoint mod_utf8_codepoint_mips #define mpidr_cp_reginfo mpidr_cp_reginfo_mips #define mpidr_read mpidr_read_mips #define msr_mask msr_mask_mips @@ -2229,7 +2215,6 @@ #define parse_array parse_array_mips #define parse_error parse_error_mips #define parse_escape parse_escape_mips -#define parse_json parse_json_mips #define parse_keyword parse_keyword_mips #define parse_literal parse_literal_mips #define parse_object parse_object_mips @@ -2538,12 +2523,6 @@ #define qmp_output_visitor_cleanup qmp_output_visitor_cleanup_mips #define qmp_output_visitor_new qmp_output_visitor_new_mips #define qobject_decref qobject_decref_mips -#define qobject_from_json qobject_from_json_mips -#define qobject_from_jsonf qobject_from_jsonf_mips -#define qobject_from_jsonv qobject_from_jsonv_mips -#define qobject_incref qobject_incref_mips -#define qobject_to_json qobject_to_json_mips -#define qobject_to_json_pretty qobject_to_json_pretty_mips #define qobject_to_qbool qobject_to_qbool_mips #define qobject_to_qdict qobject_to_qdict_mips #define qobject_to_qfloat qobject_to_qfloat_mips @@ -3021,9 +3000,6 @@ #define tlb_set_dirty1 tlb_set_dirty1_mips #define tlb_unprotect_code_phys tlb_unprotect_code_phys_mips #define tlb_vaddr_to_host tlb_vaddr_to_host_mips -#define to_json to_json_mips -#define to_json_dict_iter to_json_dict_iter_mips -#define to_json_list_iter to_json_list_iter_mips #define token_get_type token_get_type_mips #define token_get_value token_get_value_mips #define token_is_escape token_is_escape_mips @@ -3104,7 +3080,6 @@ #define vmsa_ttbcr_reset vmsa_ttbcr_reset_mips #define vmsa_ttbcr_write vmsa_ttbcr_write_mips #define vmsa_ttbr_write vmsa_ttbr_write_mips -#define wchar_to_utf8 wchar_to_utf8_mips #define write_cpustate_to_list write_cpustate_to_list_mips #define write_list_to_cpustate write_list_to_cpustate_mips #define write_raw_cp_reg write_raw_cp_reg_mips diff --git a/qemu/mips64.h b/qemu/mips64.h index 64c0a10e..e7e7fd1f 100644 --- a/qemu/mips64.h +++ b/qemu/mips64.h @@ -1960,19 +1960,6 @@ #define iwmmxt_store_reg iwmmxt_store_reg_mips64 #define __jit_debug_descriptor __jit_debug_descriptor_mips64 #define __jit_debug_register_code __jit_debug_register_code_mips64 -#define json_lexer json_lexer_mips64 -#define json_lexer_destroy json_lexer_destroy_mips64 -#define json_lexer_feed json_lexer_feed_mips64 -#define json_lexer_feed_char json_lexer_feed_char_mips64 -#define json_lexer_flush json_lexer_flush_mips64 -#define json_lexer_init json_lexer_init_mips64 -#define json_message_parser_destroy json_message_parser_destroy_mips64 -#define json_message_parser_feed json_message_parser_feed_mips64 -#define json_message_parser_flush json_message_parser_flush_mips64 -#define json_message_parser_init json_message_parser_init_mips64 -#define json_message_process_token json_message_process_token_mips64 -#define json_parser_parse json_parser_parse_mips64 -#define json_parser_parse_err json_parser_parse_err_mips64 #define kvm_to_cpreg_id kvm_to_cpreg_id_mips64 #define last_ram_offset last_ram_offset_mips64 #define ldl_be_p ldl_be_p_mips64 @@ -2115,7 +2102,6 @@ #define mktimegm mktimegm_mips64 #define module_call_init module_call_init_mips64 #define module_load module_load_mips64 -#define mod_utf8_codepoint mod_utf8_codepoint_mips64 #define mpidr_cp_reginfo mpidr_cp_reginfo_mips64 #define mpidr_read mpidr_read_mips64 #define msr_mask msr_mask_mips64 @@ -2229,7 +2215,6 @@ #define parse_array parse_array_mips64 #define parse_error parse_error_mips64 #define parse_escape parse_escape_mips64 -#define parse_json parse_json_mips64 #define parse_keyword parse_keyword_mips64 #define parse_literal parse_literal_mips64 #define parse_object parse_object_mips64 @@ -2538,12 +2523,6 @@ #define qmp_output_visitor_cleanup qmp_output_visitor_cleanup_mips64 #define qmp_output_visitor_new qmp_output_visitor_new_mips64 #define qobject_decref qobject_decref_mips64 -#define qobject_from_json qobject_from_json_mips64 -#define qobject_from_jsonf qobject_from_jsonf_mips64 -#define qobject_from_jsonv qobject_from_jsonv_mips64 -#define qobject_incref qobject_incref_mips64 -#define qobject_to_json qobject_to_json_mips64 -#define qobject_to_json_pretty qobject_to_json_pretty_mips64 #define qobject_to_qbool qobject_to_qbool_mips64 #define qobject_to_qdict qobject_to_qdict_mips64 #define qobject_to_qfloat qobject_to_qfloat_mips64 @@ -3021,9 +3000,6 @@ #define tlb_set_dirty1 tlb_set_dirty1_mips64 #define tlb_unprotect_code_phys tlb_unprotect_code_phys_mips64 #define tlb_vaddr_to_host tlb_vaddr_to_host_mips64 -#define to_json to_json_mips64 -#define to_json_dict_iter to_json_dict_iter_mips64 -#define to_json_list_iter to_json_list_iter_mips64 #define token_get_type token_get_type_mips64 #define token_get_value token_get_value_mips64 #define token_is_escape token_is_escape_mips64 @@ -3104,7 +3080,6 @@ #define vmsa_ttbcr_reset vmsa_ttbcr_reset_mips64 #define vmsa_ttbcr_write vmsa_ttbcr_write_mips64 #define vmsa_ttbr_write vmsa_ttbr_write_mips64 -#define wchar_to_utf8 wchar_to_utf8_mips64 #define write_cpustate_to_list write_cpustate_to_list_mips64 #define write_list_to_cpustate write_list_to_cpustate_mips64 #define write_raw_cp_reg write_raw_cp_reg_mips64 diff --git a/qemu/mips64el.h b/qemu/mips64el.h index f5361965..cd1abb07 100644 --- a/qemu/mips64el.h +++ b/qemu/mips64el.h @@ -1960,19 +1960,6 @@ #define iwmmxt_store_reg iwmmxt_store_reg_mips64el #define __jit_debug_descriptor __jit_debug_descriptor_mips64el #define __jit_debug_register_code __jit_debug_register_code_mips64el -#define json_lexer json_lexer_mips64el -#define json_lexer_destroy json_lexer_destroy_mips64el -#define json_lexer_feed json_lexer_feed_mips64el -#define json_lexer_feed_char json_lexer_feed_char_mips64el -#define json_lexer_flush json_lexer_flush_mips64el -#define json_lexer_init json_lexer_init_mips64el -#define json_message_parser_destroy json_message_parser_destroy_mips64el -#define json_message_parser_feed json_message_parser_feed_mips64el -#define json_message_parser_flush json_message_parser_flush_mips64el -#define json_message_parser_init json_message_parser_init_mips64el -#define json_message_process_token json_message_process_token_mips64el -#define json_parser_parse json_parser_parse_mips64el -#define json_parser_parse_err json_parser_parse_err_mips64el #define kvm_to_cpreg_id kvm_to_cpreg_id_mips64el #define last_ram_offset last_ram_offset_mips64el #define ldl_be_p ldl_be_p_mips64el @@ -2115,7 +2102,6 @@ #define mktimegm mktimegm_mips64el #define module_call_init module_call_init_mips64el #define module_load module_load_mips64el -#define mod_utf8_codepoint mod_utf8_codepoint_mips64el #define mpidr_cp_reginfo mpidr_cp_reginfo_mips64el #define mpidr_read mpidr_read_mips64el #define msr_mask msr_mask_mips64el @@ -2229,7 +2215,6 @@ #define parse_array parse_array_mips64el #define parse_error parse_error_mips64el #define parse_escape parse_escape_mips64el -#define parse_json parse_json_mips64el #define parse_keyword parse_keyword_mips64el #define parse_literal parse_literal_mips64el #define parse_object parse_object_mips64el @@ -2538,12 +2523,6 @@ #define qmp_output_visitor_cleanup qmp_output_visitor_cleanup_mips64el #define qmp_output_visitor_new qmp_output_visitor_new_mips64el #define qobject_decref qobject_decref_mips64el -#define qobject_from_json qobject_from_json_mips64el -#define qobject_from_jsonf qobject_from_jsonf_mips64el -#define qobject_from_jsonv qobject_from_jsonv_mips64el -#define qobject_incref qobject_incref_mips64el -#define qobject_to_json qobject_to_json_mips64el -#define qobject_to_json_pretty qobject_to_json_pretty_mips64el #define qobject_to_qbool qobject_to_qbool_mips64el #define qobject_to_qdict qobject_to_qdict_mips64el #define qobject_to_qfloat qobject_to_qfloat_mips64el @@ -3021,9 +3000,6 @@ #define tlb_set_dirty1 tlb_set_dirty1_mips64el #define tlb_unprotect_code_phys tlb_unprotect_code_phys_mips64el #define tlb_vaddr_to_host tlb_vaddr_to_host_mips64el -#define to_json to_json_mips64el -#define to_json_dict_iter to_json_dict_iter_mips64el -#define to_json_list_iter to_json_list_iter_mips64el #define token_get_type token_get_type_mips64el #define token_get_value token_get_value_mips64el #define token_is_escape token_is_escape_mips64el @@ -3104,7 +3080,6 @@ #define vmsa_ttbcr_reset vmsa_ttbcr_reset_mips64el #define vmsa_ttbcr_write vmsa_ttbcr_write_mips64el #define vmsa_ttbr_write vmsa_ttbr_write_mips64el -#define wchar_to_utf8 wchar_to_utf8_mips64el #define write_cpustate_to_list write_cpustate_to_list_mips64el #define write_list_to_cpustate write_list_to_cpustate_mips64el #define write_raw_cp_reg write_raw_cp_reg_mips64el diff --git a/qemu/mipsel.h b/qemu/mipsel.h index 669c86e6..b79a103d 100644 --- a/qemu/mipsel.h +++ b/qemu/mipsel.h @@ -1960,19 +1960,6 @@ #define iwmmxt_store_reg iwmmxt_store_reg_mipsel #define __jit_debug_descriptor __jit_debug_descriptor_mipsel #define __jit_debug_register_code __jit_debug_register_code_mipsel -#define json_lexer json_lexer_mipsel -#define json_lexer_destroy json_lexer_destroy_mipsel -#define json_lexer_feed json_lexer_feed_mipsel -#define json_lexer_feed_char json_lexer_feed_char_mipsel -#define json_lexer_flush json_lexer_flush_mipsel -#define json_lexer_init json_lexer_init_mipsel -#define json_message_parser_destroy json_message_parser_destroy_mipsel -#define json_message_parser_feed json_message_parser_feed_mipsel -#define json_message_parser_flush json_message_parser_flush_mipsel -#define json_message_parser_init json_message_parser_init_mipsel -#define json_message_process_token json_message_process_token_mipsel -#define json_parser_parse json_parser_parse_mipsel -#define json_parser_parse_err json_parser_parse_err_mipsel #define kvm_to_cpreg_id kvm_to_cpreg_id_mipsel #define last_ram_offset last_ram_offset_mipsel #define ldl_be_p ldl_be_p_mipsel @@ -2115,7 +2102,6 @@ #define mktimegm mktimegm_mipsel #define module_call_init module_call_init_mipsel #define module_load module_load_mipsel -#define mod_utf8_codepoint mod_utf8_codepoint_mipsel #define mpidr_cp_reginfo mpidr_cp_reginfo_mipsel #define mpidr_read mpidr_read_mipsel #define msr_mask msr_mask_mipsel @@ -2229,7 +2215,6 @@ #define parse_array parse_array_mipsel #define parse_error parse_error_mipsel #define parse_escape parse_escape_mipsel -#define parse_json parse_json_mipsel #define parse_keyword parse_keyword_mipsel #define parse_literal parse_literal_mipsel #define parse_object parse_object_mipsel @@ -2538,12 +2523,6 @@ #define qmp_output_visitor_cleanup qmp_output_visitor_cleanup_mipsel #define qmp_output_visitor_new qmp_output_visitor_new_mipsel #define qobject_decref qobject_decref_mipsel -#define qobject_from_json qobject_from_json_mipsel -#define qobject_from_jsonf qobject_from_jsonf_mipsel -#define qobject_from_jsonv qobject_from_jsonv_mipsel -#define qobject_incref qobject_incref_mipsel -#define qobject_to_json qobject_to_json_mipsel -#define qobject_to_json_pretty qobject_to_json_pretty_mipsel #define qobject_to_qbool qobject_to_qbool_mipsel #define qobject_to_qdict qobject_to_qdict_mipsel #define qobject_to_qfloat qobject_to_qfloat_mipsel @@ -3021,9 +3000,6 @@ #define tlb_set_dirty1 tlb_set_dirty1_mipsel #define tlb_unprotect_code_phys tlb_unprotect_code_phys_mipsel #define tlb_vaddr_to_host tlb_vaddr_to_host_mipsel -#define to_json to_json_mipsel -#define to_json_dict_iter to_json_dict_iter_mipsel -#define to_json_list_iter to_json_list_iter_mipsel #define token_get_type token_get_type_mipsel #define token_get_value token_get_value_mipsel #define token_is_escape token_is_escape_mipsel @@ -3104,7 +3080,6 @@ #define vmsa_ttbcr_reset vmsa_ttbcr_reset_mipsel #define vmsa_ttbcr_write vmsa_ttbcr_write_mipsel #define vmsa_ttbr_write vmsa_ttbr_write_mipsel -#define wchar_to_utf8 wchar_to_utf8_mipsel #define write_cpustate_to_list write_cpustate_to_list_mipsel #define write_list_to_cpustate write_list_to_cpustate_mipsel #define write_raw_cp_reg write_raw_cp_reg_mipsel diff --git a/qemu/powerpc.h b/qemu/powerpc.h index 25017a93..fdf051d0 100644 --- a/qemu/powerpc.h +++ b/qemu/powerpc.h @@ -1960,19 +1960,6 @@ #define iwmmxt_store_reg iwmmxt_store_reg_powerpc #define __jit_debug_descriptor __jit_debug_descriptor_powerpc #define __jit_debug_register_code __jit_debug_register_code_powerpc -#define json_lexer json_lexer_powerpc -#define json_lexer_destroy json_lexer_destroy_powerpc -#define json_lexer_feed json_lexer_feed_powerpc -#define json_lexer_feed_char json_lexer_feed_char_powerpc -#define json_lexer_flush json_lexer_flush_powerpc -#define json_lexer_init json_lexer_init_powerpc -#define json_message_parser_destroy json_message_parser_destroy_powerpc -#define json_message_parser_feed json_message_parser_feed_powerpc -#define json_message_parser_flush json_message_parser_flush_powerpc -#define json_message_parser_init json_message_parser_init_powerpc -#define json_message_process_token json_message_process_token_powerpc -#define json_parser_parse json_parser_parse_powerpc -#define json_parser_parse_err json_parser_parse_err_powerpc #define kvm_to_cpreg_id kvm_to_cpreg_id_powerpc #define last_ram_offset last_ram_offset_powerpc #define ldl_be_p ldl_be_p_powerpc @@ -2115,7 +2102,6 @@ #define mktimegm mktimegm_powerpc #define module_call_init module_call_init_powerpc #define module_load module_load_powerpc -#define mod_utf8_codepoint mod_utf8_codepoint_powerpc #define mpidr_cp_reginfo mpidr_cp_reginfo_powerpc #define mpidr_read mpidr_read_powerpc #define msr_mask msr_mask_powerpc @@ -2229,7 +2215,6 @@ #define parse_array parse_array_powerpc #define parse_error parse_error_powerpc #define parse_escape parse_escape_powerpc -#define parse_json parse_json_powerpc #define parse_keyword parse_keyword_powerpc #define parse_literal parse_literal_powerpc #define parse_object parse_object_powerpc @@ -2538,12 +2523,6 @@ #define qmp_output_visitor_cleanup qmp_output_visitor_cleanup_powerpc #define qmp_output_visitor_new qmp_output_visitor_new_powerpc #define qobject_decref qobject_decref_powerpc -#define qobject_from_json qobject_from_json_powerpc -#define qobject_from_jsonf qobject_from_jsonf_powerpc -#define qobject_from_jsonv qobject_from_jsonv_powerpc -#define qobject_incref qobject_incref_powerpc -#define qobject_to_json qobject_to_json_powerpc -#define qobject_to_json_pretty qobject_to_json_pretty_powerpc #define qobject_to_qbool qobject_to_qbool_powerpc #define qobject_to_qdict qobject_to_qdict_powerpc #define qobject_to_qfloat qobject_to_qfloat_powerpc @@ -3021,9 +3000,6 @@ #define tlb_set_dirty1 tlb_set_dirty1_powerpc #define tlb_unprotect_code_phys tlb_unprotect_code_phys_powerpc #define tlb_vaddr_to_host tlb_vaddr_to_host_powerpc -#define to_json to_json_powerpc -#define to_json_dict_iter to_json_dict_iter_powerpc -#define to_json_list_iter to_json_list_iter_powerpc #define token_get_type token_get_type_powerpc #define token_get_value token_get_value_powerpc #define token_is_escape token_is_escape_powerpc @@ -3104,7 +3080,6 @@ #define vmsa_ttbcr_reset vmsa_ttbcr_reset_powerpc #define vmsa_ttbcr_write vmsa_ttbcr_write_powerpc #define vmsa_ttbr_write vmsa_ttbr_write_powerpc -#define wchar_to_utf8 wchar_to_utf8_powerpc #define write_cpustate_to_list write_cpustate_to_list_powerpc #define write_list_to_cpustate write_list_to_cpustate_powerpc #define write_raw_cp_reg write_raw_cp_reg_powerpc diff --git a/qemu/qobject/Makefile.objs b/qemu/qobject/Makefile.objs index c9ff59c6..8d852545 100644 --- a/qemu/qobject/Makefile.objs +++ b/qemu/qobject/Makefile.objs @@ -1,3 +1,2 @@ util-obj-y = qint.o qstring.o qdict.o qlist.o qfloat.o qbool.o -util-obj-y += qjson.o json-lexer.o json-streamer.o json-parser.o util-obj-y += qerror.o diff --git a/qemu/qobject/json-lexer.c b/qemu/qobject/json-lexer.c deleted file mode 100644 index b19623e2..00000000 --- a/qemu/qobject/json-lexer.c +++ /dev/null @@ -1,373 +0,0 @@ -/* - * JSON lexer - * - * Copyright IBM, Corp. 2009 - * - * Authors: - * Anthony Liguori - * - * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. - * See the COPYING.LIB file in the top-level directory. - * - */ - -#include "qapi/qmp/qstring.h" -#include "qapi/qmp/qlist.h" -#include "qapi/qmp/qdict.h" -#include "qapi/qmp/qint.h" -#include "qemu-common.h" -#include "qapi/qmp/json-lexer.h" - -#define MAX_TOKEN_SIZE (64ULL << 20) - -/* - * \"([^\\\"]|(\\\"\\'\\\\\\/\\b\\f\\n\\r\\t\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]))*\" - * '([^\\']|(\\\"\\'\\\\\\/\\b\\f\\n\\r\\t\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]))*' - * 0|([1-9][0-9]*(.[0-9]+)?([eE]([-+])?[0-9]+)) - * [{}\[\],:] - * [a-z]+ - * - */ - -enum json_lexer_state { - IN_ERROR = 0, - IN_DQ_UCODE3, - IN_DQ_UCODE2, - IN_DQ_UCODE1, - IN_DQ_UCODE0, - IN_DQ_STRING_ESCAPE, - IN_DQ_STRING, - IN_SQ_UCODE3, - IN_SQ_UCODE2, - IN_SQ_UCODE1, - IN_SQ_UCODE0, - IN_SQ_STRING_ESCAPE, - IN_SQ_STRING, - IN_ZERO, - IN_DIGITS, - IN_DIGIT, - IN_EXP_E, - IN_MANTISSA, - IN_MANTISSA_DIGITS, - IN_NONZERO_NUMBER, - IN_NEG_NONZERO_NUMBER, - IN_KEYWORD, - IN_ESCAPE, - IN_ESCAPE_L, - IN_ESCAPE_LL, - IN_ESCAPE_I, - IN_ESCAPE_I6, - IN_ESCAPE_I64, - IN_WHITESPACE, - IN_START, -}; - -#define TERMINAL(state) [0 ... 0x7F] = (state) - -/* Return whether TERMINAL is a terminal state and the transition to it - from OLD_STATE required lookahead. This happens whenever the table - below uses the TERMINAL macro. */ -#define TERMINAL_NEEDED_LOOKAHEAD(old_state, terminal) \ - (json_lexer[(old_state)][0] == (terminal)) - -static const uint8_t json_lexer[][256] = { - /* double quote string */ - [IN_DQ_UCODE3] = { - ['0' ... '9'] = IN_DQ_STRING, - ['a' ... 'f'] = IN_DQ_STRING, - ['A' ... 'F'] = IN_DQ_STRING, - }, - [IN_DQ_UCODE2] = { - ['0' ... '9'] = IN_DQ_UCODE3, - ['a' ... 'f'] = IN_DQ_UCODE3, - ['A' ... 'F'] = IN_DQ_UCODE3, - }, - [IN_DQ_UCODE1] = { - ['0' ... '9'] = IN_DQ_UCODE2, - ['a' ... 'f'] = IN_DQ_UCODE2, - ['A' ... 'F'] = IN_DQ_UCODE2, - }, - [IN_DQ_UCODE0] = { - ['0' ... '9'] = IN_DQ_UCODE1, - ['a' ... 'f'] = IN_DQ_UCODE1, - ['A' ... 'F'] = IN_DQ_UCODE1, - }, - [IN_DQ_STRING_ESCAPE] = { - ['b'] = IN_DQ_STRING, - ['f'] = IN_DQ_STRING, - ['n'] = IN_DQ_STRING, - ['r'] = IN_DQ_STRING, - ['t'] = IN_DQ_STRING, - ['/'] = IN_DQ_STRING, - ['\\'] = IN_DQ_STRING, - ['\''] = IN_DQ_STRING, - ['\"'] = IN_DQ_STRING, - ['u'] = IN_DQ_UCODE0, - }, - [IN_DQ_STRING] = { - [1 ... 0xBF] = IN_DQ_STRING, - [0xC2 ... 0xF4] = IN_DQ_STRING, - ['\\'] = IN_DQ_STRING_ESCAPE, - ['"'] = JSON_STRING, - }, - - /* single quote string */ - [IN_SQ_UCODE3] = { - ['0' ... '9'] = IN_SQ_STRING, - ['a' ... 'f'] = IN_SQ_STRING, - ['A' ... 'F'] = IN_SQ_STRING, - }, - [IN_SQ_UCODE2] = { - ['0' ... '9'] = IN_SQ_UCODE3, - ['a' ... 'f'] = IN_SQ_UCODE3, - ['A' ... 'F'] = IN_SQ_UCODE3, - }, - [IN_SQ_UCODE1] = { - ['0' ... '9'] = IN_SQ_UCODE2, - ['a' ... 'f'] = IN_SQ_UCODE2, - ['A' ... 'F'] = IN_SQ_UCODE2, - }, - [IN_SQ_UCODE0] = { - ['0' ... '9'] = IN_SQ_UCODE1, - ['a' ... 'f'] = IN_SQ_UCODE1, - ['A' ... 'F'] = IN_SQ_UCODE1, - }, - [IN_SQ_STRING_ESCAPE] = { - ['b'] = IN_SQ_STRING, - ['f'] = IN_SQ_STRING, - ['n'] = IN_SQ_STRING, - ['r'] = IN_SQ_STRING, - ['t'] = IN_SQ_STRING, - ['/'] = IN_SQ_STRING, - ['\\'] = IN_SQ_STRING, - ['\''] = IN_SQ_STRING, - ['\"'] = IN_SQ_STRING, - ['u'] = IN_SQ_UCODE0, - }, - [IN_SQ_STRING] = { - [1 ... 0xBF] = IN_SQ_STRING, - [0xC2 ... 0xF4] = IN_SQ_STRING, - ['\\'] = IN_SQ_STRING_ESCAPE, - ['\''] = JSON_STRING, - }, - - /* Zero */ - [IN_ZERO] = { - TERMINAL(JSON_INTEGER), - ['0' ... '9'] = IN_ERROR, - ['.'] = IN_MANTISSA, - }, - - /* Float */ - [IN_DIGITS] = { - TERMINAL(JSON_FLOAT), - ['0' ... '9'] = IN_DIGITS, - }, - - [IN_DIGIT] = { - ['0' ... '9'] = IN_DIGITS, - }, - - [IN_EXP_E] = { - ['-'] = IN_DIGIT, - ['+'] = IN_DIGIT, - ['0' ... '9'] = IN_DIGITS, - }, - - [IN_MANTISSA_DIGITS] = { - TERMINAL(JSON_FLOAT), - ['0' ... '9'] = IN_MANTISSA_DIGITS, - ['e'] = IN_EXP_E, - ['E'] = IN_EXP_E, - }, - - [IN_MANTISSA] = { - ['0' ... '9'] = IN_MANTISSA_DIGITS, - }, - - /* Number */ - [IN_NONZERO_NUMBER] = { - TERMINAL(JSON_INTEGER), - ['0' ... '9'] = IN_NONZERO_NUMBER, - ['e'] = IN_EXP_E, - ['E'] = IN_EXP_E, - ['.'] = IN_MANTISSA, - }, - - [IN_NEG_NONZERO_NUMBER] = { - ['0'] = IN_ZERO, - ['1' ... '9'] = IN_NONZERO_NUMBER, - }, - - /* keywords */ - [IN_KEYWORD] = { - TERMINAL(JSON_KEYWORD), - ['a' ... 'z'] = IN_KEYWORD, - }, - - /* whitespace */ - [IN_WHITESPACE] = { - TERMINAL(JSON_SKIP), - [' '] = IN_WHITESPACE, - ['\t'] = IN_WHITESPACE, - ['\r'] = IN_WHITESPACE, - ['\n'] = IN_WHITESPACE, - }, - - /* escape */ - [IN_ESCAPE_LL] = { - ['d'] = JSON_ESCAPE, - }, - - [IN_ESCAPE_L] = { - ['d'] = JSON_ESCAPE, - ['l'] = IN_ESCAPE_LL, - }, - - [IN_ESCAPE_I64] = { - ['d'] = JSON_ESCAPE, - }, - - [IN_ESCAPE_I6] = { - ['4'] = IN_ESCAPE_I64, - }, - - [IN_ESCAPE_I] = { - ['6'] = IN_ESCAPE_I6, - }, - - [IN_ESCAPE] = { - ['d'] = JSON_ESCAPE, - ['i'] = JSON_ESCAPE, - ['p'] = JSON_ESCAPE, - ['s'] = JSON_ESCAPE, - ['f'] = JSON_ESCAPE, - ['l'] = IN_ESCAPE_L, - ['I'] = IN_ESCAPE_I, - }, - - /* top level rule */ - [IN_START] = { - ['"'] = IN_DQ_STRING, - ['\''] = IN_SQ_STRING, - ['0'] = IN_ZERO, - ['1' ... '9'] = IN_NONZERO_NUMBER, - ['-'] = IN_NEG_NONZERO_NUMBER, - ['{'] = JSON_OPERATOR, - ['}'] = JSON_OPERATOR, - ['['] = JSON_OPERATOR, - [']'] = JSON_OPERATOR, - [','] = JSON_OPERATOR, - [':'] = JSON_OPERATOR, - ['a' ... 'z'] = IN_KEYWORD, - ['%'] = IN_ESCAPE, - [' '] = IN_WHITESPACE, - ['\t'] = IN_WHITESPACE, - ['\r'] = IN_WHITESPACE, - ['\n'] = IN_WHITESPACE, - }, -}; - -void json_lexer_init(JSONLexer *lexer, JSONLexerEmitter func) -{ - lexer->emit = func; - lexer->state = IN_START; - lexer->token = qstring_new(); - lexer->x = lexer->y = 0; -} - -static int json_lexer_feed_char(JSONLexer *lexer, char ch, bool flush) -{ - int char_consumed, new_state; - - lexer->x++; - if (ch == '\n') { - lexer->x = 0; - lexer->y++; - } - - do { - new_state = json_lexer[lexer->state][(uint8_t)ch]; - char_consumed = !TERMINAL_NEEDED_LOOKAHEAD(lexer->state, new_state); - if (char_consumed) { - qstring_append_chr(lexer->token, ch); - } - - switch (new_state) { - case JSON_OPERATOR: - case JSON_ESCAPE: - case JSON_INTEGER: - case JSON_FLOAT: - case JSON_KEYWORD: - case JSON_STRING: - lexer->emit(lexer, lexer->token, new_state, lexer->x, lexer->y); - /* fall through */ - case JSON_SKIP: - QDECREF(lexer->token); - lexer->token = qstring_new(); - new_state = IN_START; - break; - case IN_ERROR: - /* XXX: To avoid having previous bad input leaving the parser in an - * unresponsive state where we consume unpredictable amounts of - * subsequent "good" input, percolate this error state up to the - * tokenizer/parser by forcing a NULL object to be emitted, then - * reset state. - * - * Also note that this handling is required for reliable channel - * negotiation between QMP and the guest agent, since chr(0xFF) - * is placed at the beginning of certain events to ensure proper - * delivery when the channel is in an unknown state. chr(0xFF) is - * never a valid ASCII/UTF-8 sequence, so this should reliably - * induce an error/flush state. - */ - lexer->emit(lexer, lexer->token, JSON_ERROR, lexer->x, lexer->y); - QDECREF(lexer->token); - lexer->token = qstring_new(); - new_state = IN_START; - lexer->state = new_state; - return 0; - default: - break; - } - lexer->state = new_state; - } while (!char_consumed && !flush); - - /* Do not let a single token grow to an arbitrarily large size, - * this is a security consideration. - */ - if (lexer->token->length > MAX_TOKEN_SIZE) { - lexer->emit(lexer, lexer->token, lexer->state, lexer->x, lexer->y); - QDECREF(lexer->token); - lexer->token = qstring_new(); - lexer->state = IN_START; - } - - return 0; -} - -int json_lexer_feed(JSONLexer *lexer, const char *buffer, size_t size) -{ - size_t i; - - for (i = 0; i < size; i++) { - int err; - - err = json_lexer_feed_char(lexer, buffer[i], false); - if (err < 0) { - return err; - } - } - - return 0; -} - -int json_lexer_flush(JSONLexer *lexer) -{ - return lexer->state == IN_START ? 0 : json_lexer_feed_char(lexer, 0, true); -} - -void json_lexer_destroy(JSONLexer *lexer) -{ - QDECREF(lexer->token); -} diff --git a/qemu/qobject/json-parser.c b/qemu/qobject/json-parser.c deleted file mode 100644 index 4288267b..00000000 --- a/qemu/qobject/json-parser.c +++ /dev/null @@ -1,713 +0,0 @@ -/* - * JSON Parser - * - * Copyright IBM, Corp. 2009 - * - * Authors: - * Anthony Liguori - * - * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. - * See the COPYING.LIB file in the top-level directory. - * - */ - -#include - -#include "qemu-common.h" -#include "qapi/qmp/qstring.h" -#include "qapi/qmp/qint.h" -#include "qapi/qmp/qdict.h" -#include "qapi/qmp/qlist.h" -#include "qapi/qmp/qfloat.h" -#include "qapi/qmp/qbool.h" -#include "qapi/qmp/json-parser.h" -#include "qapi/qmp/json-lexer.h" -#include "qapi/qmp/qerror.h" - -typedef struct JSONParserContext -{ - Error *err; - struct { - QObject **buf; - size_t pos; - size_t count; - } tokens; -} JSONParserContext; - -#define BUG_ON(cond) assert(!(cond)) - -/** - * TODO - * - * 0) make errors meaningful again - * 1) add geometry information to tokens - * 3) should we return a parsed size? - * 4) deal with premature EOI - */ - -static QObject *parse_value(JSONParserContext *ctxt, va_list *ap); - -/** - * Token manipulators - * - * tokens are dictionaries that contain a type, a string value, and geometry information - * about a token identified by the lexer. These are routines that make working with - * these objects a bit easier. - */ -static const char *token_get_value(QObject *obj) -{ - return qdict_get_str(qobject_to_qdict(obj), "token"); -} - -static JSONTokenType token_get_type(QObject *obj) -{ - return qdict_get_int(qobject_to_qdict(obj), "type"); -} - -static int token_is_operator(QObject *obj, char op) -{ - const char *val; - - if (token_get_type(obj) != JSON_OPERATOR) { - return 0; - } - - val = token_get_value(obj); - - return (val[0] == op) && (val[1] == 0); -} - -static int token_is_keyword(QObject *obj, const char *value) -{ - if (token_get_type(obj) != JSON_KEYWORD) { - return 0; - } - - return strcmp(token_get_value(obj), value) == 0; -} - -static int token_is_escape(QObject *obj, const char *value) -{ - if (token_get_type(obj) != JSON_ESCAPE) { - return 0; - } - - return (strcmp(token_get_value(obj), value) == 0); -} - -/** - * Error handler - */ -static void GCC_FMT_ATTR(3, 4) parse_error(JSONParserContext *ctxt, - QObject *token, const char *msg, ...) -{ - va_list ap; - char message[1024]; - va_start(ap, msg); - vsnprintf(message, sizeof(message), msg, ap); - va_end(ap); - if (ctxt->err) { - error_free(ctxt->err); - ctxt->err = NULL; - } - error_setg(&ctxt->err, "JSON parse error, %s", message); -} - -/** - * String helpers - * - * These helpers are used to unescape strings. - */ -static void wchar_to_utf8(uint16_t wchar, char *buffer, size_t buffer_length) -{ - if (wchar <= 0x007F) { - BUG_ON(buffer_length < 2); - - buffer[0] = wchar & 0x7F; - buffer[1] = 0; - } else if (wchar <= 0x07FF) { - BUG_ON(buffer_length < 3); - - buffer[0] = 0xC0 | ((wchar >> 6) & 0x1F); - buffer[1] = 0x80 | (wchar & 0x3F); - buffer[2] = 0; - } else { - BUG_ON(buffer_length < 4); - - buffer[0] = 0xE0 | ((wchar >> 12) & 0x0F); - buffer[1] = 0x80 | ((wchar >> 6) & 0x3F); - buffer[2] = 0x80 | (wchar & 0x3F); - buffer[3] = 0; - } -} - -static int hex2decimal(char ch) -{ - if (ch >= '0' && ch <= '9') { - return (ch - '0'); - } else if (ch >= 'a' && ch <= 'f') { - return 10 + (ch - 'a'); - } else if (ch >= 'A' && ch <= 'F') { - return 10 + (ch - 'A'); - } - - return -1; -} - -/** - * parse_string(): Parse a json string and return a QObject - * - * string - * "" - * " chars " - * chars - * char - * char chars - * char - * any-Unicode-character- - * except-"-or-\-or- - * control-character - * \" - * \\ - * \/ - * \b - * \f - * \n - * \r - * \t - * \u four-hex-digits - */ -static QString *qstring_from_escaped_str(JSONParserContext *ctxt, QObject *token) -{ - const char *ptr = token_get_value(token); - QString *str; - int double_quote = 1; - - if (*ptr == '"') { - double_quote = 1; - } else { - double_quote = 0; - } - ptr++; - - str = qstring_new(); - while (*ptr && - ((double_quote && *ptr != '"') || (!double_quote && *ptr != '\''))) { - if (*ptr == '\\') { - ptr++; - - switch (*ptr) { - case '"': - qstring_append(str, "\""); - ptr++; - break; - case '\'': - qstring_append(str, "'"); - ptr++; - break; - case '\\': - qstring_append(str, "\\"); - ptr++; - break; - case '/': - qstring_append(str, "/"); - ptr++; - break; - case 'b': - qstring_append(str, "\b"); - ptr++; - break; - case 'f': - qstring_append(str, "\f"); - ptr++; - break; - case 'n': - qstring_append(str, "\n"); - ptr++; - break; - case 'r': - qstring_append(str, "\r"); - ptr++; - break; - case 't': - qstring_append(str, "\t"); - ptr++; - break; - case 'u': { - uint16_t unicode_char = 0; - char utf8_char[4]; - int i = 0; - - ptr++; - - for (i = 0; i < 4; i++) { - if (qemu_isxdigit(*ptr)) { - unicode_char |= hex2decimal(*ptr) << ((3 - i) * 4); - } else { - parse_error(ctxt, token, - "invalid hex escape sequence in string"); - goto out; - } - ptr++; - } - - wchar_to_utf8(unicode_char, utf8_char, sizeof(utf8_char)); - qstring_append(str, utf8_char); - } break; - default: - parse_error(ctxt, token, "invalid escape sequence in string"); - goto out; - } - } else { - char dummy[2]; - - dummy[0] = *ptr++; - dummy[1] = 0; - - qstring_append(str, dummy); - } - } - - return str; - -out: - QDECREF(str); - return NULL; -} - -static QObject *parser_context_pop_token(JSONParserContext *ctxt) -{ - QObject *token; - g_assert(ctxt->tokens.pos < ctxt->tokens.count); - token = ctxt->tokens.buf[ctxt->tokens.pos]; - ctxt->tokens.pos++; - return token; -} - -/* Note: parser_context_{peek|pop}_token do not increment the - * token object's refcount. In both cases the references will continue - * to be tracked and cleaned up in parser_context_free(), so do not - * attempt to free the token object. - */ -static QObject *parser_context_peek_token(JSONParserContext *ctxt) -{ - QObject *token; - g_assert(ctxt->tokens.pos < ctxt->tokens.count); - token = ctxt->tokens.buf[ctxt->tokens.pos]; - return token; -} - -static JSONParserContext parser_context_save(JSONParserContext *ctxt) -{ - JSONParserContext saved_ctxt = {0}; - saved_ctxt.tokens.pos = ctxt->tokens.pos; - saved_ctxt.tokens.count = ctxt->tokens.count; - saved_ctxt.tokens.buf = ctxt->tokens.buf; - return saved_ctxt; -} - -static void parser_context_restore(JSONParserContext *ctxt, - JSONParserContext saved_ctxt) -{ - ctxt->tokens.pos = saved_ctxt.tokens.pos; - ctxt->tokens.count = saved_ctxt.tokens.count; - ctxt->tokens.buf = saved_ctxt.tokens.buf; -} - -static void tokens_append_from_iter(QObject *obj, void *opaque) -{ - JSONParserContext *ctxt = opaque; - g_assert(ctxt->tokens.pos < ctxt->tokens.count); - ctxt->tokens.buf[ctxt->tokens.pos++] = obj; - qobject_incref(obj); -} - -static JSONParserContext *parser_context_new(QList *tokens) -{ - JSONParserContext *ctxt; - size_t count; - - if (!tokens) { - return NULL; - } - - count = qlist_size(tokens); - if (count == 0) { - return NULL; - } - - ctxt = g_malloc0(sizeof(JSONParserContext)); - ctxt->tokens.pos = 0; - ctxt->tokens.count = count; - ctxt->tokens.buf = g_malloc(count * sizeof(QObject *)); - qlist_iter(tokens, tokens_append_from_iter, ctxt); - ctxt->tokens.pos = 0; - - return ctxt; -} - -/* to support error propagation, ctxt->err must be freed separately */ -static void parser_context_free(JSONParserContext *ctxt) -{ - int i; - if (ctxt) { - for (i = 0; i < ctxt->tokens.count; i++) { - qobject_decref(ctxt->tokens.buf[i]); - } - g_free(ctxt->tokens.buf); - g_free(ctxt); - } -} - -/** - * Parsing rules - */ -static int parse_pair(JSONParserContext *ctxt, QDict *dict, va_list *ap) -{ - QObject *key = NULL, *token = NULL, *value, *peek; - JSONParserContext saved_ctxt = parser_context_save(ctxt); - - peek = parser_context_peek_token(ctxt); - if (peek == NULL) { - parse_error(ctxt, NULL, "premature EOI"); - goto out; - } - - key = parse_value(ctxt, ap); - if (!key || qobject_type(key) != QTYPE_QSTRING) { - parse_error(ctxt, peek, "key is not a string in object"); - goto out; - } - - token = parser_context_pop_token(ctxt); - if (token == NULL) { - parse_error(ctxt, NULL, "premature EOI"); - goto out; - } - - if (!token_is_operator(token, ':')) { - parse_error(ctxt, token, "missing : in object pair"); - goto out; - } - - value = parse_value(ctxt, ap); - if (value == NULL) { - parse_error(ctxt, token, "Missing value in dict"); - goto out; - } - - qdict_put_obj(dict, qstring_get_str(qobject_to_qstring(key)), value); - - qobject_decref(key); - - return 0; - -out: - parser_context_restore(ctxt, saved_ctxt); - qobject_decref(key); - - return -1; -} - -static QObject *parse_object(JSONParserContext *ctxt, va_list *ap) -{ - QDict *dict = NULL; - QObject *token, *peek; - JSONParserContext saved_ctxt = parser_context_save(ctxt); - - token = parser_context_pop_token(ctxt); - if (token == NULL) { - goto out; - } - - if (!token_is_operator(token, '{')) { - goto out; - } - - dict = qdict_new(); - - peek = parser_context_peek_token(ctxt); - if (peek == NULL) { - parse_error(ctxt, NULL, "premature EOI"); - goto out; - } - - if (!token_is_operator(peek, '}')) { - if (parse_pair(ctxt, dict, ap) == -1) { - goto out; - } - - token = parser_context_pop_token(ctxt); - if (token == NULL) { - parse_error(ctxt, NULL, "premature EOI"); - goto out; - } - - while (!token_is_operator(token, '}')) { - if (!token_is_operator(token, ',')) { - parse_error(ctxt, token, "expected separator in dict"); - goto out; - } - - if (parse_pair(ctxt, dict, ap) == -1) { - goto out; - } - - token = parser_context_pop_token(ctxt); - if (token == NULL) { - parse_error(ctxt, NULL, "premature EOI"); - goto out; - } - } - } else { - (void)parser_context_pop_token(ctxt); - } - - return QOBJECT(dict); - -out: - parser_context_restore(ctxt, saved_ctxt); - QDECREF(dict); - return NULL; -} - -static QObject *parse_array(JSONParserContext *ctxt, va_list *ap) -{ - QList *list = NULL; - QObject *token, *peek; - JSONParserContext saved_ctxt = parser_context_save(ctxt); - - token = parser_context_pop_token(ctxt); - if (token == NULL) { - goto out; - } - - if (!token_is_operator(token, '[')) { - goto out; - } - - list = qlist_new(); - - peek = parser_context_peek_token(ctxt); - if (peek == NULL) { - parse_error(ctxt, NULL, "premature EOI"); - goto out; - } - - if (!token_is_operator(peek, ']')) { - QObject *obj; - - obj = parse_value(ctxt, ap); - if (obj == NULL) { - parse_error(ctxt, token, "expecting value"); - goto out; - } - - qlist_append_obj(list, obj); - - token = parser_context_pop_token(ctxt); - if (token == NULL) { - parse_error(ctxt, NULL, "premature EOI"); - goto out; - } - - while (!token_is_operator(token, ']')) { - if (!token_is_operator(token, ',')) { - parse_error(ctxt, token, "expected separator in list"); - goto out; - } - - obj = parse_value(ctxt, ap); - if (obj == NULL) { - parse_error(ctxt, token, "expecting value"); - goto out; - } - - qlist_append_obj(list, obj); - - token = parser_context_pop_token(ctxt); - if (token == NULL) { - parse_error(ctxt, NULL, "premature EOI"); - goto out; - } - } - } else { - (void)parser_context_pop_token(ctxt); - } - - return QOBJECT(list); - -out: - parser_context_restore(ctxt, saved_ctxt); - QDECREF(list); - return NULL; -} - -static QObject *parse_keyword(JSONParserContext *ctxt) -{ - QObject *token, *ret; - JSONParserContext saved_ctxt = parser_context_save(ctxt); - - token = parser_context_pop_token(ctxt); - if (token == NULL) { - goto out; - } - - if (token_get_type(token) != JSON_KEYWORD) { - goto out; - } - - if (token_is_keyword(token, "true")) { - ret = QOBJECT(qbool_from_int(true)); - } else if (token_is_keyword(token, "false")) { - ret = QOBJECT(qbool_from_int(false)); - } else { - parse_error(ctxt, token, "invalid keyword `%s'", token_get_value(token)); - goto out; - } - - return ret; - -out: - parser_context_restore(ctxt, saved_ctxt); - - return NULL; -} - -static QObject *parse_escape(JSONParserContext *ctxt, va_list *ap) -{ - QObject *token = NULL, *obj; - JSONParserContext saved_ctxt = parser_context_save(ctxt); - - if (ap == NULL) { - goto out; - } - - token = parser_context_pop_token(ctxt); - if (token == NULL) { - goto out; - } - - if (token_is_escape(token, "%p")) { - obj = va_arg(*ap, QObject *); - } else if (token_is_escape(token, "%i")) { - obj = QOBJECT(qbool_from_int(va_arg(*ap, int))); - } else if (token_is_escape(token, "%d")) { - 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") || - 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 *))); - } else if (token_is_escape(token, "%f")) { - obj = QOBJECT(qfloat_from_double(va_arg(*ap, double))); - } else { - goto out; - } - - return obj; - -out: - parser_context_restore(ctxt, saved_ctxt); - - return NULL; -} - -static QObject *parse_literal(JSONParserContext *ctxt) -{ - QObject *token, *obj; - JSONParserContext saved_ctxt = parser_context_save(ctxt); - - token = parser_context_pop_token(ctxt); - if (token == NULL) { - goto out; - } - - switch (token_get_type(token)) { - case JSON_STRING: - obj = QOBJECT(qstring_from_escaped_str(ctxt, token)); - break; - case JSON_INTEGER: { - /* A possibility exists that this is a whole-valued float where the - * fractional part was left out due to being 0 (.0). It's not a big - * deal to treat these as ints in the parser, so long as users of the - * resulting QObject know to expect a QInt in place of a QFloat in - * cases like these. - * - * However, in some cases these values will overflow/underflow a - * QInt/int64 container, thus we should assume these are to be handled - * as QFloats/doubles rather than silently changing their values. - * - * strtoll() indicates these instances by setting errno to ERANGE - */ - int64_t value; - - errno = 0; /* strtoll doesn't set errno on success */ - value = strtoll(token_get_value(token), NULL, 10); - if (errno != ERANGE) { - obj = QOBJECT(qint_from_int(value)); - break; - } - /* fall through to JSON_FLOAT */ - } - case JSON_FLOAT: - /* FIXME dependent on locale */ - obj = QOBJECT(qfloat_from_double(strtod(token_get_value(token), NULL))); - break; - default: - goto out; - } - - return obj; - -out: - parser_context_restore(ctxt, saved_ctxt); - - return NULL; -} - -static QObject *parse_value(JSONParserContext *ctxt, va_list *ap) -{ - QObject *obj; - - obj = parse_object(ctxt, ap); - if (obj == NULL) { - obj = parse_array(ctxt, ap); - } - if (obj == NULL) { - obj = parse_escape(ctxt, ap); - } - if (obj == NULL) { - obj = parse_keyword(ctxt); - } - if (obj == NULL) { - obj = parse_literal(ctxt); - } - - return obj; -} - -QObject *json_parser_parse(QList *tokens, va_list *ap) -{ - return json_parser_parse_err(tokens, ap, NULL); -} - -QObject *json_parser_parse_err(QList *tokens, va_list *ap, Error **errp) -{ - JSONParserContext *ctxt = parser_context_new(tokens); - QObject *result; - - if (!ctxt) { - return NULL; - } - - result = parse_value(ctxt, ap); - - error_propagate(errp, ctxt->err); - - parser_context_free(ctxt); - - return result; -} diff --git a/qemu/qobject/json-streamer.c b/qemu/qobject/json-streamer.c deleted file mode 100644 index 1b2f9b1d..00000000 --- a/qemu/qobject/json-streamer.c +++ /dev/null @@ -1,122 +0,0 @@ -/* - * JSON streaming support - * - * Copyright IBM, Corp. 2009 - * - * Authors: - * Anthony Liguori - * - * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. - * See the COPYING.LIB file in the top-level directory. - * - */ - -#include "qapi/qmp/qlist.h" -#include "qapi/qmp/qint.h" -#include "qapi/qmp/qdict.h" -#include "qemu-common.h" -#include "qapi/qmp/json-lexer.h" -#include "qapi/qmp/json-streamer.h" - -#define MAX_TOKEN_SIZE (64ULL << 20) -#define MAX_NESTING (1ULL << 10) - -static void json_message_process_token(JSONLexer *lexer, QString *token, JSONTokenType type, int x, int y) -{ - JSONMessageParser *parser = container_of(lexer, JSONMessageParser, lexer); - QDict *dict; - - if (type == JSON_OPERATOR) { - switch (qstring_get_str(token)[0]) { - case '{': - parser->brace_count++; - break; - case '}': - parser->brace_count--; - break; - case '[': - parser->bracket_count++; - break; - case ']': - parser->bracket_count--; - break; - default: - break; - } - } - - dict = qdict_new(); - qdict_put(dict, "type", qint_from_int(type)); - QINCREF(token); - qdict_put(dict, "token", token); - qdict_put(dict, "x", qint_from_int(x)); - qdict_put(dict, "y", qint_from_int(y)); - - parser->token_size += token->length; - - qlist_append(parser->tokens, dict); - - if (type == JSON_ERROR) { - goto out_emit_bad; - } else if (parser->brace_count < 0 || - parser->bracket_count < 0 || - (parser->brace_count == 0 && - parser->bracket_count == 0)) { - goto out_emit; - } else if (parser->token_size > MAX_TOKEN_SIZE || - parser->bracket_count > MAX_NESTING || - parser->brace_count > MAX_NESTING) { - /* Security consideration, we limit total memory allocated per object - * and the maximum recursion depth that a message can force. - */ - goto out_emit; - } - - return; - -out_emit_bad: - /* clear out token list and tell the parser to emit and error - * indication by passing it a NULL list - */ - QDECREF(parser->tokens); - parser->tokens = NULL; -out_emit: - /* send current list of tokens to parser and reset tokenizer */ - parser->brace_count = 0; - parser->bracket_count = 0; - parser->emit(parser, parser->tokens); - if (parser->tokens) { - QDECREF(parser->tokens); - } - parser->tokens = qlist_new(); - parser->token_size = 0; -} - -void json_message_parser_init(JSONMessageParser *parser, - void (*func)(JSONMessageParser *, QList *)) -{ - parser->emit = func; - parser->brace_count = 0; - parser->bracket_count = 0; - parser->tokens = qlist_new(); - parser->token_size = 0; - - json_lexer_init(&parser->lexer, json_message_process_token); -} - -int json_message_parser_feed(JSONMessageParser *parser, - const char *buffer, size_t size) -{ - return json_lexer_feed(&parser->lexer, buffer, size); -} - -int json_message_parser_flush(JSONMessageParser *parser) -{ - return json_lexer_flush(&parser->lexer); -} - -void json_message_parser_destroy(JSONMessageParser *parser) -{ - json_lexer_destroy(&parser->lexer); - QDECREF(parser->tokens); -} diff --git a/qemu/qobject/qjson.c b/qemu/qobject/qjson.c deleted file mode 100644 index 6cf25115..00000000 --- a/qemu/qobject/qjson.c +++ /dev/null @@ -1,284 +0,0 @@ -/* - * QObject JSON integration - * - * Copyright IBM, Corp. 2009 - * - * Authors: - * Anthony Liguori - * - * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. - * See the COPYING.LIB file in the top-level directory. - * - */ - -#include "qapi/qmp/json-lexer.h" -#include "qapi/qmp/json-parser.h" -#include "qapi/qmp/json-streamer.h" -#include "qapi/qmp/qjson.h" -#include "qapi/qmp/qint.h" -#include "qapi/qmp/qlist.h" -#include "qapi/qmp/qbool.h" -#include "qapi/qmp/qfloat.h" -#include "qapi/qmp/qdict.h" - -typedef struct JSONParsingState -{ - JSONMessageParser parser; - va_list *ap; - QObject *result; -} JSONParsingState; - -static void parse_json(JSONMessageParser *parser, QList *tokens) -{ - JSONParsingState *s = container_of(parser, JSONParsingState, parser); - s->result = json_parser_parse(tokens, s->ap); -} - -QObject *qobject_from_jsonv(const char *string, va_list *ap) -{ - JSONParsingState state = {}; - - state.ap = ap; - - json_message_parser_init(&state.parser, parse_json); - json_message_parser_feed(&state.parser, string, strlen(string)); - json_message_parser_flush(&state.parser); - json_message_parser_destroy(&state.parser); - - return state.result; -} - -QObject *qobject_from_json(const char *string) -{ - return qobject_from_jsonv(string, NULL); -} - -/* - * IMPORTANT: This function aborts on error, thus it must not - * be used with untrusted arguments. - */ -QObject *qobject_from_jsonf(const char *string, ...) -{ - QObject *obj; - va_list ap; - - va_start(ap, string); - obj = qobject_from_jsonv(string, &ap); - va_end(ap); - - assert(obj != NULL); - return obj; -} - -typedef struct ToJsonIterState -{ - int indent; - int pretty; - int count; - QString *str; -} ToJsonIterState; - -static void to_json(const QObject *obj, QString *str, int pretty, int indent); - -static void to_json_dict_iter(const char *key, QObject *obj, void *opaque) -{ - ToJsonIterState *s = opaque; - QString *qkey; - int j; - - if (s->count) - qstring_append(s->str, ", "); - - if (s->pretty) { - qstring_append(s->str, "\n"); - for (j = 0 ; j < s->indent ; j++) - qstring_append(s->str, " "); - } - - qkey = qstring_from_str(key); - to_json(QOBJECT(qkey), s->str, s->pretty, s->indent); - QDECREF(qkey); - - qstring_append(s->str, ": "); - to_json(obj, s->str, s->pretty, s->indent); - s->count++; -} - -static void to_json_list_iter(QObject *obj, void *opaque) -{ - ToJsonIterState *s = opaque; - int j; - - if (s->count) - qstring_append(s->str, ", "); - - if (s->pretty) { - qstring_append(s->str, "\n"); - for (j = 0 ; j < s->indent ; j++) - qstring_append(s->str, " "); - } - - to_json(obj, s->str, s->pretty, s->indent); - s->count++; -} - -static void to_json(const QObject *obj, QString *str, int pretty, int indent) -{ - switch (qobject_type(obj)) { - case QTYPE_QINT: { - QInt *val = qobject_to_qint(obj); - char buffer[1024]; - - snprintf(buffer, sizeof(buffer), "%" PRId64, qint_get_int(val)); - qstring_append(str, buffer); - break; - } - case QTYPE_QSTRING: { - QString *val = qobject_to_qstring(obj); - const char *ptr; - int cp; - char buf[16]; - char *end; - - ptr = qstring_get_str(val); - qstring_append(str, "\""); - - for (; *ptr; ptr = end) { - cp = mod_utf8_codepoint(ptr, 6, &end); - switch (cp) { - case '\"': - qstring_append(str, "\\\""); - break; - case '\\': - qstring_append(str, "\\\\"); - break; - case '\b': - qstring_append(str, "\\b"); - break; - case '\f': - qstring_append(str, "\\f"); - break; - case '\n': - qstring_append(str, "\\n"); - break; - case '\r': - qstring_append(str, "\\r"); - break; - case '\t': - qstring_append(str, "\\t"); - break; - default: - if (cp < 0) { - cp = 0xFFFD; /* replacement character */ - } - if (cp > 0xFFFF) { - /* beyond BMP; need a surrogate pair */ - snprintf(buf, sizeof(buf), "\\u%04X\\u%04X", - 0xD800 + ((cp - 0x10000) >> 10), - 0xDC00 + ((cp - 0x10000) & 0x3FF)); - } else if (cp < 0x20 || cp >= 0x7F) { - snprintf(buf, sizeof(buf), "\\u%04X", cp); - } else { - buf[0] = cp; - buf[1] = 0; - } - qstring_append(str, buf); - } - }; - - qstring_append(str, "\""); - break; - } - case QTYPE_QDICT: { - ToJsonIterState s; - QDict *val = qobject_to_qdict(obj); - - s.count = 0; - s.str = str; - s.indent = indent + 1; - s.pretty = pretty; - qstring_append(str, "{"); - qdict_iter(val, to_json_dict_iter, &s); - if (pretty) { - int j; - qstring_append(str, "\n"); - for (j = 0 ; j < indent ; j++) - qstring_append(str, " "); - } - qstring_append(str, "}"); - break; - } - case QTYPE_QLIST: { - ToJsonIterState s; - QList *val = qobject_to_qlist(obj); - - s.count = 0; - s.str = str; - s.indent = indent + 1; - s.pretty = pretty; - qstring_append(str, "["); - qlist_iter(val, (void *)to_json_list_iter, &s); - if (pretty) { - int j; - qstring_append(str, "\n"); - for (j = 0 ; j < indent ; j++) - qstring_append(str, " "); - } - qstring_append(str, "]"); - break; - } - case QTYPE_QFLOAT: { - QFloat *val = qobject_to_qfloat(obj); - char buffer[1024]; - int len; - - len = snprintf(buffer, sizeof(buffer), "%f", qfloat_get_double(val)); - while (len > 0 && buffer[len - 1] == '0') { - len--; - } - - if (len && buffer[len - 1] == '.') { - buffer[len - 1] = 0; - } else { - buffer[len] = 0; - } - - qstring_append(str, buffer); - break; - } - case QTYPE_QBOOL: { - QBool *val = qobject_to_qbool(obj); - - if (qbool_get_int(val)) { - qstring_append(str, "true"); - } else { - qstring_append(str, "false"); - } - break; - } - case QTYPE_QERROR: - /* XXX: should QError be emitted? */ - case QTYPE_NONE: - break; - case QTYPE_MAX: - abort(); - } -} - -QString *qobject_to_json(const QObject *obj) -{ - QString *str = qstring_new(); - - to_json(obj, str, 0, 0); - - return str; -} - -QString *qobject_to_json_pretty(const QObject *obj) -{ - QString *str = qstring_new(); - - to_json(obj, str, 1, 0); - - return str; -} diff --git a/qemu/sparc.h b/qemu/sparc.h index f08902ef..00c47d47 100644 --- a/qemu/sparc.h +++ b/qemu/sparc.h @@ -1960,19 +1960,6 @@ #define iwmmxt_store_reg iwmmxt_store_reg_sparc #define __jit_debug_descriptor __jit_debug_descriptor_sparc #define __jit_debug_register_code __jit_debug_register_code_sparc -#define json_lexer json_lexer_sparc -#define json_lexer_destroy json_lexer_destroy_sparc -#define json_lexer_feed json_lexer_feed_sparc -#define json_lexer_feed_char json_lexer_feed_char_sparc -#define json_lexer_flush json_lexer_flush_sparc -#define json_lexer_init json_lexer_init_sparc -#define json_message_parser_destroy json_message_parser_destroy_sparc -#define json_message_parser_feed json_message_parser_feed_sparc -#define json_message_parser_flush json_message_parser_flush_sparc -#define json_message_parser_init json_message_parser_init_sparc -#define json_message_process_token json_message_process_token_sparc -#define json_parser_parse json_parser_parse_sparc -#define json_parser_parse_err json_parser_parse_err_sparc #define kvm_to_cpreg_id kvm_to_cpreg_id_sparc #define last_ram_offset last_ram_offset_sparc #define ldl_be_p ldl_be_p_sparc @@ -2115,7 +2102,6 @@ #define mktimegm mktimegm_sparc #define module_call_init module_call_init_sparc #define module_load module_load_sparc -#define mod_utf8_codepoint mod_utf8_codepoint_sparc #define mpidr_cp_reginfo mpidr_cp_reginfo_sparc #define mpidr_read mpidr_read_sparc #define msr_mask msr_mask_sparc @@ -2229,7 +2215,6 @@ #define parse_array parse_array_sparc #define parse_error parse_error_sparc #define parse_escape parse_escape_sparc -#define parse_json parse_json_sparc #define parse_keyword parse_keyword_sparc #define parse_literal parse_literal_sparc #define parse_object parse_object_sparc @@ -2538,12 +2523,6 @@ #define qmp_output_visitor_cleanup qmp_output_visitor_cleanup_sparc #define qmp_output_visitor_new qmp_output_visitor_new_sparc #define qobject_decref qobject_decref_sparc -#define qobject_from_json qobject_from_json_sparc -#define qobject_from_jsonf qobject_from_jsonf_sparc -#define qobject_from_jsonv qobject_from_jsonv_sparc -#define qobject_incref qobject_incref_sparc -#define qobject_to_json qobject_to_json_sparc -#define qobject_to_json_pretty qobject_to_json_pretty_sparc #define qobject_to_qbool qobject_to_qbool_sparc #define qobject_to_qdict qobject_to_qdict_sparc #define qobject_to_qfloat qobject_to_qfloat_sparc @@ -3021,9 +3000,6 @@ #define tlb_set_dirty1 tlb_set_dirty1_sparc #define tlb_unprotect_code_phys tlb_unprotect_code_phys_sparc #define tlb_vaddr_to_host tlb_vaddr_to_host_sparc -#define to_json to_json_sparc -#define to_json_dict_iter to_json_dict_iter_sparc -#define to_json_list_iter to_json_list_iter_sparc #define token_get_type token_get_type_sparc #define token_get_value token_get_value_sparc #define token_is_escape token_is_escape_sparc @@ -3104,7 +3080,6 @@ #define vmsa_ttbcr_reset vmsa_ttbcr_reset_sparc #define vmsa_ttbcr_write vmsa_ttbcr_write_sparc #define vmsa_ttbr_write vmsa_ttbr_write_sparc -#define wchar_to_utf8 wchar_to_utf8_sparc #define write_cpustate_to_list write_cpustate_to_list_sparc #define write_list_to_cpustate write_list_to_cpustate_sparc #define write_raw_cp_reg write_raw_cp_reg_sparc diff --git a/qemu/sparc64.h b/qemu/sparc64.h index d1fe272f..ad0e248e 100644 --- a/qemu/sparc64.h +++ b/qemu/sparc64.h @@ -1960,19 +1960,6 @@ #define iwmmxt_store_reg iwmmxt_store_reg_sparc64 #define __jit_debug_descriptor __jit_debug_descriptor_sparc64 #define __jit_debug_register_code __jit_debug_register_code_sparc64 -#define json_lexer json_lexer_sparc64 -#define json_lexer_destroy json_lexer_destroy_sparc64 -#define json_lexer_feed json_lexer_feed_sparc64 -#define json_lexer_feed_char json_lexer_feed_char_sparc64 -#define json_lexer_flush json_lexer_flush_sparc64 -#define json_lexer_init json_lexer_init_sparc64 -#define json_message_parser_destroy json_message_parser_destroy_sparc64 -#define json_message_parser_feed json_message_parser_feed_sparc64 -#define json_message_parser_flush json_message_parser_flush_sparc64 -#define json_message_parser_init json_message_parser_init_sparc64 -#define json_message_process_token json_message_process_token_sparc64 -#define json_parser_parse json_parser_parse_sparc64 -#define json_parser_parse_err json_parser_parse_err_sparc64 #define kvm_to_cpreg_id kvm_to_cpreg_id_sparc64 #define last_ram_offset last_ram_offset_sparc64 #define ldl_be_p ldl_be_p_sparc64 @@ -2115,7 +2102,6 @@ #define mktimegm mktimegm_sparc64 #define module_call_init module_call_init_sparc64 #define module_load module_load_sparc64 -#define mod_utf8_codepoint mod_utf8_codepoint_sparc64 #define mpidr_cp_reginfo mpidr_cp_reginfo_sparc64 #define mpidr_read mpidr_read_sparc64 #define msr_mask msr_mask_sparc64 @@ -2229,7 +2215,6 @@ #define parse_array parse_array_sparc64 #define parse_error parse_error_sparc64 #define parse_escape parse_escape_sparc64 -#define parse_json parse_json_sparc64 #define parse_keyword parse_keyword_sparc64 #define parse_literal parse_literal_sparc64 #define parse_object parse_object_sparc64 @@ -2538,12 +2523,6 @@ #define qmp_output_visitor_cleanup qmp_output_visitor_cleanup_sparc64 #define qmp_output_visitor_new qmp_output_visitor_new_sparc64 #define qobject_decref qobject_decref_sparc64 -#define qobject_from_json qobject_from_json_sparc64 -#define qobject_from_jsonf qobject_from_jsonf_sparc64 -#define qobject_from_jsonv qobject_from_jsonv_sparc64 -#define qobject_incref qobject_incref_sparc64 -#define qobject_to_json qobject_to_json_sparc64 -#define qobject_to_json_pretty qobject_to_json_pretty_sparc64 #define qobject_to_qbool qobject_to_qbool_sparc64 #define qobject_to_qdict qobject_to_qdict_sparc64 #define qobject_to_qfloat qobject_to_qfloat_sparc64 @@ -3021,9 +3000,6 @@ #define tlb_set_dirty1 tlb_set_dirty1_sparc64 #define tlb_unprotect_code_phys tlb_unprotect_code_phys_sparc64 #define tlb_vaddr_to_host tlb_vaddr_to_host_sparc64 -#define to_json to_json_sparc64 -#define to_json_dict_iter to_json_dict_iter_sparc64 -#define to_json_list_iter to_json_list_iter_sparc64 #define token_get_type token_get_type_sparc64 #define token_get_value token_get_value_sparc64 #define token_is_escape token_is_escape_sparc64 @@ -3104,7 +3080,6 @@ #define vmsa_ttbcr_reset vmsa_ttbcr_reset_sparc64 #define vmsa_ttbcr_write vmsa_ttbcr_write_sparc64 #define vmsa_ttbr_write vmsa_ttbr_write_sparc64 -#define wchar_to_utf8 wchar_to_utf8_sparc64 #define write_cpustate_to_list write_cpustate_to_list_sparc64 #define write_list_to_cpustate write_list_to_cpustate_sparc64 #define write_raw_cp_reg write_raw_cp_reg_sparc64 diff --git a/qemu/util/Makefile.objs b/qemu/util/Makefile.objs index 9f4021b9..d3164206 100644 --- a/qemu/util/Makefile.objs +++ b/qemu/util/Makefile.objs @@ -1,4 +1,4 @@ -util-obj-y = cutils.o unicode.o qemu-timer-common.o +util-obj-y = cutils.o qemu-timer-common.o util-obj-$(CONFIG_WIN32) += oslib-win32.o qemu-thread-win32.o util-obj-$(CONFIG_POSIX) += oslib-posix.o qemu-thread-posix.o util-obj-y += module.o diff --git a/qemu/util/unicode.c b/qemu/util/unicode.c deleted file mode 100644 index d1c86588..00000000 --- a/qemu/util/unicode.c +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Dealing with Unicode - * - * Copyright (C) 2013 Red Hat, Inc. - * - * Authors: - * Markus Armbruster - * - * This work is licensed under the terms of the GNU GPL, version 2 or - * later. See the COPYING file in the top-level directory. - */ - -#include "qemu-common.h" - -/** - * mod_utf8_codepoint: - * @s: string encoded in modified UTF-8 - * @n: maximum number of bytes to read from @s, if less than 6 - * @end: set to end of sequence on return - * - * Convert the modified UTF-8 sequence at the start of @s. Modified - * UTF-8 is exactly like UTF-8, except U+0000 is encoded as - * "\xC0\x80". - * - * If @n is zero or @s points to a zero byte, the sequence is invalid, - * and @end is set to @s. - * - * If @s points to an impossible byte (0xFE or 0xFF) or a continuation - * byte, the sequence is invalid, and @end is set to @s + 1 - * - * Else, the first byte determines how many continuation bytes are - * expected. If there are fewer, the sequence is invalid, and @end is - * set to @s + 1 + actual number of continuation bytes. Else, the - * sequence is well-formed, and @end is set to @s + 1 + expected - * number of continuation bytes. - * - * A well-formed sequence is valid unless it encodes a codepoint - * outside the Unicode range U+0000..U+10FFFF, one of Unicode's 66 - * noncharacters, a surrogate codepoint, or is overlong. Except the - * overlong sequence "\xC0\x80" is valid. - * - * Conversion succeeds if and only if the sequence is valid. - * - * Returns: the Unicode codepoint on success, -1 on failure. - */ -int mod_utf8_codepoint(const char *s, size_t n, char **end) -{ - static int min_cp[5] = { 0x80, 0x800, 0x10000, 0x200000, 0x4000000 }; - const unsigned char *p; - unsigned byte, mask, len, i; - int cp; - - if (n == 0 || *s == 0) { - /* empty sequence */ - *end = (char *)s; - return -1; - } - - p = (const unsigned char *)s; - byte = *p++; - if (byte < 0x80) { - cp = byte; /* one byte sequence */ - } else if (byte >= 0xFE) { - cp = -1; /* impossible bytes 0xFE, 0xFF */ - } else if ((byte & 0x40) == 0) { - cp = -1; /* unexpected continuation byte */ - } else { - /* multi-byte sequence */ - len = 0; - for (mask = 0x80; byte & mask; mask >>= 1) { - len++; - } - assert(len > 1 && len < 7); - cp = byte & (mask - 1); - for (i = 1; i < len; i++) { - byte = i < n ? *p : 0; - if ((byte & 0xC0) != 0x80) { - cp = -1; /* continuation byte missing */ - goto out; - } - p++; - cp <<= 6; - cp |= byte & 0x3F; - } - if (cp > 0x10FFFF) { - cp = -1; /* beyond Unicode range */ - } else if ((cp >= 0xFDD0 && cp <= 0xFDEF) - || (cp & 0xFFFE) == 0xFFFE) { - cp = -1; /* noncharacter */ - } else if (cp >= 0xD800 && cp <= 0xDFFF) { - cp = -1; /* surrogate code point */ - } else if (cp < min_cp[len - 2] && !(cp == 0 && len == 2)) { - cp = -1; /* overlong, not \xC0\x80 */ - } - } - -out: - *end = (char *)p; - return cp; -} diff --git a/qemu/x86_64.h b/qemu/x86_64.h index 5aeea410..2da1107f 100644 --- a/qemu/x86_64.h +++ b/qemu/x86_64.h @@ -1960,19 +1960,6 @@ #define iwmmxt_store_reg iwmmxt_store_reg_x86_64 #define __jit_debug_descriptor __jit_debug_descriptor_x86_64 #define __jit_debug_register_code __jit_debug_register_code_x86_64 -#define json_lexer json_lexer_x86_64 -#define json_lexer_destroy json_lexer_destroy_x86_64 -#define json_lexer_feed json_lexer_feed_x86_64 -#define json_lexer_feed_char json_lexer_feed_char_x86_64 -#define json_lexer_flush json_lexer_flush_x86_64 -#define json_lexer_init json_lexer_init_x86_64 -#define json_message_parser_destroy json_message_parser_destroy_x86_64 -#define json_message_parser_feed json_message_parser_feed_x86_64 -#define json_message_parser_flush json_message_parser_flush_x86_64 -#define json_message_parser_init json_message_parser_init_x86_64 -#define json_message_process_token json_message_process_token_x86_64 -#define json_parser_parse json_parser_parse_x86_64 -#define json_parser_parse_err json_parser_parse_err_x86_64 #define kvm_to_cpreg_id kvm_to_cpreg_id_x86_64 #define last_ram_offset last_ram_offset_x86_64 #define ldl_be_p ldl_be_p_x86_64 @@ -2115,7 +2102,6 @@ #define mktimegm mktimegm_x86_64 #define module_call_init module_call_init_x86_64 #define module_load module_load_x86_64 -#define mod_utf8_codepoint mod_utf8_codepoint_x86_64 #define mpidr_cp_reginfo mpidr_cp_reginfo_x86_64 #define mpidr_read mpidr_read_x86_64 #define msr_mask msr_mask_x86_64 @@ -2229,7 +2215,6 @@ #define parse_array parse_array_x86_64 #define parse_error parse_error_x86_64 #define parse_escape parse_escape_x86_64 -#define parse_json parse_json_x86_64 #define parse_keyword parse_keyword_x86_64 #define parse_literal parse_literal_x86_64 #define parse_object parse_object_x86_64 @@ -2538,12 +2523,6 @@ #define qmp_output_visitor_cleanup qmp_output_visitor_cleanup_x86_64 #define qmp_output_visitor_new qmp_output_visitor_new_x86_64 #define qobject_decref qobject_decref_x86_64 -#define qobject_from_json qobject_from_json_x86_64 -#define qobject_from_jsonf qobject_from_jsonf_x86_64 -#define qobject_from_jsonv qobject_from_jsonv_x86_64 -#define qobject_incref qobject_incref_x86_64 -#define qobject_to_json qobject_to_json_x86_64 -#define qobject_to_json_pretty qobject_to_json_pretty_x86_64 #define qobject_to_qbool qobject_to_qbool_x86_64 #define qobject_to_qdict qobject_to_qdict_x86_64 #define qobject_to_qfloat qobject_to_qfloat_x86_64 @@ -3021,9 +3000,6 @@ #define tlb_set_dirty1 tlb_set_dirty1_x86_64 #define tlb_unprotect_code_phys tlb_unprotect_code_phys_x86_64 #define tlb_vaddr_to_host tlb_vaddr_to_host_x86_64 -#define to_json to_json_x86_64 -#define to_json_dict_iter to_json_dict_iter_x86_64 -#define to_json_list_iter to_json_list_iter_x86_64 #define token_get_type token_get_type_x86_64 #define token_get_value token_get_value_x86_64 #define token_is_escape token_is_escape_x86_64 @@ -3104,7 +3080,6 @@ #define vmsa_ttbcr_reset vmsa_ttbcr_reset_x86_64 #define vmsa_ttbcr_write vmsa_ttbcr_write_x86_64 #define vmsa_ttbr_write vmsa_ttbr_write_x86_64 -#define wchar_to_utf8 wchar_to_utf8_x86_64 #define write_cpustate_to_list write_cpustate_to_list_x86_64 #define write_list_to_cpustate write_list_to_cpustate_x86_64 #define write_raw_cp_reg write_raw_cp_reg_x86_64