static std::optional<unsigned> parseUnsignedIntFromString(constchar* optarg, constchar* name) { auto v = strtoul(optarg, nullptr, 0); if (((v == ULONG_MAX) && (errno == ERANGE)) || (v > UINT_MAX)) {
cerr << name << " value is out of range: " << optarg << endl;
} elseif (v != 0) { return v;
} else {
cerr << name << " value is invalid or missing: " << optarg << endl;
}
// unique values to identify the options
constexpr int OPT_VHAL_SERVER_CID = 1001;
constexpr int OPT_VHAL_SERVER_PORT_NUMBER = 1002;
constexpr int OPT_VHAL_SERVER_POWER_STATE_FILE = 1003;
constexpr int OPT_VHAL_SERVER_POWER_STATE_SOCKET = 1004;
int optValue; while ((optValue = getopt_long_only(argc, argv, ":", longOptions, 0)) != -1) { switch (optValue) { case OPT_VHAL_SERVER_CID:
cid = parseUnsignedIntFromString(optarg, "cid"); break; case OPT_VHAL_SERVER_PORT_NUMBER:
port = parseUnsignedIntFromString(optarg, "port"); break; case OPT_VHAL_SERVER_POWER_STATE_FILE:
powerStateMarkerFilePath = std::string(optarg); break; case OPT_VHAL_SERVER_POWER_STATE_SOCKET:
powerStateSocketPath = std::string(optarg); break; default: // ignore other options break;
}
}
if (!cid.has_value() && error) {
*error += "Missing server CID. ";
} if (!port.has_value() && error) {
*error += "Missing server port number. ";
} if (!powerStateMarkerFilePath.has_value() && error) {
*error += "Missing power state marker file path. ";
} if (!powerStateSocketPath.has_value() && error) {
*error += "Missing power state socket path. ";
}
if (cid && port && powerStateMarkerFilePath && powerStateSocketPath) { return VirtualizedVhalServerInfo{
{*cid, *port}, *powerStateMarkerFilePath, *powerStateSocketPath};
} return std::nullopt;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.