use modern C++ for snprintf (#9841)
This replaces vector<char>::operator[] (which now a constexpr since C++20). We could use &vector::data(), but a unique_ptr seems more appropriate for the case at hand.
This commit is contained in:
parent
c9645723de
commit
f17a656217
@ -39,15 +39,15 @@ namespace ARDOUR
|
|||||||
static void
|
static void
|
||||||
snprintf_bounded_null_filled (char* target, size_t target_size, char const * fmt, ...)
|
snprintf_bounded_null_filled (char* target, size_t target_size, char const * fmt, ...)
|
||||||
{
|
{
|
||||||
std::vector<char> buf(target_size+1);
|
std::unique_ptr<char[]> buf (new char [target_size + 1]);
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
vsnprintf (&buf[0], target_size+1, fmt, ap);
|
vsnprintf (buf.get (), target_size+1, fmt, ap);
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
memset (target, 0, target_size);
|
memset (target, 0, target_size);
|
||||||
memcpy (target, &buf[0], target_size);
|
memcpy (target, buf.get (), target_size);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -796,9 +796,9 @@ ExportGraphBuilder::Intermediate::Intermediate (ExportGraphBuilder & parent, Fil
|
|||||||
int format = ExportFormatBase::F_RAW | ExportFormatBase::SF_Float;
|
int format = ExportFormatBase::F_RAW | ExportFormatBase::SF_Float;
|
||||||
|
|
||||||
if (parent._realtime) {
|
if (parent._realtime) {
|
||||||
tmp_file.reset (new TmpFileRt<float> (&tmpfile_path_buf[0], format, channels, config.format->sample_rate()));
|
tmp_file.reset (new TmpFileRt<float> (tmpfile_path_buf.data (), format, channels, config.format->sample_rate()));
|
||||||
} else {
|
} else {
|
||||||
tmp_file.reset (new TmpFileSync<float> (&tmpfile_path_buf[0], format, channels, config.format->sample_rate()));
|
tmp_file.reset (new TmpFileSync<float> (tmpfile_path_buf.data (), format, channels, config.format->sample_rate()));
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp_file->FileWritten.connect_same_thread (post_processing_connection,
|
tmp_file->FileWritten.connect_same_thread (post_processing_connection,
|
||||||
|
@ -1338,7 +1338,6 @@ IO::bundle_changed (Bundle::Change /*c*/)
|
|||||||
string
|
string
|
||||||
IO::build_legal_port_name (std::shared_ptr<PortSet const> ports, DataType type)
|
IO::build_legal_port_name (std::shared_ptr<PortSet const> ports, DataType type)
|
||||||
{
|
{
|
||||||
const int name_size = AudioEngine::instance()->port_name_size();
|
|
||||||
int limit;
|
int limit;
|
||||||
string suffix;
|
string suffix;
|
||||||
|
|
||||||
@ -1372,21 +1371,24 @@ IO::build_legal_port_name (std::shared_ptr<PortSet const> ports, DataType type)
|
|||||||
|
|
||||||
// allow up to 4 digits for the output port number, plus the slash, suffix and extra space
|
// allow up to 4 digits for the output port number, plus the slash, suffix and extra space
|
||||||
|
|
||||||
|
uint32_t name_size = AudioEngine::instance()->port_name_size();
|
||||||
limit = name_size - AudioEngine::instance()->my_name().length() - (suffix.length() + 5);
|
limit = name_size - AudioEngine::instance()->my_name().length() - (suffix.length() + 5);
|
||||||
|
|
||||||
std::vector<char> buf1(name_size+1);
|
++name_size; // allow for \0
|
||||||
std::vector<char> buf2(name_size+1);
|
|
||||||
|
std::unique_ptr<char[]> buf1 (new char[name_size]);
|
||||||
|
std::unique_ptr<char[]> buf2 (new char[name_size]);
|
||||||
|
|
||||||
/* colons are illegal in port names, so fix that */
|
/* colons are illegal in port names, so fix that */
|
||||||
|
|
||||||
string nom = legalize_io_name (_name.val());
|
string nom = legalize_io_name (_name.val());
|
||||||
|
|
||||||
snprintf (&buf1[0], name_size+1, ("%.*s/%s"), limit, nom.c_str(), suffix.c_str());
|
std::snprintf (buf1.get(), name_size, ("%.*s/%s"), limit, nom.c_str(), suffix.c_str());
|
||||||
|
|
||||||
int port_number = find_port_hole (ports, &buf1[0]);
|
int port_number = find_port_hole (ports, buf1.get ());
|
||||||
snprintf (&buf2[0], name_size+1, "%s %d", &buf1[0], port_number);
|
std::snprintf (buf2.get(), name_size, "%s %d", buf1.get (), port_number);
|
||||||
|
|
||||||
return string (&buf2[0]);
|
return string (buf2.get ());
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t
|
int32_t
|
||||||
@ -1400,17 +1402,17 @@ IO::find_port_hole (std::shared_ptr<PortSet const> ports, const char* base)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we only allow up to 4 characters for the port number
|
uint32_t const name_size = AudioEngine::instance()->port_name_size() + 1;
|
||||||
*/
|
|
||||||
|
|
||||||
|
/* we only allow up to 4 characters for the port number */
|
||||||
for (n = 1; n < 9999; ++n) {
|
for (n = 1; n < 9999; ++n) {
|
||||||
std::vector<char> buf (AudioEngine::instance()->port_name_size());
|
|
||||||
PortSet::const_iterator i = ports->begin ();
|
PortSet::const_iterator i = ports->begin ();
|
||||||
|
|
||||||
snprintf (&buf[0], buf.size()+1, _("%s %u"), base, n);
|
std::unique_ptr<char[]> buf (new char[name_size]);
|
||||||
|
std::snprintf (buf.get (), name_size, "%s %u", base, n);
|
||||||
|
|
||||||
for ( ; i != ports->end (); ++i) {
|
for ( ; i != ports->end (); ++i) {
|
||||||
if (string (i->name()) == string (&buf[0])) {
|
if (string (i->name()) == string (buf.get ())) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1526,13 +1528,13 @@ IO::bundle_channel_name (uint32_t c, uint32_t n, DataType t) const
|
|||||||
case 2:
|
case 2:
|
||||||
return c == 0 ? _("L") : _("R");
|
return c == 0 ? _("L") : _("R");
|
||||||
default:
|
default:
|
||||||
snprintf (buf, sizeof(buf), "%d", (c + 1));
|
std::snprintf (buf, sizeof(buf), "%d", (c + 1));
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
snprintf (buf, sizeof(buf), "%d", (c + 1));
|
std::snprintf (buf, sizeof(buf), "%d", (c + 1));
|
||||||
return buf;
|
return buf;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user