json-lexer: fix flushing logic to not always go to error state

Currently we flush the lexer by passing in a NULL character. This
generally forces the lexer to go to the corresponding TERMINAL() state
for whatever token type it is currently parsing, emits the token to the
parser, then puts the lexer back into IN_START state. However, since a
NULL character causes char_consumed to be 0, we always do a second pass
after this, which puts us in the IN_ERROR state. Fix this behavior by
adding a "flush" flag that tells the lexer not to do a more than 1
iteration.

Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
1 file changed
tree: 1f5858de694e809fd9275c23701a63fba02f40d6
  1. audio/
  2. block/
  3. bsd-user/
  4. darwin-user/
  5. default-configs/
  6. docs/
  7. fpu/
  8. fsdev/
  9. gdb-xml/
  10. hw/
  11. libcacard/
  12. linux-user/
  13. net/
  14. pc-bios/
  15. QMP/
  16. roms/
  17. scripts/
  18. slirp/
  19. sysconfigs/
  20. target-alpha/
  21. target-arm/
  22. target-cris/
  23. target-i386/
  24. target-lm32/
  25. target-m68k/
  26. target-microblaze/
  27. target-mips/
  28. target-ppc/
  29. target-s390x/
  30. target-sh4/
  31. target-sparc/
  32. target-unicore32/
  33. tcg/
  34. tests/
  35. ui/
  36. .gitignore
  37. .gitmodules
  38. a.out.h
  39. acl.c
  40. acl.h
  41. aes.c
  42. aes.h
  43. aio.c
  44. alpha-dis.c
  45. alpha.ld
  46. arch_init.c
  47. arch_init.h
  48. arm-dis.c
  49. arm-semi.c
  50. arm.ld
  51. async.c
  52. balloon.c
  53. balloon.h
  54. bitmap.c
  55. bitmap.h
  56. bitops.c
  57. bitops.h
  58. block-migration.c
  59. block-migration.h
  60. block.c
  61. block.h
  62. block_int.h
  63. blockdev.c
  64. blockdev.h
  65. bswap.h
  66. bt-host.c
  67. bt-host.h
  68. bt-vhci.c
  69. buffered_file.c
  70. buffered_file.h
  71. cache-utils.c
  72. cache-utils.h
  73. Changelog
  74. check-qdict.c
  75. check-qfloat.c
  76. check-qint.c
  77. check-qjson.c
  78. check-qlist.c
  79. check-qstring.c
  80. cmd.c
  81. cmd.h
  82. CODING_STYLE
  83. compatfd.c
  84. compatfd.h
  85. config.h
  86. configure
  87. console.c
  88. console.h
  89. COPYING
  90. COPYING.LIB
  91. cpu-all.h
  92. cpu-common.h
  93. cpu-defs.h
  94. cpu-exec.c
  95. cpus.c
  96. cpus.h
  97. cris-dis.c
  98. cursor.c
  99. cursor_hidden.xpm
  100. cursor_left_ptr.xpm
  101. cutils.c
  102. def-helper.h
  103. device_tree.c
  104. device_tree.h
  105. dis-asm.h
  106. disas.c
  107. disas.h
  108. dma-helpers.c
  109. dma.h
  110. dyngen-exec.h
  111. elf.h
  112. envlist.c
  113. envlist.h
  114. error.c
  115. error.h
  116. error_int.h
  117. exec-all.h
  118. exec.c
  119. gdbstub.c
  120. gdbstub.h
  121. gen-icount.h
  122. HACKING
  123. hmp-commands.hx
  124. host-utils.c
  125. host-utils.h
  126. hpet.h
  127. hppa-dis.c
  128. hppa.ld
  129. i386-dis.c
  130. i386.ld
  131. ia64-dis.c
  132. ia64.ld
  133. input.c
  134. iohandler.c
  135. ioport-user.c
  136. ioport.c
  137. ioport.h
  138. iorange.h
  139. iov.c
  140. iov.h
  141. json-lexer.c
  142. json-lexer.h
  143. json-parser.c
  144. json-parser.h
  145. json-streamer.c
  146. json-streamer.h
  147. kvm-all.c
  148. kvm-stub.c
  149. kvm.h
  150. libfdt_env.h
  151. LICENSE
  152. linux-aio.c
  153. m68k-dis.c
  154. m68k-semi.c
  155. m68k.ld
  156. MAINTAINERS
  157. Makefile
  158. Makefile.dis
  159. Makefile.hw
  160. Makefile.objs
  161. Makefile.target
  162. Makefile.user
  163. microblaze-dis.c
  164. migration-exec.c
  165. migration-fd.c
  166. migration-tcp.c
  167. migration-unix.c
  168. migration.c
  169. migration.h
  170. mips-dis.c
  171. mips.ld
  172. module.c
  173. module.h
  174. monitor.c
  175. monitor.h
  176. nbd.c
  177. nbd.h
  178. net.c
  179. net.h
  180. notify.c
  181. notify.h
  182. os-posix.c
  183. os-win32.c
  184. osdep.c
  185. osdep.h
  186. oslib-posix.c
  187. oslib-win32.c
  188. path.c
  189. pci-ids.txt
  190. pflib.c
  191. pflib.h
  192. poison.h
  193. posix-aio-compat.c
  194. ppc-dis.c
  195. ppc.ld
  196. ppc64.ld
  197. qbool.c
  198. qbool.h
  199. qdict-test-data.txt
  200. qdict.c
  201. qdict.h
  202. qemu-aio.h
  203. qemu-barrier.h
  204. qemu-char.c
  205. qemu-char.h
  206. qemu-common.h
  207. qemu-config.c
  208. qemu-config.h
  209. qemu-doc.texi
  210. qemu-error.c
  211. qemu-error.h
  212. qemu-img-cmds.hx
  213. qemu-img.c
  214. qemu-img.texi
  215. qemu-io.c
  216. qemu-lock.h
  217. qemu-log.h
  218. qemu-malloc.c
  219. qemu-nbd.c
  220. qemu-nbd.texi
  221. qemu-objects.h
  222. qemu-option.c
  223. qemu-option.h
  224. qemu-options.h
  225. qemu-options.hx
  226. qemu-os-posix.h
  227. qemu-os-win32.h
  228. qemu-progress.c
  229. qemu-queue.h
  230. qemu-sockets.c
  231. qemu-tech.texi
  232. qemu-thread-posix.c
  233. qemu-thread-posix.h
  234. qemu-thread-win32.c
  235. qemu-thread-win32.h
  236. qemu-thread.h
  237. qemu-timer-common.c
  238. qemu-timer.c
  239. qemu-timer.h
  240. qemu-tool.c
  241. qemu-x509.h
  242. qemu.sasl
  243. qemu_socket.h
  244. qerror.c
  245. qerror.h
  246. qfloat.c
  247. qfloat.h
  248. qint.c
  249. qint.h
  250. qjson.c
  251. qjson.h
  252. qlist.c
  253. qlist.h
  254. qmp-commands.hx
  255. qobject.h
  256. qstring.c
  257. qstring.h
  258. range.h
  259. readline.c
  260. readline.h
  261. README
  262. rules.mak
  263. rwhandler.c
  264. rwhandler.h
  265. s390-dis.c
  266. s390.ld
  267. savevm.c
  268. sh4-dis.c
  269. simpletrace.c
  270. simpletrace.h
  271. softmmu-semi.h
  272. softmmu_defs.h
  273. softmmu_exec.h
  274. softmmu_header.h
  275. softmmu_template.h
  276. sparc-dis.c
  277. sparc.ld
  278. sparc64.ld
  279. spice-qemu-char.c
  280. sysemu.h
  281. targphys.h
  282. tcg-runtime.c
  283. thunk.c
  284. thunk.h
  285. TODO
  286. trace-events
  287. translate-all.c
  288. uboot_image.h
  289. usb-bsd.c
  290. usb-linux.c
  291. usb-stub.c
  292. user-exec.c
  293. VERSION
  294. version.rc
  295. vgafont.h
  296. vl.c
  297. x86_64.ld
  298. xen-all.c
  299. xen-mapcache-stub.c
  300. xen-mapcache.c
  301. xen-mapcache.h
  302. xen-stub.c