diff options
author | Nick White <git@njw.me.uk> | 2011-09-01 20:21:20 +0100 |
---|---|---|
committer | Nick White <git@njw.me.uk> | 2011-09-01 20:21:20 +0100 |
commit | 817d2888d7f38dec4e8549def19bd2274ad1f9e7 (patch) | |
tree | a8b3b7f5cc1194ce8bac4ffc34659491e9af575b | |
parent | 89c7c8fe61bb7a1b3059e43b96a97d80df2d9835 (diff) |
Fix cookie saving, update TODO
-rw-r--r-- | TODO | 4 | ||||
-rwxr-xr-x[-rw-r--r--] | gui.tcl | 0 | ||||
-rw-r--r-- | util.c | 10 |
3 files changed, 10 insertions, 4 deletions
@@ -17,7 +17,9 @@ use wide string functions when dealing with stuff returned over http; it's known bug in get(): if the \r\n\r\n after http headers is cut off between recv buffers -create a tcl/tk gui wrapper, which asks for the book downloader to run, the book id, and then shows output of stdout & stderr as it runs +what happens if we receive not a http header? does recv loop forever, in a memory killing manner? + +print stderr in gui as well package for osx and windows @@ -72,9 +72,13 @@ int get(char *host, char *path, char *sendcookie, char *savecookie, char **buf) while((res = recv(fd, t, BUFSIZ, 0)) > 0) { if(sscanf(t, "HTTP/%d.%d %d", &i, &i, &p) == 3 && p != 200) return 0; - if(savecookie != NULL && - (t2 = strstr(t, "Set-Cookie: ")) != NULL && sscanf(t2, m, c)) - strncat(savecookie, c, COOKIEMAX); + t2 = t; + if(savecookie != NULL) { + while((t2 = strstr(t2, "Set-Cookie: ")) && sscanf(t2, m, c)) { + strncat(savecookie, c, COOKIEMAX); + t2++; + } + } if((t2 = strstr(t, "\r\n\r\n")) != NULL && (t2 - t) < (signed)res) { t2+=4; l = res - (t2 - t); |