X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuclient.git;a=blobdiff_plain;f=uclient.c;h=71da9359b491a4053aea9ecfaa03a82df76bcc29;hp=e7213a1002ecd7b1914104ad74d7fb294239338e;hb=25e44fc1e666fb333b3c53bcda90e44b0b74bf19;hpb=f619ebe9d3343867bc8a8d5e98e6b81e645129e5 diff --git a/uclient.c b/uclient.c index e7213a1..71da935 100644 --- a/uclient.c +++ b/uclient.c @@ -3,7 +3,7 @@ #include "uclient-utils.h" #include "uclient-backend.h" -struct uclient_url * __hidden +struct uclient_url __hidden * uclient_get_url(const char *url_str, const char *auth_str) { static const struct uclient_backend *backends[] = { @@ -54,6 +54,7 @@ uclient_get_url(const char *url_str, const char *auth_str) url->backend = backend; url->location = strcpy(uri_buf, location); + url->prefix = prefix - backend->prefix; url->host = strncpy(host_buf, url_str, host_len); @@ -177,8 +178,8 @@ static void __uclient_backend_change_state(struct uloop_timeout *timeout) { struct uclient *cl = container_of(timeout, struct uclient, timeout); - if (cl->error && cl->cb->error) - cl->cb->error(cl); + if (cl->error_code && cl->cb->error) + cl->cb->error(cl, cl->error_code); else if (cl->eof && cl->cb->data_eof) cl->cb->data_eof(cl); } @@ -189,18 +190,18 @@ static void uclient_backend_change_state(struct uclient *cl) uloop_timeout_set(&cl->timeout, 1); } -void __hidden uclient_backend_set_error(struct uclient *cl) +void __hidden uclient_backend_set_error(struct uclient *cl, int code) { - if (cl->error) + if (cl->error_code) return; - cl->error = true; + cl->error_code = code; uclient_backend_change_state(cl); } void __hidden uclient_backend_set_eof(struct uclient *cl) { - if (cl->eof || cl->error) + if (cl->eof || cl->error_code) return; cl->eof = true; @@ -209,7 +210,7 @@ void __hidden uclient_backend_set_eof(struct uclient *cl) void __hidden uclient_backend_reset_state(struct uclient *cl) { - cl->error = false; cl->eof = false; + cl->error_code = 0; uloop_timeout_cancel(&cl->timeout); }