Fix some segfaults
authorMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 10 Aug 2012 14:18:55 +0000 (16:18 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 10 Aug 2012 14:18:55 +0000 (16:18 +0200)
latester/histogram.h
latester/latester.c

index 64dcb22..80d629e 100644 (file)
@@ -36,6 +36,10 @@ void histogram_fprint(struct histogram *h, FILE *f)
 {
        unsigned long long sum = 0, cum;
        unsigned i;
+
+       if (!f)
+               return;
+
        for (i = 0; i < h->allocated; i++)
                sum += h->data[i];
        cum = sum;
index 1ab9781..140811f 100644 (file)
@@ -1,6 +1,6 @@
 /**************************************************************************/
 /* CAN latency tester                                                     */
-/* Copyright (C) 2010, 2011 Michal Sojka, DCE FEE CTU Prague                    */
+/* Copyright (C) 2010, 2011, 2012 Michal Sojka, DCE FEE CTU Prague        */
 /* License: GPLv2                                                        */
 /**************************************************************************/
 
@@ -305,6 +305,9 @@ void msg_info_print(FILE *f, struct msg_info *mi)
        static long num = 0;
        char sent[64], received[64];
 
+       if (!f)
+               return;
+
        sprint_canframe(sent, &mi->sent, true);
        sprint_canframe(received, &mi->received, true);
 
@@ -972,37 +975,41 @@ int main(int argc, const char *argv[])
 
        histogram_fprint(&histogram, opt.f_hist);
        histogram_fprint(&histogram_gw, opt.f_hist_gw);
-       fclose(opt.f_hist);
-       fclose(opt.f_hist_gw);
-       fclose(opt.f_msgs);
-
-
-       fprintf(opt.f_stat, "cmdline='");
-       for (i=0; i<argc; i++)
-               fprintf(opt.f_stat, "%s%s", argv[i], i < argc-1 ? " " : "");
-       fprintf(opt.f_stat, "'\n");
-
-       timespec_subtract(&diff, &stats.tac, &stats.tic);
-       fprintf(opt.f_stat, "duration=%s # seconds\n", tstamp_str(NULL, &diff));
+       if (opt.f_hist)
+               fclose(opt.f_hist);
+       if (opt.f_hist_gw)
+               fclose(opt.f_hist_gw);
+       if (opt.f_msgs)
+               fclose(opt.f_msgs);
+
+       if (opt.f_stat) {
+               fprintf(opt.f_stat, "cmdline='");
+               for (i=0; i<argc; i++)
+                       fprintf(opt.f_stat, "%s%s", argv[i], i < argc-1 ? " " : "");
+               fprintf(opt.f_stat, "'\n");
+
+               timespec_subtract(&diff, &stats.tac, &stats.tic);
+               fprintf(opt.f_stat, "duration=%s # seconds\n", tstamp_str(NULL, &diff));
        
-       fprintf(opt.f_stat, "sent=%d\n", count);
-       fprintf(opt.f_stat, "overrun=%d\n", stats.overrun);
-       if (stats.overrun && !opt.quiet)
-               printf("overrun=%d\n", stats.overrun);
-       fprintf(opt.f_stat, "enobufs=%d\n", stats.enobufs);
-       if (stats.enobufs && !opt.quiet)
-               printf("enobufs=%d\n", stats.enobufs);
-       fprintf(opt.f_stat, "lost=%d\n", stats.lost);
-       if (stats.lost && !opt.quiet)
-               printf("lost=%d\n", stats.lost);
-       fprintf(opt.f_stat, "timeouts=%d\n", stats.timeouts);
-       if (stats.timeouts && !opt.quiet)
-               printf("timeouts=%d\n", stats.timeouts);
-       fprintf(opt.f_stat, "invalid_frame=%d\n", stats.timeouts);
-       if (stats.timeouts && !opt.quiet)
-               printf("invalid_frame=%d\n", stats.timeouts);
-
-       fclose(opt.f_stat);
+               fprintf(opt.f_stat, "sent=%d\n", count);
+               fprintf(opt.f_stat, "overrun=%d\n", stats.overrun);
+               if (stats.overrun && !opt.quiet)
+                       printf("overrun=%d\n", stats.overrun);
+               fprintf(opt.f_stat, "enobufs=%d\n", stats.enobufs);
+               if (stats.enobufs && !opt.quiet)
+                       printf("enobufs=%d\n", stats.enobufs);
+               fprintf(opt.f_stat, "lost=%d\n", stats.lost);
+               if (stats.lost && !opt.quiet)
+                       printf("lost=%d\n", stats.lost);
+               fprintf(opt.f_stat, "timeouts=%d\n", stats.timeouts);
+               if (stats.timeouts && !opt.quiet)
+                       printf("timeouts=%d\n", stats.timeouts);
+               fprintf(opt.f_stat, "invalid_frame=%d\n", stats.timeouts);
+               if (stats.timeouts && !opt.quiet)
+                       printf("invalid_frame=%d\n", stats.timeouts);
+
+               fclose(opt.f_stat);
+       }
 
        return 0;
 }