X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-bus%2Fbus-internal.c;h=0bea8cac498918b3e2f959ac07da4e8152c5558c;hb=5f7e8903b275f14d0f41f0542871d09deccb1741;hp=942ac2b953be2286d1dbe0dcaf264c4d4895eec6;hpb=40ca29a1370379d43e44c0ed425eecc7218dcbca;p=elogind.git diff --git a/src/libsystemd-bus/bus-internal.c b/src/libsystemd-bus/bus-internal.c index 942ac2b95..0bea8cac4 100644 --- a/src/libsystemd-bus/bus-internal.c +++ b/src/libsystemd-bus/bus-internal.c @@ -277,3 +277,29 @@ const char *bus_message_type_to_string(uint8_t u) { else return NULL; } + +char *bus_address_escape(const char *v) { + const char *a; + char *r, *b; + + r = new(char, strlen(v)*3+1); + if (!r) + return NULL; + + for (a = v, b = r; *a; a++) { + + if ((*a >= '0' && *a <= '9') || + (*a >= 'a' && *a <= 'z') || + (*a >= 'A' && *a <= 'Z') || + strchr("_-/.", *a)) + *(b++) = *a; + else { + *(b++) = '%'; + *(b++) = hexchar(*a >> 4); + *(b++) = hexchar(*a & 0xF); + } + } + + *b = 0; + return r; +}