12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- /*
- * Escaping/unescaping functions to translate between a saved session
- * name, and the key name used to represent it in the Registry area
- * where we store saved sessions.
- *
- * The basic technique is to %-escape characters we can't use in
- * Registry keys.
- */
- #include "putty.h"
- void escape_registry_key(const char *in, strbuf *out)
- {
- bool candot = false;
- static const char hex[16] = "0123456789ABCDEF";
- while (*in) {
- if (*in == ' ' || *in == '\\' || *in == '*' || *in == '?' ||
- *in == '%' || *in < ' ' || *in > '~' || (*in == '.'
- && !candot)) {
- put_byte(out, '%');
- put_byte(out, hex[((unsigned char) *in) >> 4]);
- put_byte(out, hex[((unsigned char) *in) & 15]);
- } else
- put_byte(out, *in);
- in++;
- candot = true;
- }
- }
- void unescape_registry_key(const char *in, strbuf *out)
- {
- while (*in) {
- if (*in == '%' && in[1] && in[2]) {
- int i, j;
- i = in[1] - '0';
- i -= (i > 9 ? 7 : 0);
- j = in[2] - '0';
- j -= (j > 9 ? 7 : 0);
- put_byte(out, (i << 4) + j);
- in += 3;
- } else {
- put_byte(out, *in++);
- }
- }
- }
|