xref: /openbmc/libpldm/bindings/cpp/utils.cpp (revision d6a957481638b00a49aed15d04b60d3d32fede54)
1*d6a95748SAlexander Hansen #include "utils.hpp"
2*d6a95748SAlexander Hansen 
3*d6a95748SAlexander Hansen #include <libpldm/firmware_update.h>
4*d6a95748SAlexander Hansen #include <libpldm/pldm_types.h>
5*d6a95748SAlexander Hansen 
6*d6a95748SAlexander Hansen #include <string>
7*d6a95748SAlexander Hansen 
8*d6a95748SAlexander Hansen namespace pldm
9*d6a95748SAlexander Hansen {
10*d6a95748SAlexander Hansen namespace utils
11*d6a95748SAlexander Hansen {
12*d6a95748SAlexander Hansen 
13*d6a95748SAlexander Hansen 	std::expected<std::string, std::string>
toString(const uint8_t pldm_string_type,const struct variable_field & var)14*d6a95748SAlexander Hansen 	toString(const uint8_t pldm_string_type,
15*d6a95748SAlexander Hansen 		 const struct variable_field &var)
16*d6a95748SAlexander Hansen 	{
17*d6a95748SAlexander Hansen 		if (var.ptr == nullptr || !var.length) {
18*d6a95748SAlexander Hansen 			return std::unexpected("null pointer");
19*d6a95748SAlexander Hansen 		}
20*d6a95748SAlexander Hansen 
21*d6a95748SAlexander Hansen 		if (pldm_string_type != PLDM_STR_TYPE_ASCII) {
22*d6a95748SAlexander Hansen 			// unsupported string encoding
23*d6a95748SAlexander Hansen 			return std::unexpected("not an ascii string");
24*d6a95748SAlexander Hansen 		}
25*d6a95748SAlexander Hansen 
26*d6a95748SAlexander Hansen 		std::string s(var.length, ' ');
27*d6a95748SAlexander Hansen 		for (size_t i = 0; i < var.length; i++) {
28*d6a95748SAlexander Hansen 			s[i] = static_cast<char>(var.ptr[i]);
29*d6a95748SAlexander Hansen 		}
30*d6a95748SAlexander Hansen 
31*d6a95748SAlexander Hansen 		return s;
32*d6a95748SAlexander Hansen 	}
33*d6a95748SAlexander Hansen 
34*d6a95748SAlexander Hansen } // namespace utils
35*d6a95748SAlexander Hansen } // namespace pldm
36