[systemd-devel] DBus service name encoding

Simon McVittie simon.mcvittie at collabora.co.uk
Mon Mar 4 11:00:59 PST 2013

On 04/03/13 14:31, Lennart Poettering wrote:
> So here's how to do this, it's very simple: every char outside of the
> A-Za-z0-9 range is escaped as "_XY" where XY is the numeric code of the
> char, as 2 char lower-case hex value. Note that "_" itself is also
> escaped, to "_5f".

This sounds a lot like Telepathy's tp_escape_as_identifier(). Before
freezing this as ABI, you might want to consider a couple of the more
subtle points from that function:

* we also escape any leading digit in the same way, so that a name
  starting with a digit is escaped as a valid bus name component
  ("123.service" -> "_3123_2eservice", because the D-Bus specification
  says "Only elements that are part of a unique connection name may
  begin with a digit")

* for completeness, we also escape "" into "_" (because a zero-length
  string is not a valid D-Bus name component)

This results in its output being a valid D-Bus bus-name element,
interface-name element, member, and object-path element, and also a
valid C identifier.


More information about the systemd-devel mailing list