*/
#include <common/compat/string.hpp>
+#include <common/error.hpp>
+#include <common/format.hpp>
+#include <common/random.hpp>
+
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
sprintf(uuid_str, LTTNG_UUID_FMT, LTTNG_UUID_FMT_VALUES(uuid));
}
+std::string lttng::utils::uuid_to_str(const lttng_uuid& uuid)
+{
+ std::string uuid_str(LTTNG_UUID_STR_LEN, '\0');
+
+ ::lttng_uuid_to_str(uuid, &uuid_str[0]);
+
+ /* Don't include '\0' in the C++ string. */
+ uuid_str.resize(uuid_str.size() - 1);
+
+ return uuid_str;
+}
+
int lttng_uuid_from_str(const char *str_in, lttng_uuid& uuid_out)
{
int ret = 0;
if (sscanf(str_in, LTTNG_UUID_FMT, LTTNG_UUID_SCAN_VALUES(uuid_scan)) !=
LTTNG_UUID_LEN) {
ret = -1;
+ goto end;
}
uuid_out = uuid_scan;
int i, ret = 0;
if (!lttng_uuid_is_init) {
- /*
- * We don't need cryptographic quality randomness to
- * generate UUIDs, seed rand with the epoch.
- */
- const time_t epoch = time(NULL);
-
- if (epoch == (time_t) -1) {
+ try {
+ srand(lttng::random::produce_best_effort_random_seed());
+ } catch (std::exception& e) {
+ ERR("Failed to initialize random seed during generation of UUID: %s",
+ e.what());
ret = -1;
goto end;
}
- srand(epoch);
lttng_uuid_is_init = true;
}