release 016
[gregoa/bti.git] / bti.c
diff --git a/bti.c b/bti.c
index 70b0437..5f4a6cb 100644 (file)
--- a/bti.c
+++ b/bti.c
@@ -74,6 +74,7 @@ struct session {
        char *user;
        int bash;
        int shrink_urls;
+       int dry_run;
        enum host host;
        enum action action;
 };
@@ -407,10 +408,12 @@ static int send_request(struct session *session)
 
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_callback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, curl_buf);
-       res = curl_easy_perform(curl);
-       if (res && !session->bash) {
-               fprintf(stderr, "error(%d) trying to perform operation\n", res);
-               return -EINVAL;
+       if (!session->dry_run) {
+               res = curl_easy_perform(curl);
+               if (res && !session->bash) {
+                       fprintf(stderr, "error(%d) trying to perform operation\n", res);
+                       return -EINVAL;
+               }
        }
 
        curl_easy_cleanup(curl);
@@ -699,7 +702,7 @@ static int find_urls(const char *tweet, int **pranges)
  * execution it can then write to element 0 (stdin of exe), and read from
  * element 1 (stdout) and 2 (stderr).
  */
-static int popenRW(int *rwepipe, const char *exe, const char *const argv[])
+static int popenRWE(int *rwepipe, const char *exe, const char *const argv[])
 {
        int in[2];
        int out[2];
@@ -733,11 +736,11 @@ static int popenRW(int *rwepipe, const char *exe, const char *const argv[])
                close(out[0]);
                close(err[0]);
                close(0);
-               dup(in[0]);
+               rc = dup(in[0]);
                close(1);
-               dup(out[1]);
+               rc = dup(out[1]);
                close(2);
-               dup(err[1]);
+               rc = dup(err[1]);
 
                execvp(exe, (char**)argv);
                exit(1);
@@ -759,7 +762,7 @@ error_in:
        return -1;
 }
 
-static int pcloseRW(int pid, int *rwepipe)
+static int pcloseRWE(int pid, int *rwepipe)
 {
        int rc, status;
        close(rwepipe[0]);
@@ -816,12 +819,12 @@ static char *shrink_urls(char *text)
                NULL
        };
        int shrink_pid;
-       int shrink_pipe[2];
+       int shrink_pipe[3];
        int inlen = strlen(text);
 
        dbg("before len=%u\n", inlen);
 
-       shrink_pid = popenRW(shrink_pipe, shrink_args[0], shrink_args);
+       shrink_pid = popenRWE(shrink_pipe, shrink_args[0], shrink_args);
        if (shrink_pid < 0)
                return text;
 
@@ -875,7 +878,7 @@ static char *shrink_urls(char *text)
 
        free(ranges);
 
-       (void)pcloseRW(shrink_pid, shrink_pipe);
+       (void)pcloseRWE(shrink_pid, shrink_pipe);
 
        text[outofs] = 0;
        dbg("after len=%u\n", outofs);
@@ -896,6 +899,7 @@ int main(int argc, char *argv[], char *envp[])
                { "shrink-urls", 0, NULL, 's' },
                { "help", 0, NULL, 'h' },
                { "bash", 0, NULL, 'b' },
+               { "dry-run", 0, NULL, 'n' },
                { "version", 0, NULL, 'v' },
                { }
        };
@@ -1007,6 +1011,9 @@ int main(int argc, char *argv[], char *envp[])
                case 'h':
                        display_help();
                        goto exit;
+               case 'n':
+                       session->dry_run = 1;
+                       break;
                case 'v':
                        display_version();
                        goto exit;