Skip to content
  • Thomas Haller's avatar
    shared: add nm_utils_buf_utf8safe_escape() util · 57c371e3
    Thomas Haller authored
    We already have nm_utils_str_utf8safe_escape() to convert a
    NUL termianted string to an UTF-8 string. nm_utils_str_utf8safe_escape()
    operates under the assumption, that the input strig is already valid UTF-8
    and returns the input string verbatim. That way, in the common expected
    cases, the string just looks like a regular UTF-8 string.
    However, in case there are invalid UTF-8 sequences (or a backslash
    escape characters), the function will use backslash escaping to encode
    the input string as a valid UTF-8 sequence. Note that the escaped
    sequence, can be reverted to the original non-UTF-8 string via
    unescape.
    An example, where this is useful are file names or interface names.
    Which are not in a defined encoding, but NUL terminated and commonly ASCII or
    UTF-8 encoded.
    
    Extend this, to also handle not NUL terminated buffers. The same
    applies, except that the process cannot be reverted via g_strcompress()
    -- because the NUL character cannot be unescaped.
    
    This will be useful to escape a Wi-Fi SSID. Commonly we expect the SSID
    to be in UTF-8/ASCII encoding and we want to print it verbatim. Only
    if that is not the case, we fallback to backslash escaping. However, the
    orginal value can be fully recovered via unescape(). The difference
    between an SSID and a filename is, that the former can contain '\0'
    bytes.
    57c371e3