qemu-e2k/include/qemu
Markus Armbruster d454dbe0ee keyval: New keyval_parse()
keyval_parse() parses KEY=VALUE,... into a QDict.  Works like
qemu_opts_parse(), except:

* Returns a QDict instead of a QemuOpts (d'oh).

* Supports nesting, unlike QemuOpts: a KEY is split into key
  fragments at '.' (dotted key convention; the block layer does
  something similar on top of QemuOpts).  The key fragments are QDict
  keys, and the last one's value is updated to VALUE.

* Each key fragment may be up to 127 bytes long.  qemu_opts_parse()
  limits the entire key to 127 bytes.

* Overlong key fragments are rejected.  qemu_opts_parse() silently
  truncates them.

* Empty key fragments are rejected.  qemu_opts_parse() happily
  accepts empty keys.

* It does not store the returned value.  qemu_opts_parse() stores it
  in the QemuOptsList.

* It does not treat parameter "id" specially.  qemu_opts_parse()
  ignores all but the first "id", and fails when its value isn't
  id_wellformed(), or duplicate (a QemuOpts with the same ID is
  already stored).  It also screws up when a value contains ",id=".

* Implied value is not supported.  qemu_opts_parse() desugars "foo" to
  "foo=on", and "nofoo" to "foo=off".

* An implied key's value can't be empty, and can't contain ','.

I intend to grow this into a saner replacement for QemuOpts.  It'll
take time, though.

Note: keyval_parse() provides no way to do lists, and its key syntax
is incompatible with the __RFQDN_ prefix convention for downstream
extensions, because it blindly splits at '.', even in __RFQDN_.  Both
issues will be addressed later in the series.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <1488317230-26248-4-git-send-email-armbru@redhat.com>
2017-03-07 16:07:46 +01:00
..
acl.h
atomic.h
base64.h
bcd.h
bitmap.h
bitops.h
bswap.h
buffer.h
compiler.h compiler: expression version of QEMU_BUILD_BUG_ON 2017-02-01 03:37:17 +02:00
config-file.h arch_init: Remove unnecessary default_config_files table 2017-01-23 21:25:36 -02:00
coroutine_int.h aio: introduce aio_co_schedule and aio_co_wake 2017-02-21 11:14:07 +00:00
coroutine.h coroutine-lock: make CoRwlock thread-safe and fair 2017-02-21 11:39:40 +00:00
crc32c.h
cutils.h util/cutils: Change qemu_strtosz*() from int64_t to uint64_t 2017-02-23 20:35:36 +01:00
envlist.h
error-report.h
event_notifier.h event_notifier: cleanups around event_notifier_set_handler 2017-01-16 17:52:35 +01:00
fifo8.h
fifo32.h
fprintf-fn.h
futex.h qemu-thread: optimize QemuLockCnt with futexes on Linux 2017-01-16 13:25:18 +00:00
hbitmap.h hbitmap: Add hbitmap_is_serializable() 2017-01-26 10:25:01 +08:00
help_option.h
host-utils.h host-utils: Implement unsigned quadword left/right shift and unit tests 2017-01-31 10:10:14 +11:00
id.h
int128.h
iov.h
jhash.h
log.h
main-loop.h event_notifier: cleanups around event_notifier_set_handler 2017-01-16 17:52:35 +01:00
memfd.h
mmap-alloc.h exec, kvm, target-ppc: Move getrampagesize() to common code 2017-03-03 11:30:59 +11:00
module.h qmp: Dumb down how we run QMP command registration 2017-03-05 09:02:10 +01:00
notify.h
option_int.h
option.h keyval: New keyval_parse() 2017-03-07 16:07:46 +01:00
osdep.h cpus: reorganize signal handling code 2017-03-03 16:40:02 +01:00
path.h
processor.h
qdist.h
qht.h include: Fix typos found by codespell 2017-01-24 23:26:52 +03:00
queue.h migration: migrate QTAILQ 2017-01-24 17:54:47 +00:00
range.h
ratelimit.h
rcu_queue.h
rcu.h
readline.h
seqlock.h
sockets.h io: introduce a DNS resolver API 2017-01-23 15:32:46 +00:00
thread-posix.h
thread-win32.h
thread.h qemu-thread: optimize QemuLockCnt with futexes on Linux 2017-01-16 13:25:18 +00:00
throttle-options.h throttle: factor out duplicate code 2017-02-28 10:31:46 +01:00
throttle.h
timed-average.h
timer.h timer: use an inline function for free 2017-03-01 00:09:28 +04:00
typedefs.h char: rename CharDriverState Chardev 2017-01-27 18:07:59 +01:00
unicode.h
uri.h
uuid.h
xattr.h include: Fix typos found by codespell 2017-01-24 23:26:52 +03:00