diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/unstable/uuid.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/unstable/uuid.cpp b/src/unstable/uuid.cpp index fb237d8..4ac90a5 100644 --- a/src/unstable/uuid.cpp +++ b/src/unstable/uuid.cpp | |||
@@ -11,6 +11,11 @@ | |||
11 | #include "bu/membuf.h" | 11 | #include "bu/membuf.h" |
12 | #include <string.h> | 12 | #include <string.h> |
13 | 13 | ||
14 | #ifdef WIN32 | ||
15 | #include <rpc.h> | ||
16 | #include <Rpcdce.h> | ||
17 | #endif | ||
18 | |||
14 | Bu::Uuid::Uuid() | 19 | Bu::Uuid::Uuid() |
15 | { | 20 | { |
16 | clear(); | 21 | clear(); |
@@ -77,12 +82,31 @@ void Bu::Uuid::clear() | |||
77 | 82 | ||
78 | Bu::Uuid Bu::Uuid::gen() | 83 | Bu::Uuid Bu::Uuid::gen() |
79 | { | 84 | { |
85 | #ifdef linux | ||
80 | Bu::File fIn( "/proc/sys/kernel/random/uuid", Bu::File::Read ); | 86 | Bu::File fIn( "/proc/sys/kernel/random/uuid", Bu::File::Read ); |
81 | char dat[36]; | 87 | char dat[36]; |
82 | fIn.read( dat, 36 ); | 88 | fIn.read( dat, 36 ); |
83 | Uuid id; | 89 | Uuid id; |
84 | id.set( dat ); | 90 | id.set( dat ); |
85 | return id; | 91 | return id; |
92 | #elif WIN32 | ||
93 | UUID uuid; | ||
94 | UuidCreate( &uuid ); | ||
95 | Uuid id; | ||
96 | id.data[0] = ((unsigned char *)&uuid.Data1)[3]; | ||
97 | id.data[1] = ((unsigned char *)&uuid.Data1)[2]; | ||
98 | id.data[2] = ((unsigned char *)&uuid.Data1)[1]; | ||
99 | id.data[3] = ((unsigned char *)&uuid.Data1)[0]; | ||
100 | id.data[4] = ((unsigned char *)&uuid.Data2)[1]; | ||
101 | id.data[5] = ((unsigned char *)&uuid.Data2)[0]; | ||
102 | id.data[6] = ((unsigned char *)&uuid.Data3)[1]; | ||
103 | id.data[7] = ((unsigned char *)&uuid.Data3)[0]; | ||
104 | memcpy( id.data+8, uuid.Data4, 8 ); | ||
105 | |||
106 | return id; | ||
107 | #else | ||
108 | # error We should be using one of the other fallbacks, but your platform is not supported yet. Sorry. | ||
109 | #endif | ||
86 | } | 110 | } |
87 | 111 | ||
88 | void Bu::Uuid::set( const Bu::String &sSrc ) | 112 | void Bu::Uuid::set( const Bu::String &sSrc ) |