fix (no)use of offset in AudioEngine::get_sync_offset()
[ardour.git] / libs / ardour / broadcast_info.cc
index b887c4fe18c0e5f4306bb632147bdde24bbb98a7..1144aaa2cd668f5df9155957d76935c7f4fd3316 100644 (file)
 
 */
 
-#include <ardour/broadcast_info.h>
+#include "ardour/broadcast_info.h"
 
 #include <sstream>
 #include <iomanip>
 
 #include <glibmm.h>
 
-#include <ardour/svn_revision.h>
-#include <ardour/ardour.h>
-#include <ardour/session.h>
+#include "ardour/svn_revision.h"
+#include "ardour/ardour.h"
+#include "ardour/session.h"
 
-#include <pbd/convert.h>
+#include "pbd/convert.h"
 
 using namespace PBD;
 
 namespace ARDOUR
 {
 
+static void
+snprintf_bounded_null_filled (char* target, size_t target_size, char const * fmt, ...)
+{
+       char buf[target_size+1];
+       va_list ap;
+
+       va_start (ap, fmt);
+       vsnprintf (buf, target_size+1, fmt, ap);
+       va_end (ap);
+
+       memset (target, 0, target_size);
+       memcpy (target, buf, target_size);
+
+}
+
 BroadcastInfo::BroadcastInfo () :
   _has_info (false)
 {
@@ -56,17 +71,17 @@ BroadcastInfo::~BroadcastInfo ()
 }
 
 void
-BroadcastInfo::set_from_session (Session const & session, int64_t time)
+BroadcastInfo::set_from_session (Session const & session, int64_t time_ref)
 {
        set_description (session.name());
-       set_time_reference (time);
+       set_time_reference (time_ref);
        set_origination_time ();
        set_originator ();
-       set_originator_ref ();
+       set_originator_ref (session);
 }
 
 bool
-BroadcastInfo::load_from_file (string const & filename)
+BroadcastInfo::load_from_file (std::string const & filename)
 {
        SNDFILE * file = 0;
        SF_INFO info;
@@ -97,7 +112,7 @@ BroadcastInfo::load_from_file (SNDFILE* sf)
        return true;
 }
 
-string
+std::string
 BroadcastInfo::get_description () const
 {
        return info->description;
@@ -121,12 +136,12 @@ BroadcastInfo::get_origination_time () const
 {
        struct tm ret;
        
-       string date = info->origination_date;
+       std::string date = info->origination_date;
        ret.tm_year = atoi (date.substr (0, 4)) - 1900;
        ret.tm_mon = atoi (date.substr (5, 2));
        ret.tm_mday = atoi (date.substr (8, 2));
        
-       string time = info->origination_time;
+       std::string time = info->origination_time;
        ret.tm_hour = atoi (time.substr (0,2));
        ret.tm_min = atoi (time.substr (3,2));
        ret.tm_sec = atoi (time.substr (6,2));
@@ -134,20 +149,20 @@ BroadcastInfo::get_origination_time () const
        return ret;
 }
 
-string
+std::string
 BroadcastInfo::get_originator () const
 {
        return info->originator;
 }
 
-string
+std::string
 BroadcastInfo::get_originator_ref () const
 {
        return info->originator_reference;
 }
 
 bool
-BroadcastInfo::write_to_file (string const & filename)
+BroadcastInfo::write_to_file (std::string const & filename)
 {
        SNDFILE * file = 0;
        SF_INFO info;
@@ -177,11 +192,11 @@ BroadcastInfo::write_to_file (SNDFILE* sf)
 }
 
 void
-BroadcastInfo::set_description (string const & desc)
+BroadcastInfo::set_description (std::string const & desc)
 {
        _has_info = true;
        
-       snprintf (info->description, sizeof (info->description), desc.c_str());
+       snprintf_bounded_null_filled (info->description, sizeof (info->description), desc.c_str());
 }
 
 void
@@ -202,37 +217,37 @@ BroadcastInfo::set_origination_time (struct tm * now)
                _time = *now;
        }
        
-       snprintf (info->origination_date, sizeof (info->origination_date), "%4d-%02d-%02d",
+       snprintf_bounded_null_filled (info->origination_date, sizeof (info->origination_date), "%4d-%02d-%02d",
                  _time.tm_year + 1900,
                  _time.tm_mon + 1,
                  _time.tm_mday);
        
-       snprintf (info->origination_time, sizeof (info->origination_time), "%02d:%02d:%02d",
+       snprintf_bounded_null_filled (info->origination_time, sizeof (info->origination_time), "%02d:%02d:%02d",
                  _time.tm_hour,
                  _time.tm_min,
                  _time.tm_sec);
 }
 
 void
-BroadcastInfo::set_originator (string const & str)
+BroadcastInfo::set_originator (std::string const & str)
 {
        _has_info = true;
        
        if (!str.empty()) {
-               snprintf (info->originator, sizeof (info->originator), str.c_str());
+               snprintf_bounded_null_filled (info->originator, sizeof (info->originator), str.c_str());
                return;
        }
        
-       snprintf (info->originator, sizeof (info->originator), Glib::get_real_name().c_str());
+       snprintf_bounded_null_filled (info->originator, sizeof (info->originator), Glib::get_real_name().c_str());
 }
 
 void
-BroadcastInfo::set_originator_ref (string const & str)
+BroadcastInfo::set_originator_ref (Session const & session, std::string const & str)
 {
        _has_info = true;
        
        if (!str.empty()) {
-               snprintf (info->originator_reference, sizeof (info->originator_reference), str.c_str());
+               snprintf_bounded_null_filled (info->originator_reference, sizeof (info->originator_reference), str.c_str());
                return;
        }
        
@@ -245,9 +260,9 @@ BroadcastInfo::set_originator_ref (string const & str)
        std::ostringstream serial_number;
        serial_number << "ARDOUR" << "r" <<  std::setfill('0') << std::right << std::setw(5) << svn_revision;
        
-       snprintf (info->originator_reference, sizeof (info->originator_reference), "%2s%3s%12s%02d%02d%02d%9d",
-                 Config->get_bwf_country_code().c_str(),
-                 Config->get_bwf_organization_code().c_str(),
+       snprintf_bounded_null_filled (info->originator_reference, sizeof (info->originator_reference), "%2s%3s%12s%02d%02d%02d%9d",
+                 session.config.get_bwf_country_code().c_str(),
+                 session.config.get_bwf_organization_code().c_str(),
                  serial_number.str().c_str(),
                  _time.tm_hour,
                  _time.tm_min,