void escape()

in glean/rts/json.cpp [146:190]


void escape(
    const EscapeTable& escapes,
    const uint8_t *text,
    size_t text_size,
    char *out,
    size_t escaped_size) noexcept {
  assert(escaped_size >= text_size);
  if (escaped_size == text_size) {
    if (text_size != 0) {
      memcpy(out, text, text_size);
    }
  } else {
    size_t o = 0;
    for (size_t i = 0; i < text_size; ++i) {
      const auto c = text[i];
      switch (escapes[c]) {
        case K:
          out[o++] = c;
          break;

        case Z:
          // \0 is represented as \0 \1 in the mangled representation
          assert(i < text_size);
          ++i;
          FOLLY_FALLTHROUGH;

        case X:
          out[o++] = '\\';
          out[o++] = 'u';
          out[o++] = '0';
          out[o++] = '0';
          out[o++] = hex(c >> 4);
          out[o++] = hex(c & 0x0F);
          break;

        default:
          out[o++] = '\\';
          out[o++] = escapes[c];
          break;
      }
      assert (o <= escaped_size);
    }
    assert(o == escaped_size);
  }
}