@@ -87,38 +87,30 @@ std::string DataSpecUtils::describe(OutputSpec const& spec)
8787 spec.matcher );
8888}
8989
90- void DataSpecUtils::describe (char * buffer, size_t size, InputSpec const & spec)
90+ size_t DataSpecUtils::describe (char * buffer, size_t size, InputSpec const & spec)
9191{
9292 if (auto concrete = std::get_if<ConcreteDataMatcher>(&spec.matcher )) {
93- char origin[5 ];
94- origin[4 ] = 0 ;
95- char description[17 ];
96- description[16 ] = 0 ;
97- snprintf (buffer, size, " %s/%s/%" PRIu32, (strncpy (origin, concrete->origin .str , 4 ), origin),
98- (strncpy (description, concrete->description .str , 16 ), description), concrete->subSpec );
93+ auto out = fmt::format_to_n (buffer, size, " {:.4}/{:.16}/{}" , concrete->origin .str , concrete->description .str , concrete->subSpec );
94+ return std::min (out.size , size);
9995 } else if (auto matcher = std::get_if<DataDescriptorMatcher>(&spec.matcher )) {
10096 std::ostringstream ss;
10197 ss << " <matcher query: " << *matcher << " >" ;
102- strncpy (buffer, ss.str ().c_str (), size - 1 );
103- } else {
104- throw runtime_error (" Unsupported InputSpec" );
98+ auto out = fmt::format_to_n (buffer, size, " {}" , ss.str ());
99+ return std::min (out.size , size);
105100 }
101+ throw runtime_error (" Unsupported InputSpec" );
106102}
107103
108- void DataSpecUtils::describe (char * buffer, size_t size, OutputSpec const & spec)
104+ size_t DataSpecUtils::describe (char * buffer, size_t size, OutputSpec const & spec)
109105{
110106 if (auto concrete = std::get_if<ConcreteDataMatcher>(&spec.matcher )) {
111- char origin[5 ];
112- origin[4 ] = 0 ;
113- char description[17 ];
114- description[16 ] = 0 ;
115- snprintf (buffer, size, " %s/%s/%" PRIu32, (strncpy (origin, concrete->origin .str , 4 ), origin),
116- (strncpy (description, concrete->description .str , 16 ), description), concrete->subSpec );
107+ auto out = fmt::format_to_n (buffer, size, " {:.4}/{:.16}/{}" , concrete->origin .str , concrete->description .str , concrete->subSpec );
108+ return std::min (out.size , size);
117109 } else if (auto concrete = std::get_if<ConcreteDataTypeMatcher>(&spec.matcher )) {
118- fmt::format_to (buffer, " <matcher query: {}/{}>" , concrete->origin , concrete->description );
119- } else {
120- throw runtime_error (" Unsupported OutputSpec" );
110+ auto out = fmt::format_to_n (buffer, size, " <matcher query: {}/{}>" , concrete->origin , concrete->description );
111+ return std::min (out.size , size);
121112 }
113+ throw runtime_error (" Unsupported OutputSpec" );
122114}
123115
124116std::string DataSpecUtils::label (InputSpec const & spec)
0 commit comments