]> ToastFreeware Gitweb - gregoa/bti.git/blobdiff - bti.c
bti: Handle NULL HOME environment variables
[gregoa/bti.git] / bti.c
diff --git a/bti.c b/bti.c
index 3938e0a86b6b04f8050f2fc91d0f2bf5ce15ee98..a19b75cdb8028aa019236d092bcf2b49f66e6759 100644 (file)
--- a/bti.c
+++ b/bti.c
@@ -52,7 +52,7 @@
        } while (0)
 
 
        } while (0)
 
 
-static int debug;
+int debug;
 
 static void display_help(void)
 {
 
 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 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;
 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 */
 }
 
 /* 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);
 {
        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);
                }
 
                                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);
                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;
        struct session *session;
        pid_t child;
        char *tweet;
-       char *retweet;
        static char password[80];
        int retval = 0;
        int option;
        char *http_proxy;
        static char password[80];
        int retval = 0;
        int option;
        char *http_proxy;
+       char *home;
+       const char *config_file;
        time_t t;
        int page_nr;
 
        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;
 
        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) */
 
        /* 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. */
 
        /* 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,
 
        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;
                                          options, NULL);
                if (option == -1)
                        break;
@@ -1360,17 +1380,21 @@ int main(int argc, char *argv[], char *envp[])
        }
 
        if (session->action == ACTION_RETWEET) {
        }
 
        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;
                }
 
                        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);
        }
 
                dbg("retweet ID = %s\n", session->retweet);
        }