Introduction
Introduction Statistics Contact Development Disclaimer Help
tls_read/read: buffer is not always filled in one read - hurl - Gopher/HTTP/HTT…
git clone git://git.codemadness.org/hurl
Log
Files
Refs
README
LICENSE
---
commit b0ae028e1af0a7f6e3e828390109462cbd2ea6bb
parent 2ab1b868fbac189f3c7b8e2d4af14838aad1227f
Author: Hiltjo Posthuma <[email protected]>
Date: Mon, 12 Nov 2018 19:45:01 +0100
tls_read/read: buffer is not always filled in one read
+ change a MACRO to sizeof(buf).
Diffstat:
M bget.c | 44 +++++++++++++++--------------…
1 file changed, 21 insertions(+), 23 deletions(-)
---
diff --git a/bget.c b/bget.c
@@ -184,7 +184,7 @@ https_request(void)
{
struct tls *t = NULL;
char buf[READ_BUF_SIZ], *p;
- size_t n, len = 0;
+ size_t n, len;
ssize_t r;
int fd = -1, httpok = 0, ret = 1;
@@ -221,16 +221,15 @@ https_request(void)
}
/* NOTE: HTTP header must fit in the buffer */
- r = tls_read(t, &buf, sizeof(buf));
- if (r == 0) {
- fprintf(stderr, "nothing read\n");
- goto err;
- }
- if (r == -1) {
- fprintf(stderr, "tls_read: %s\n", tls_error(t));
- goto err;
+ for (len = 0; len < sizeof(buf); len += r) {
+ if ((r = tls_read(t, &buf[len], sizeof(buf) - len)) == 0)
+ break;
+ if (r == -1) {
+ fprintf(stderr, "tls_read: %s\n", tls_error(t));
+ goto err;
+ }
}
- len += r;
+ buf[len] = '\0'; /* XXX: correct? */
if (!strncmp(buf, "HTTP/1.0 200 ", sizeof("HTTP/1.0 200 ") - 1) ||
!strncmp(buf, "HTTP/1.1 200 ", sizeof("HTTP/1.1 200 ") - 1))
@@ -244,7 +243,7 @@ https_request(void)
p += strlen("\r\n\r\n");
if (httpok) {
- n = r - (p - buf);
+ n = len - (p - buf);
r = fwrite(p, 1, n, stdout);
if (ferror(stdout)) {
fprintf(stderr, "fwrite: stdout: %s\n", strerror(errno…
@@ -297,7 +296,7 @@ int
http_request(void)
{
char buf[READ_BUF_SIZ], *p;
- size_t n, len = 0;
+ size_t n, len;
ssize_t r;
int fd = -1, httpok = 0, ret = 1;
@@ -322,16 +321,15 @@ http_request(void)
}
/* NOTE: HTTP header must fit in the buffer */
- r = read(fd, &buf, sizeof(buf));
- if (r == 0) {
- fprintf(stderr, "nothing read\n");
- goto err;
- }
- if (r == -1) {
- fprintf(stderr, "read: %s\n", strerror(errno));
- goto err;
+ for (len = 0; len < sizeof(buf); len += r) {
+ if ((r = read(fd, &buf[len], sizeof(buf) - len)) == 0)
+ break;
+ if (r == -1) {
+ fprintf(stderr, "read: %s\n", strerror(errno));
+ goto err;
+ }
}
- len += r;
+ buf[len] = '\0'; /* XXX: correct? */
if (!strncmp(buf, "HTTP/1.0 200 ", sizeof("HTTP/1.0 200 ") - 1) ||
!strncmp(buf, "HTTP/1.1 200 ", sizeof("HTTP/1.1 200 ") - 1))
@@ -345,7 +343,7 @@ http_request(void)
p += strlen("\r\n\r\n");
if (httpok) {
- n = r - (p - buf);
+ n = len - (p - buf);
r = fwrite(p, 1, n, stdout);
if (ferror(stdout)) {
fprintf(stderr, "fwrite: stdout: %s\n", strerror(errno…
@@ -415,7 +413,7 @@ gopher_request(void)
}
while (1) {
- r = read(fd, &buf, READ_BUF_SIZ);
+ r = read(fd, &buf, sizeof(buf));
if (r == 0)
break;
if (r == -1) {
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.