Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gpakosz/uuid4
UUID v4 generation in C
https://github.com/gpakosz/uuid4
c cpp library tiny uuid uuid4
Last synced: 25 days ago
JSON representation
UUID v4 generation in C
- Host: GitHub
- URL: https://github.com/gpakosz/uuid4
- Owner: gpakosz
- License: mit
- Created: 2019-01-03T10:26:50.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2022-04-04T21:25:47.000Z (almost 3 years ago)
- Last Synced: 2024-05-01T20:38:52.988Z (9 months ago)
- Topics: c, cpp, library, tiny, uuid, uuid4
- Language: C
- Homepage:
- Size: 16.6 KB
- Stars: 65
- Watchers: 6
- Forks: 11
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Funding: .github/funding.yml
- License: LICENSE.MIT
Awesome Lists containing this project
README
# UUID4
A drop-in two files library to generate version 4 UUIDs.
⚠ The underlying PRNG is SplitMix which makes UUIDs produced by this library
trivially predictable. But if you're willing to generate secure "tokens", that's
not what UUIDs are made for anyway 🤷♂️The statistical properties of the generated UUIDs have been tested with
[PractRand] and [TestU01] 🎲This implementation has been used in production for years without any reported
defect so far 🤞Supported platforms:
- Windows
- Linux
- Mac
- iOS
- AndroidJust drop `uuid4.h` and `uuid4.c` into your build and get started. (see also
[customizing compilation])[customizing compilation]: #customizing-compilation
[PractRand]: http://pracrand.sourceforge.net/PractRand.txt
[TestU01]: http://simul.iro.umontreal.ca/testu01/tu01.html--------------------------------------------------------------------------------
## Usage
- `uuid4_seed()` seeds the version 4 UUID generator.
- `uuid4_gen()` generates a version 4 UUID.
- `uuid4_to_s()` converts a version 4 UUID into a string.Example usage:
```
#include
#includeint main()
{
UUID4_STATE_T state;
UUID4_T uuid;uuid4_seed(&state);
uuid4_gen(&state, &uuid);char buffer[UUID4_STR_BUFFER_SIZE];
if (!uuid4_to_s(uuid, buffer, sizeof(buffer)))
exit(EXIT_FAILURE);printf("%s\n", buffer);
return EXIT_SUCCESS;
}
```--------------------------------------------------------------------------------
## Customizing compilation
You can customize the library's behavior by defining the following macros:
- `UUID4_FUNCSPEC`
- `UUID4_PREFIX`
- `UUID4_ASSERT`## Compiling for Windows
There is a Visual Studio 2015 solution in the `_win-vs14/` folder.
## Compiling for Linux or Mac
There is a GNU Make 3.81 `MakeFile` in the `_gnu-make/` folder:
$ make -j -C _gnu-make/
## Compiling for Mac
See above if you want to compile from command line. Otherwise there is an Xcode
project located in the `_mac-xcode/` folder.## Compiling for iOS
There is an Xcode project located in the `_ios-xcode/` folder.
If you prefer compiling from command line and deploying to a jailbroken device
through SSH, use:$ make -j -C _gnu-make/ platform=ios architecture=arm64 CC="$(xcrun --sdk iphoneos --find clang) -isysroot $(xcrun --sdk iphoneos --show-sdk-path) -arch arm64" postbuild="codesign -s 'iPhone Developer'"
## Compiling for Android
You will have to install the Android NDK, and point the `$NDK_ROOT` environment
variable to the NDK path: e.g. `export NDK_ROOT=/opt/android-ndk` (without a
trailing `/` character).Next, the easy way is to make a standalone Android toolchain with the following
command:$ $NDK_ROOT/build/tools/make_standalone_toolchain.py --arch=arm64 --api 21 --install-dir=/tmp/android-toolchain
Now you can compile the example by running:
$ make -j -C _gnu-make/ platform=android architecture=arm64 CC=/tmp/android-toolchain/bin/aarch64-linux-android-gcc CXX=/tmp/android-toolchain/bin/aarch64-linux-android-g++
--------------------------------------------------------------------------------
If you find this library useful and decide to use it in your own projects please
drop me a line [@gpakosz].[@gpakosz]: https://twitter.com/gpakosz