diff options
Diffstat (limited to 'util')
-rw-r--r-- | util/meson.build | 8 | ||||
-rw-r--r-- | util/uuid.c | 33 |
2 files changed, 41 insertions, 0 deletions
diff --git a/util/meson.build b/util/meson.build index 14cd59c5..06996a4e 100644 --- a/util/meson.build +++ b/util/meson.build @@ -7,3 +7,11 @@ wlr_files += files( 'signal.c', 'time.c', ) + +if uuid.found() + wlr_deps += uuid + add_project_arguments('-DHAS_LIBUUID=1', language: 'c') +else + add_project_arguments('-DHAS_LIBUUID=0', language: 'c') +endif +wlr_files += files('uuid.c') diff --git a/util/uuid.c b/util/uuid.c new file mode 100644 index 00000000..a4523216 --- /dev/null +++ b/util/uuid.c @@ -0,0 +1,33 @@ +#include <uuid.h> +#include "util/uuid.h" + +#if HAS_LIBUUID +bool generate_uuid(char out[static 37]) { + uuid_t uuid; + uuid_generate_random(uuid); + uuid_unparse(uuid, out); + return true; +} +#else +#include <string.h> +#include <stdlib.h> + +bool generate_uuid(char out[static 37]) { + uuid_t uuid; + uint32_t status; + uuid_create(&uuid, &status); + if (status != uuid_s_ok) { + return false; + } + char *str; + uuid_to_string(&uuid, &str, &status); + if (status != uuid_s_ok) { + return false; + } + + assert(strlen(str) + 1 == 37); + memcpy(out, str, sizeof(out)); + free(str); + return true; +} +#endif |