*
*/
+#include "uuid.hpp"
+
#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>
#include <string.h>
#include <time.h>
-#include "uuid.hpp"
-
namespace {
const lttng_uuid nil_uuid = {};
bool lttng_uuid_is_init;
void lttng_uuid_to_str(const lttng_uuid& uuid, char *uuid_str)
{
- sprintf(uuid_str, LTTNG_UUID_FMT, LTTNG_UUID_FMT_VALUES(uuid));
+ snprintf(uuid_str, LTTNG_UUID_STR_LEN, LTTNG_UUID_FMT, LTTNG_UUID_FMT_VALUES(uuid));
}
std::string lttng::utils::uuid_to_str(const lttng_uuid& uuid)
int lttng_uuid_from_str(const char *str_in, lttng_uuid& uuid_out)
{
int ret = 0;
- lttng_uuid uuid_scan;
+ lttng_uuid uuid_scan = {};
if (str_in == nullptr) {
ret = -1;
}
/* Scan to a temporary location in case of a partial match. */
- if (sscanf(str_in, LTTNG_UUID_FMT, LTTNG_UUID_SCAN_VALUES(uuid_scan)) !=
- LTTNG_UUID_LEN) {
+ if (sscanf(str_in, LTTNG_UUID_FMT, LTTNG_UUID_SCAN_VALUES(uuid_scan)) != LTTNG_UUID_LEN) {
ret = -1;
goto end;
}
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 (const 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;
}