projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add support for diffie-hellman-group-exchange-sha256. Tested against a
[u/mdw/putty]
/
misc.c
diff --git
a/misc.c
b/misc.c
index
1beab5e
..
9d71a8d
100644
(file)
--- a/
misc.c
+++ b/
misc.c
@@
-48,11
+48,12
@@
unsigned long parse_blocksize(const char *bs)
* Returns NULL in `next' if we didn't recognise it as a control character,
* in which case `c' should be ignored.
* The precise current parsing is an oddity inherited from the terminal
* Returns NULL in `next' if we didn't recognise it as a control character,
* in which case `c' should be ignored.
* The precise current parsing is an oddity inherited from the terminal
- * answerback-string parsing code. All sequences
are two characters,
- *
starting with '^'
. The ones that are worth keeping are probably:
+ * answerback-string parsing code. All sequences
start with ^; all except
+ *
^<123> are two characters
. The ones that are worth keeping are probably:
* ^? 127
* ^@A-Z[\]^_ 0-31
* a-z 1-26
* ^? 127
* ^@A-Z[\]^_ 0-31
* a-z 1-26
+ * <num> specified by number (decimal, 0octal, 0xHEX)
* ~ ^ escape
*/
char ctrlparse(char *s, char **next)
* ~ ^ escape
*/
char ctrlparse(char *s, char **next)
@@
-60,23
+61,30
@@
char ctrlparse(char *s, char **next)
char c = 0;
if (*s != '^') {
*next = NULL;
char c = 0;
if (*s != '^') {
*next = NULL;
- return c;
} else {
s++;
if (*s == '\0') {
*next = NULL;
} else {
s++;
if (*s == '\0') {
*next = NULL;
- return c;
+ } else if (*s == '<') {
+ s++;
+ c = (char)strtol(s, next, 0);
+ if ((*next == s) || (**next != '>')) {
+ c = 0;
+ *next = NULL;
+ } else
+ (*next)++;
} else if (*s >= 'a' && *s <= 'z') {
c = (*s - ('a' - 1));
} else if (*s >= 'a' && *s <= 'z') {
c = (*s - ('a' - 1));
+ *next = s+1;
} else if ((*s >= '@' && *s <= '_') || *s == '?' || (*s & 0x80)) {
c = ('@' ^ *s);
} else if ((*s >= '@' && *s <= '_') || *s == '?' || (*s & 0x80)) {
c = ('@' ^ *s);
+ *next = s+1;
} else if (*s == '~') {
c = '^';
} else if (*s == '~') {
c = '^';
+ *next = s+1;
}
}
- s++;
- *next = s;
- return c;
}
}
+ return c;
}
/* ----------------------------------------------------------------------
}
/* ----------------------------------------------------------------------