diff options
author | SammysHP | 2020-03-03 20:11:53 +0100 |
---|---|---|
committer | SammysHP | 2020-03-03 20:11:53 +0100 |
commit | 4822d93495b8d1e5ddc066dfaae7bdedda38b89d (patch) | |
tree | 710e0448f16ae62780376836a9c5cf904bc840c8 /0003_k_wait_ready.patch | |
download | aur-hptalx.tar.gz |
Initial commit
Diffstat (limited to '0003_k_wait_ready.patch')
-rw-r--r-- | 0003_k_wait_ready.patch | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/0003_k_wait_ready.patch b/0003_k_wait_ready.patch new file mode 100644 index 000000000000..9b133fd03518 --- /dev/null +++ b/0003_k_wait_ready.patch @@ -0,0 +1,88 @@ +Author: Stefan Achatz +https://sourceforge.net/p/hptalx/patches/4/ + +--- a/src/kermit.c ++++ b/src/kermit.c +@@ -52,6 +52,7 @@ + #include <pty.h> + #include <termios.h> + #include <signal.h> ++#include <errno.h> + + /* + * Global variable that holds the last Kermit status +@@ -297,44 +298,22 @@ k_wait_ready (char **o, size_t * size) + * has arrived + */ + if (br > 0) { +- if (*size == 0) { +- /* +- * First time we read into *o +- */ +- *o = (char *) malloc (br); +- if (*o == NULL) { +- return k_errno = K_MALLOC; +- } +- +- /* +- * Zero out everthing in *o +- */ +- memset ((void *) *o, 0, br); +- memcpy ((void *) *o, (void *) buff, br); +- *size = br; ++ ++ *size += br; ++ ++ if (*size == br) { ++ *o = (char *) malloc (*size); + } else { +- /* +- * Previous reads took place +- */ +- +- /* +- * New size of *o +- */ +- *size += br; + *o = (char *) realloc (*o, *size); ++ } ++ ++ if (*o == NULL) { ++ return k_errno = K_MALLOC; ++ } + +- if (*o == NULL) { +- return k_errno = K_MALLOC; +- } ++ memcpy ((void *) (*o + (*size - br)), (void *) buff, br); + +- memset ((void *) (*o + (*size - br)), 0, br); +- /* +- * Copy content from buff to *o +- * at old pos in *o -> (size-br) +- */ +- memcpy ((void *) (*o + (*size - br)), (void *) buff, br); +- } +- } else { ++ } else if (br == 0 || errno == EAGAIN) { + /* + * Wait nicely for new data + */ +@@ -343,6 +322,8 @@ k_wait_ready (char **o, size_t * size) + return k_errno = K_TIMEOUT; + } + ++ } else { ++ return k_errno = K_READ; + } + + /* +@@ -352,7 +333,7 @@ k_wait_ready (char **o, size_t * size) + tv.tv_usec = 0; + + } +- while ((strstr (*o, K_KERMIT_PROMPT) == NULL) ++ while ((*o != 0 && strstr (*o, K_KERMIT_PROMPT) == NULL) + || (select (FD_SETSIZE, &rset, NULL, NULL, &tv) != 0)); + return k_errno = K_OK; + } |