diff --git a/src/minivhd_internal.h b/src/minivhd_internal.h index 6e5ead0..cf18e76 100644 --- a/src/minivhd_internal.h +++ b/src/minivhd_internal.h @@ -64,4 +64,5 @@ void mvhd_buffer_to_footer(MVHDFooter* footer, uint8_t* buffer); void mvhd_buffer_to_header(MVHDSparseHeader* header, uint8_t* buffer); void mvhd_footer_to_buffer(MVHDFooter* footer, uint8_t* buffer); void mvhd_header_to_buffer(MVHDSparseHeader* header, uint8_t* buffer); +void mvhd_generate_uuid(uint8_t *uuid); #endif \ No newline at end of file diff --git a/src/minivhd_util.c b/src/minivhd_util.c index 644f0c5..4434c8d 100644 --- a/src/minivhd_util.c +++ b/src/minivhd_util.c @@ -1,5 +1,8 @@ #include #include +#ifdef HAVE_UUID_H +#include +#endif #include "minivhd_internal.h" #include "minivhd.h" @@ -53,4 +56,23 @@ MVHDGeom mvhd_calculate_geometry(int size_mb, int* new_size) { *new_size = chs.cyl * chs.heads * chs.spt * MVHD_SECTOR_SIZE; return chs; +} + +/* A UUID is required, but there are no restrictions on how it needs + to be generated. */ +void mvhd_generate_uuid(uint8_t *uuid) +{ +#if defined(HAVE_UUID_H) + uuid_generate(guid); +#else + int n; + srand(time(NULL)); + for (n = 0; n < 16; n++) { + uuid[n] = rand(); + } + uuid[6] &= 0x0F; + uuid[6] |= 0x40; /* Type 4 */ + uuid[8] &= 0x3F; + uuid[8] |= 0x80; /* Variant 1 */ +#endif } \ No newline at end of file