add strdupa macro for compatibility
[project/uclient.git] / uclient-http.c
index 279669620ebe659b5904d6e3275b991e40f1e700..c2bba6b5b8f2093e3b408d6d35a312673f821583 100644 (file)
@@ -441,7 +441,7 @@ uclient_http_add_auth_digest(struct uclient_http *uh)
        struct uclient_url *url = uh->uc.url;
        const char *realm = NULL, *opaque = NULL;
        const char *user, *password;
-       char *buf, *next, *buf_orig;
+       char *buf, *next;
        int len, ofs;
        int err = 0;
 
@@ -471,7 +471,7 @@ uclient_http_add_auth_digest(struct uclient_http *uh)
        strcpy(buf, uh->auth_str);
 
        /* skip auth type */
-       buf_orig = strsep(&buf, " ");
+       strsep(&buf, " ");
 
        next = buf;
        while (*next) {
@@ -507,7 +507,7 @@ uclient_http_add_auth_digest(struct uclient_http *uh)
 
        if (!realm || !data.qop || !data.nonce) {
                err = -EINVAL;
-               goto fail_buf;
+               goto fail;
        }
 
        sprintf(nc_str, "%08x", uh->nc++);
@@ -524,13 +524,13 @@ uclient_http_add_auth_digest(struct uclient_http *uh)
                len = password - url->auth;
                if (len > 256) {
                        err = -EINVAL;
-                       goto fail_buf;
+                       goto fail;
                }
 
                user_buf = alloca(len + 1);
                if (!user_buf) {
                        err = -ENOMEM;
-                       goto fail_buf;
+                       goto fail;
                }
 
                strncpy(user_buf, url->auth, len);
@@ -564,8 +564,6 @@ uclient_http_add_auth_digest(struct uclient_http *uh)
 
        return 0;
 
-fail_buf:
-       free(buf_orig);
 fail:
        return err;
 }
@@ -657,7 +655,8 @@ static void uclient_http_headers_complete(struct uclient_http *uh)
        if (uh->eof || seq != uh->uc.seq)
                return;
 
-       if (uh->req_type == REQ_HEAD || uh->uc.status_code == 204) {
+       if (uh->req_type == REQ_HEAD || uh->uc.status_code == 204 ||
+                       uh->content_length == 0) {
                uh->eof = true;
                uclient_notify_eof(uh);
        }
@@ -1110,16 +1109,17 @@ uclient_http_read(struct uclient *cl, char *buf, unsigned int len)
                }
        }
 
-       if (len > data_end - data)
-               len = data_end - data;
+       unsigned int diff = data_end - data;
+       if (len > diff)
+               len = diff;
 
        if (uh->read_chunked >= 0) {
-               if (len > uh->read_chunked)
+               if (len > (unsigned long) uh->read_chunked)
                        len = uh->read_chunked;
 
                uh->read_chunked -= len;
        } else if (uh->content_length >= 0) {
-               if (len > uh->content_length)
+               if (len > (unsigned long) uh->content_length)
                        len = uh->content_length;
 
                uh->content_length -= len;