X-Git-Url: https://git.toastfreeware.priv.at/gregoa/bti.git/blobdiff_plain/3773da86abc386142bf4295e55016947a09126c8..ec9264385a18f6f2212b7e19f2ea34ef807ca1cd:/bti.c diff --git a/bti.c b/bti.c index 72cc953..7f82879 100644 --- a/bti.c +++ b/bti.c @@ -284,8 +284,8 @@ static CURL *curl_init(void) } /* The final place data is sent to the screen/pty/tty */ -void bti_output_line(struct session *session, xmlChar *user, xmlChar *id, - xmlChar *created, xmlChar *text) +static void bti_output_line(struct session *session, xmlChar *user, + xmlChar *id, xmlChar *created, xmlChar *text) { if (session->verbose) printf("[%s] {%s} (%.16s) %s\n", user, id, created, text); @@ -641,11 +641,36 @@ static int send_request(struct session *session) curl_easy_setopt(curl, CURLOPT_WRITEDATA, curl_buf); if (!session->dry_run) { res = curl_easy_perform(curl); - if (res && !session->background) { - fprintf(stderr, "error(%d) trying to perform " + if (!session->background) { + if (res) { + fprintf(stderr, "error(%d) trying to perform " "operation\n", res); - return -EINVAL; - } + return -EINVAL; + } else { + xmlDocPtr doc; + xmlNodePtr current; + + doc = xmlReadMemory(curl_buf->data, curl_buf->length, + "response.xml", NULL, XML_PARSE_NOERROR); + if (doc == NULL) + return -EINVAL; + + current = xmlDocGetRootElement(doc); + if (current == NULL) { + fprintf(stderr, "empty document\n"); + xmlFreeDoc(doc); + return -EINVAL; + } + + if (xmlStrcmp(current->name, (const xmlChar *) "status")) { + fprintf(stderr, "unexpected document type\n"); + xmlFreeDoc(doc); + return -EINVAL; + } + + xmlFreeDoc(doc); + } + } } curl_easy_cleanup(curl); @@ -724,6 +749,11 @@ static int send_request(struct session *session) free(req_url); } + if (!reply) { + fprintf(stderr, "Error retrieving from URL (%s)\n", endpoint); + return -EIO; + } + if ((session->action != ACTION_UPDATE) && (session->action != ACTION_RETWEET)) parse_timeline(reply, session);