X-Git-Url: https://git.toastfreeware.priv.at/gregoa/bti.git/blobdiff_plain/68f47b095684684e4247265e02ba8c0d12ba26b8..081129fe97e87549df39e0ef9e1d924035138ed5:/bti.c diff --git a/bti.c b/bti.c index 3938e0a..a19b75c 100644 --- a/bti.c +++ b/bti.c @@ -52,7 +52,7 @@ } while (0) -static int debug; +int debug; static void display_help(void) { @@ -268,6 +268,9 @@ static const char replies_uri[] = "/replies.xml"; static const char retweet_uri[] = "/retweet/"; static const char group_uri[] = "/../statusnet/groups/timeline/"; +static const char config_default[] = "/etc/bti"; +static const char config_user_default[] = ".bti"; + static CURL *curl_init(void) { CURL *curl; @@ -284,8 +287,8 @@ static CURL *curl_init(void) } /* The final place data is sent to the screen/pty/tty */ -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); @@ -724,6 +727,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,11 +1127,12 @@ 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; char *http_proxy; + char *home; + const char *config_file; time_t t; int page_nr; @@ -1140,12 +1149,23 @@ int main(int argc, char *argv[], char *envp[]) session->time = strdup(ctime(&t)); session->time[strlen(session->time)-1] = 0x00; - /* Get the home directory so we can try to find a config file */ - session->homedir = strdup(getenv("HOME")); + /* + * Get the home directory so we can try to find a config file. + * If we have no home dir set up, look in /etc/bti + */ + home = getenv("HOME"); + if (home) { + /* We have a home dir, so this might be a user */ + session->homedir = strdup(home); + config_file = config_user_default; + } else { + session->homedir = strdup(""); + config_file = config_default; + } /* set up a default config file location (traditionally ~/.bti) */ - session->configfile = zalloc(strlen(session->homedir) + 7); - sprintf(session->configfile, "%s/.bti", session->homedir); + session->configfile = zalloc(strlen(session->homedir) + strlen(config_file) + 7); + sprintf(session->configfile, "%s/%s", session->homedir, config_file); /* Set environment variables first, before reading command line options * or config file values. */ @@ -1161,7 +1181,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 +1380,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); }