X-Git-Url: https://git.toastfreeware.priv.at/gregoa/bti.git/blobdiff_plain/8a4839e0036c849faf468e8e888e8465c2c4e5ea..ec9264385a18f6f2212b7e19f2ea34ef807ca1cd:/bti.c diff --git a/bti.c b/bti.c index 9c3b7f4..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 */ -static 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); @@ -1119,7 +1149,6 @@ int main(int argc, char *argv[], char *envp[]) struct session *session; pid_t child; char *tweet; - char *retweet; static char password[80]; int retval = 0; int option; @@ -1161,7 +1190,7 @@ int main(int argc, char *argv[], char *envp[]) while (1) { option = getopt_long_only(argc, argv, - "dp:P:H:a:A:u:c:hg:G:sr:nVv", + "dp:P:H:a:A:u:c:hg:G:sr:nVvw:", options, NULL); if (option == -1) break; @@ -1360,17 +1389,21 @@ int main(int argc, char *argv[], char *envp[]) } if (session->action == ACTION_RETWEET) { - fprintf(stdout, "Status ID to retweet: "); - retweet = get_string_from_stdin(); + if (!session->retweet) { + char *rtid; + + fprintf(stdout, "Status ID to retweet: "); + rtid = get_string_from_stdin(); + session->retweet = zalloc(strlen(rtid) + 10); + sprintf(session->retweet,"%s", rtid); + free(rtid); + } - if (!retweet || strlen(retweet) == 0) { + if (!session->retweet || strlen(session->retweet) == 0) { dbg("no retweet?\n"); return -1; } - session->retweet = zalloc(strlen(retweet) + 10); - sprintf(session->retweet,"%s", retweet); - free(retweet); dbg("retweet ID = %s\n", session->retweet); }